Pular para o conteúdo principal

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ísticaemptyDirtmpfs
ArmazenamentoDisco localRAM
PerformanceMédiaMuito alta
PersistênciaSobrevive ao reinício do containerRemovido ao reiniciar o node
LimiteEspaço em discoRAM disponível
Casos de usoCache, arquivos temporáriosCache 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