Kubernetes Pods – Guia Completo para Compreender e Utilizar com kubectl

O que é um Pod no Kubernetes?
No Kubernetes, o Pod é a menor unidade que você pode implantar e gerenciar, podendo conter um ou mais containers. Todos os containers em um mesmo Pod compartilham:
- Rede: têm o mesmo endereço IP e portas localhost.
- Armazenamento: volumes montados no sistema de arquivos.
- Contexto: como variáveis de ambiente compartilhadas.
Dessa forma, o Pod funciona como um “host” leve para containers que precisam rodar juntos e compartilhar recursos.
Como executar um Pod básico usando kubectl
Você pode criar um Pod de duas maneiras: usando um arquivo YAML ou de forma imperativa via linha de comando.
1. Criar um Pod simples com um container (via arquivo YAML)
Aqui está um exemplo de Pod chamado nginx-pod
que executa a imagem oficial do NGINX:
# nginx-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
Para aplicar este Pod ao cluster, use:
kubectl apply -f nginx-pod.yaml
Depois, você pode verificar o status do Pod com:
kubectl get pods nginx-pod
kubectl describe pod nginx-pod
Para acessar os logs do container (útil para depuração):
kubectl logs nginx-pod
2. Criar um Pod com dois containers
Um Pod pode conter múltiplos containers que compartilham recursos, o que é útil quando eles precisam trabalhar juntos, por exemplo:
- Um container principal que processa requisições, como o NGINX.
- Um sidecar para funções auxiliares, como coleta de logs, sincronização de arquivos ou proxy.
Exemplo de Pod com dois containers compartilhando volume:
# pod-duplo-container.yaml
apiVersion: v1
kind: Pod
metadata:
name: multi-container-pod
spec:
containers:
- name: web-server
image: nginx:latest
ports:
- containerPort: 80
- name: log-agent
image: busybox
command: [ "sh", "-c", "tail -f /var/log/nginx/access.log" ]
volumeMounts:
- name: shared-logs
mountPath: /var/log/nginx
volumes:
- name: shared-logs
emptyDir: {}
Nesse exemplo:
- O container
web-server
roda o NGINX. - O container
log-agent
monitora os logs do servidor, pois ambos compartilham o volumeshared-logs
. - O tipo de volume
emptyDir
cria um diretório temporário persistente enquanto o Pod estiver ativo, compartilhado entre os containers.
Para criar o Pod e verificar os logs do sidecar:
kubectl apply -f pod-duplo-container.yaml
kubectl get pods multi-container-pod
kubectl logs multi-container-pod -c log-agent
3. Compartilhando dados com volumes em um Pod
Volumes possibilitam que containers dentro de um mesmo Pod compartilhem dados ou guardem estado. Diferente do armazenamento interno do container, o volume permanece enquanto o Pod existir ou pode ser configurado para persistência externa.
Exemplo com volume emptyDir
O volume emptyDir
é um espaço temporário no nó, disponível a todos containers do Pod.
# pod-com-volume.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-com-volume
spec:
containers:
- name: writer
image: busybox
command: [ "sh", "-c", "echo 'Hello Kubernetes' > /data/message.txt && sleep 3600" ]
volumeMounts:
- name: shared-data
mountPath: /data
- name: reader
image: busybox
command: [ "sh", "-c", "sleep 5; cat /data/message.txt; sleep 3600" ]
volumeMounts:
- name: shared-data
mountPath: /data
volumes:
- name: shared-data
emptyDir: {}
O que ocorre:
- O container
writer
escreve “Hello Kubernetes” no arquivo/data/message.txt
. - O container
reader
, após um curto atraso, lê esse arquivo do mesmo volume compartilhado. - O volume
emptyDir
persiste durante o ciclo de vida do Pod e é descartado quando o Pod é removido.
Para criar e ver o resultado:
kubectl apply -f pod-com-volume.yaml
kubectl logs pod-com-volume -c reader
Você verá nos logs do container reader
a mensagem “Hello Kubernetes”.
Resumo prático: quando usar cada tipo de Pod
Situação | Exemplo | Quando usar |
---|---|---|
Aplicação simples com um container | Pod com 1 container (nginx) | Testes, aplicações básicas |
Containers auxiliares sidecar | Pod com múltiplos containers | Para funções complementares, como logs e proxies |
Compartilhamento de dados interno | Volume emptyDir compartilhado |
Comunicação entre containers e cache temporário |
Considerações finais
- Pods são unidades efêmeras; para gerenciar réplicas e atualizações, utilize Deployments.
- Manter múltiplos containers em um Pod é ideal para componentes intimamente relacionados.
- Volumes são imprescindíveis para compartilhar dados entre containers e manter persistência básica durante a vida do Pod.
- Volumes Persistentes: além do
emptyDir
, existem outros tipos de volumes como PersistentVolumes que permitem armazenamento duradouro independente do ciclo de vida do Pod. - Isolamento e Namespace: entender namespaces ajuda no isolamento e organização dos Pods dentro do cluster.
- Políticas de Reinício e Recursos: é importante configurar políticas de reinício e recursos (CPU, memória) para Pods em produção para garantir estabilidade.
- Monitoramento e Logs: implementar soluções de monitoramento para acompanhar o estado dos Pods e logs ajuda na manutenção e diagnóstico de problemas.
Compreender pods técnica e praticamente é um passo fundamental para dominar como aplicações são executadas em Kubernetes!