Capítulo 6.1 - Volumes
Objetivos de Aprendizagem
Ao final deste capítulo, você será capaz de:
- Compreender os diferentes tipos de volumes no Kubernetes
- Utilizar volumes efêmeros (emptyDir, tmpfs)
- Distinguir volumes efêmeros de armazenamento persistente
- Escolher o tipo correto de volume conforme o caso de uso
- Entender o ciclo de vida dos volumes
Introdução
Os volumes no Kubernetes permitem que os containers acessem armazenamento. Diferente do sistema de arquivos do container (efêmero), os volumes persistem mesmo se o container reiniciar.
Volumes Efêmeros
Volumes efêmeros existem apenas durante o ciclo de vida do Pod. Eles são removidos quando o Pod é encerrado.
emptyDir
Um volume emptyDir é criado quando um Pod inicia e removido quando o Pod é encerrado.
apiVersion: v1
kind: Pod
metadata:
name: empty-dir-pod
spec:
containers:
- name: app
image: nginx:1.20
volumeMounts:
- name: cache
mountPath: /cache
- name: sidecar
image: busybox:1.35
volumeMounts:
- name: cache
mountPath: /shared
volumes:
- name: cache
emptyDir:
sizeLimit: 1Gi # Opcional: limite de tamanho
Características:
- Criado automaticamente na inicialização do Pod
- Compartilhado entre todos os containers do Pod
- Armazenado no node (disco local)
- Removido quando o Pod é encerrado
Casos de uso:
- Cache temporário
- Arquivos temporários compartilhados entre containers
- Dados de trabalho intermediários
tmpfs (RAM)
Um volume tmpfs é armazenado na memória (RAM) ao invés do disco.
apiVersion: v1
kind: Pod
metadata:
name: tmpfs-pod
spec:
containers:
- name: app
image: nginx:1.20
volumeMounts:
- name: tmpfs-volume
mountPath: /tmp
volumes:
- name: tmpfs-volume
emptyDir:
medium: Memory
sizeLimit: 512Mi # Limite em RAM
Características:
- Armazenado em RAM (muito rápido)
- Removido ao reiniciar o node
- Limitado pela RAM disponível
- Mais rápido que emptyDir (disco)
Casos de uso:
- Cache em memória de alta performance
- Arquivos temporários sensíveis (removidos ao reiniciar)
- Dados que não devem persistir
Atenção: Use com cautela pois consome RAM.
Comparação: emptyDir vs tmpfs
| Característica | emptyDir | tmpfs |
|---|---|---|
| Armazenamento | Disco local | RAM |
| Performance | Média | Muito alta |
| Persistência | Sobrevive ao reinício do container | Removido ao reiniciar o node |
| Limite | Espaço em disco | RAM disponível |
| Casos de uso | Cache, arquivos temporários | Cache de alta performance, dados sensíveis |
Volumes Especiais
ConfigMap e Secret como Volumes
ConfigMaps e Secrets podem ser montados como volumes.
apiVersion: v1
kind: Pod
metadata:
name: config-volume-pod
spec:
containers:
- name: app
image: nginx:1.20
volumeMounts:
- name: config
mountPath: /etc/config
readOnly: true
- name: secrets
mountPath: /etc/secrets
readOnly: true
volumes:
- name: config
configMap:
name: app-config
- name: secrets
secret:
secretName: app-secrets
defaultMode: 0400
Resultado: Cada chave se torna um arquivo no diretório montado.
Volumes Persistentes (Visão Geral)
Volumes persistentes (PV/PVC) serão abordados em detalhes no capítulo 6.2.
Diferença principal:
Exemplo Completo: Cache Compartilhado
apiVersion: v1
kind: Pod
metadata:
name: cache-example
spec:
containers:
# Container principal
- name: web-server
image: nginx:1.20
volumeMounts:
- name: cache
mountPath: /var/cache/nginx
- name: tmp
mountPath: /tmp
# Container sidecar para o cache
- name: cache-warmup
image: busybox:1.35
command: ["/bin/sh", "-c", "while true; do echo 'Cache data' > /cache/data.txt; sleep 60; done"]
volumeMounts:
- name: cache
mountPath: /cache
volumes:
# Cache compartilhado (disco)
- name: cache
emptyDir:
sizeLimit: 500Mi
# Arquivos temporários (RAM)
- name: tmp
emptyDir:
medium: Memory
sizeLimit: 100Mi
Boas Práticas
1. Escolher o Tipo Correto
- emptyDir: Cache, arquivos temporários, dados compartilhados entre containers
- tmpfs: Cache de alta performance, dados sensíveis temporários
- PV/PVC: Dados importantes que precisam persistir
2. Limites de Tamanho
Sempre defina sizeLimit para evitar:
- Esgotamento do espaço em disco (emptyDir)
- Esgotamento da RAM (tmpfs)
3. Limpeza
Volumes efêmeros são limpos automaticamente, mas:
- Verifique se as aplicações removem seus arquivos temporários
- Monitore o uso de espaço em disco/RAM
Comandos Úteis
Verificar os Volumes de um Pod
kubectl describe pod empty-dir-pod
Ver o Uso dos Volumes
kubectl exec empty-dir-pod -c app -- df -h
Testar um Volume
# Escrever no volume
kubectl exec empty-dir-pod -c app -- sh -c "echo 'test' > /cache/test.txt"
# Ler do volume
kubectl exec empty-dir-pod -c app -- cat /cache/test.txt
Resumo
Neste capítulo, você aprendeu:
Volumes efêmeros: emptyDir (disco) e tmpfs (RAM)
emptyDir: Criado na inicialização, removido ao final, compartilhado entre containers
tmpfs: Armazenado em RAM, muito rápido, removido ao reiniciar o node
Casos de uso: Cache, arquivos temporários, dados compartilhados
Limitações: Tamanho limitado, duração vinculada ao Pod
Boas práticas: Definir sizeLimit, escolher conforme a necessidade
Próximos Passos
Capítulo 6.2: PersistentVolumes e PersistentVolumeClaims
Lab 6.1: Volumes Efêmeros e emptyDir
Capítulo criado em: Dezembro 2024