Volumes persistentes e reivindicações
Entenda como fornecer armazenamento durável aos pods usando volumes persistentes e reivindicações de volume persistente.
Volumes persistentes e reivindicações é uma aula grátis de DevOps Bootcamp no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de DevOps Bootcamp, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de DevOps Bootcamp inclui 4 aulas no total.
Pods e dados efêmeros
Os Pods nascem e desaparecem, mas os dados da sua aplicação geralmente precisam permanecer. Pense em um banco de dados ou em arquivos enviados pelos usuários.
- Quando um Pod é reiniciado ou reagendado, todos os dados armazenados diretamente no sistema de arquivos do contêiner são perdidos.
- Essa natureza efêmera é adequada para aplicações sem estado, mas os dados críticos precisam de uma solução durável.
- O Kubernetes oferece um sistema avançado para gerenciar armazenamento persistente que sobrevive aos ciclos de vida dos Pods.
PersistentVolume: armazenamento do cluster
Um PersistentVolume (PV) é uma unidade de armazenamento no seu cluster Kubernetes.
- É um recurso cujo escopo é o cluster, o que significa que não pertence a nenhum namespace específico.
- Os PVs são provisionados por um administrador ou dinamicamente por uma StorageClass.
- Eles abstraem os detalhes da tecnologia de armazenamento subjacente (por exemplo, Google Persistent Disk, AWS EBS ou compartilhamento NFS).
Definindo um PersistentVolume
Os PVs são definidos com detalhes como capacidade, modos de acesso e tipo de armazenamento. Este YAML descreve um PV usando um hostPath (para testes locais) com 5 Gigabytes de armazenamento.
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-local-pv
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
hostPath:
path: "/mnt/data"
Observação: hostPath normalmente é usado no desenvolvimento em um único nó e não é recomendado para produção.
PersistentVolumeClaim: solicitação do Pod
Um PersistentVolumeClaim (PVC) é uma solicitação de armazenamento feita por um usuário ou uma aplicação dentro de um namespace específico.
- Os Pods não consomem PVs diretamente; eles solicitam armazenamento por meio de um PVC.
- Os PVCs têm escopo de namespace, portanto ficam dentro da área de um projeto ou de uma equipe específica.
- Eles especificam o tamanho desejado, os modos de acesso e, opcionalmente, uma classe de armazenamento.
PV e PVC: os casamenteiros
O Kubernetes associa automaticamente um PVC a um PV disponível por meio de um processo chamado vinculação.
- Quando um PVC é criado, o Kubernetes procura um PV que atenda aos requisitos do PVC (tamanho, modos de acesso e classe de armazenamento).
- Quando um PV adequado é encontrado, os dois são "vinculados" em uma relação um para um.
- Essa vinculação garante que o PVC obtenha exatamente o armazenamento solicitado.
Modos de acesso para PVs/PVCs
Os modos de acesso definem como o armazenamento pode ser montado e usado pelos Pods. Esses modos são solicitados pelos PVCs e compatíveis com os PVs:
- ReadWriteOnce (RWO): o volume pode ser montado para leitura e gravação por um único nó.
- ReadOnlyMany (ROX): o volume pode ser montado somente para leitura por vários nós.
- ReadWriteMany (RWX): o volume pode ser montado para leitura e gravação por vários nós.
A disponibilidade desses modos depende do provedor de armazenamento específico.
Storage Classes para automação
As Storage Classes permitem que os administradores descrevam "classes" de armazenamento (por exemplo, "fast-ssd" e "slow-hdd").
- Em vez de criar PVs manualmente, uma StorageClass pode provisionar um PV dinamicamente quando um PVC o solicita.
- Isso automatiza a criação de PVs com base em modelos predefinidos.
- O provisionamento do armazenamento fica separado do seu consumo, facilitando o uso pelos usuários.
Exemplo de criação de um PVC
Vamos criar um PVC que solicite 1 Gigabyte de armazenamento com acesso ReadWriteOnce. Esse PVC procurará um PV existente ou acionará o provisionamento dinâmico por meio de uma StorageClass.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-app-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: standard # Optional: if you have a 'standard' StorageClass
Salve isso como pvc.yaml e aplique com kubectl apply -f pvc.yaml.
Usando um PVC em um Pod
Depois que um PVC é vinculado, um Pod pode usá-lo fazendo referência ao nome do PVC na configuração do volume. O Pod não precisa conhecer o PV subjacente, apenas o PVC.
apiVersion: v1
kind: Pod
metadata:
name: my-data-pod
spec:
containers:
- name: data-container
image: busybox
command: ["/bin/sh", "-c", "echo 'Hello from CoddyKit!' > /mnt/data/hello.txt && sleep 3600"]
volumeMounts:
- name: persistent-storage
mountPath: /mnt/data
volumes:
- name: persistent-storage
persistentVolumeClaim:
claimName: my-app-pvc
Esse Pod gravará um arquivo no volume persistente montado.
Monitorando PVs e PVCs
Você pode monitorar o status dos seus recursos de armazenamento persistente usando kubectl:
- Para ver todos os PVs:
kubectl get pv - Para ver todos os PVCs no seu namespace:
kubectl get pvc - Para obter informações detalhadas, incluindo status e eventos:
kubectl describe pv <pv-name>kubectl describe pvc <pvc-name>
Certifique-se de que seus PVs estejam Bound e que os PVCs estejam Bound ao PV correto.
Entendendo PV versus PVC
Um usuário quer implantar um banco de dados que precisa de 50 GB de armazenamento persistente. Qual recurso do Kubernetes representa diretamente a solicitação desse armazenamento feita pela aplicação do usuário?
Resumo do armazenamento persistente
Vimos como o Kubernetes gerencia o armazenamento durável das suas aplicações:
- PersistentVolumes (PVs) são recursos do cluster que representam o armazenamento real.
- PersistentVolumeClaims (PVCs) são solicitações de armazenamento feitas pelos usuários.
- O Kubernetes vincula os PVCs aos PVs adequados com base nos requisitos.
- Os modos de acesso definem como o armazenamento pode ser usado (RWO, ROX e RWX).
- As Storage Classes permitem o provisionamento dinâmico de PVs, automatizando a configuração.
Esse sistema garante que os dados da sua aplicação persistam mesmo quando os Pods são criados e encerrados, oferecendo confiabilidade para aplicações com estado.
Perguntas Frequentes
A aula “Volumes persistentes e reivindicações” é grátis?
Sim — o texto completo de “Volumes persistentes e reivindicações” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de DevOps Bootcamp, atualize para CoddyKit PRO. O curso de DevOps Bootcamp inclui 4 aulas no total.
O que vou aprender em “Volumes persistentes e reivindicações”?
Entenda como fornecer armazenamento durável aos pods usando volumes persistentes e reivindicações de volume persistente. Você pratica DevOps Bootcamp com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar DevOps Bootcamp?
Nenhuma experiência prévia é necessária. DevOps Bootcamp no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Volumes persistentes e reivindicações”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de DevOps Bootcamp?
Sim. Cada aula de DevOps Bootcamp inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- ConfigMaps para configuração
- Secrets para dados confidenciais
- Volumes persistentes e reivindicações
- StorageClasses e provisionamento dinâmico