Kubernetes 101: StorageClass
Fala galera! Seis tão baum?
O StorageClass é um recurso essencial no Kubernetes, responsável por gerenciar o armazenamento dinâmico no cluster. Ele automatiza o provisionamento de volumes persistentes, integrando-se com provedores de nuvem, como Azure, e torna a gestão de armazenamento mais eficiente e flexível. Neste artigo, vamos explorar em detalhes o que é o StorageClass, como ele funciona e como configurá-lo usando o Azure como exemplo.
O que é StorageClass?
No Kubernetes, um StorageClass define "classes de armazenamento"
para provisionar volumes de forma dinâmica. Ele permite que você especifique parâmetros como o tipo de armazenamento, nível de redundância e políticas de recuperação diretamente na configuração.
O StorageClass elimina a necessidade de criar manualmente PersistentVolumes (PVs), provisionando automaticamente o armazenamento necessário quando um PersistentVolumeClaim (PVC) é criado.
Por que usar StorageClass?
O uso do StorageClass oferece diversas vantagens:
- Automação: Criação automática de volumes persistentes sob demanda.
- Flexibilidade: Suporte para diferentes tipos de armazenamento (SSD, HDD, NFS, etc.).
- Integração com provedores de nuvem: Suporte nativo para serviços como Azure Disk, Azure File, AWS EBS, entre outros.
- Escalabilidade: Ideal para ambientes dinâmicos onde o armazenamento precisa ser gerenciado de forma eficiente.
Criando um StorageClass no Azure
Exemplo básico: Azure Disk
Vamos configurar um StorageClass para provisionar volumes usando o Azure Disk, um serviço de armazenamento gerenciado pela Microsoft.
- Criando o StorageClass
O arquivo YAML abaixo define um StorageClass que usa o Azure Disk:
1
2
3
4
5
6
7
8
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: azure-disk-standard
provisioner: kubernetes.io/azure-disk
parameters:
skuName: Standard_LRS
reclaimPolicy: Delete
- provisioner: Define o provisionador usado pelo Azure Disk.
- skuName: Especifica o tipo de disco (exemplo:
Standard_LRS
ouPremium_LRS
). - reclaimPolicy: Define o comportamento ao excluir um PVC. Neste caso, o volume será excluído automaticamente.
Comando para aplicar o StorageClass:
1
kubectl apply -f azure-disk-storageclass.yaml
- Criando um PersistentVolumeClaim (PVC)
Agora, criamos um PVC que solicita um volume com base no StorageClass:
1
2
3
4
5
6
7
8
9
10
11
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: meu-pvc-azure
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: azure-disk-standard
- accessModes: Define como o volume será acessado (
ReadWriteOnce
para acesso exclusivo por um nó). - storage: Solicita 10 GB de armazenamento.
- storageClassName: Associa o PVC ao StorageClass criado anteriormente.
Comando para aplicar o PVC:
1
kubectl apply -f pvc-azure.yaml
- Usando o PVC em um Pod
Com o PVC pronto, ele pode ser montado em um Pod:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
apiVersion: v1
kind: Pod
metadata:
name: meu-pod-azure
spec:
containers:
- name: app
image: nginx
volumeMounts:
- mountPath: "/mnt/storage"
name: volume-disk
volumes:
- name: volume-disk
persistentVolumeClaim:
claimName: meu-pvc-azure
Comando para criar o Pod:
1
kubectl apply -f pod-azure.yaml
- Verificando o Status
Para verificar os StorageClasses disponíveis:
1
kubectl get storageclass
Saída esperada:
1
2
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE AGE
azure-disk-standard kubernetes.io/azure-disk Delete Immediate 15m
Para listar os PersistentVolumes e PersistentVolumeClaims:
1
2
kubectl get pv
kubectl get pvc
Saída esperada para kubectl get pvc:
1
2
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
meu-pvc-azure Bound pvc-12345678-90ab-cdef-ghij-klmnopqrstuv 10Gi RWO azure-disk-standard 10m
Neste exemplo, o volume provisionado será montado no caminho /mnt/storage
dentro do contêiner.
Políticas de Recuperação (ReclaimPolicy)
As políticas de recuperação determinam o que acontece com os volumes persistentes quando o PVC associado é excluído:
- Delete: O volume é excluído automaticamente.
- Retain: O volume é mantido para análise ou reutilização manual.
No exemplo anterior, usamos a política Delete
. Para reter o volume, basta alterar a configuração do StorageClass:
1
reclaimPolicy: Retain
Outros parâmetros úteis
O StorageClass permite a customização de vários aspectos do armazenamento:
- skuName: Define o tipo de disco (exemplo:
Standard_LRS
ouPremium_LRS
). - kind: Pode ser configurado como
Shared
ouManaged
no Azure Disk. - fsT-ype: Define o sistema de arquivos usado (exemplo:
ext4
ouxfs
).
Conclusão
O StorageClass é uma ferramenta poderosa no Kubernetes que simplifica e automatiza a gestão de armazenamento dinâmico, especialmente em ambientes que utilizam provedores de nuvem como o Azure. Com o uso adequado de StorageClasses, você pode criar soluções mais flexíveis, escaláveis e alinhadas às necessidades da sua aplicação.
E, como sempre, não deixe de consultar a documentação oficial do Kubernetes para mais detalhes e práticas recomendadas sobre o uso de StorageClass!
Você pode acessar a documentação oficial aqui: StorageClass
É isso, galera! Se você gostou do artigo, comenta ou mande pra galera que também quer aprender Kubernetes!
Se você tiver alguma dúvida ou comentário, sinta-se à vontade para compartilhá-los conosco na seção de comentários abaixo!
Forte Abraço!