Pods no Kubernetes: o Guia Completo para Entender e Gerenciar suas Unidades Básicas de Execução
Pods no Kubernetes: a unidade básica de execução
No Kubernetes, o Pod representa a menor entidade que pode ser criada, escalada, gerenciada e executada. Ele é o alicerce para entender como as aplicações containerizadas rodam dentro de um cluster. A seguir, explicamos o que realmente é um Pod, o que ele não é, como funcionam os Pods com múltiplos containers (sidecars) e apresentamos conceitos essenciais de ciclo de vida, políticas de reinício, logs e troubleshooting.
O que é e o que não é um Pod
O que é um Pod?
Um Pod é uma camada de abstração que agrupa um ou mais containers que compartilham o mesmo ambiente de execução – rede, armazenamento, namespace de rede e ciclo de vida. Os containers dentro do mesmo Pod são sempre agendados juntos em um único Node e podem se comunicar via localhost.
Principais características
- Unidade mínima no Kubernetes: o scheduler agenda Pods, nunca containers isolados.
- Namespace de rede compartilhado: todos os containers têm o mesmo IP e podem expor portas uns dos outros.
- Um ou mais containers: normalmente há um container principal, mas o Pod pode hospedar sidecars.
- Instância da aplicação: em sistemas distribuídos, um conjunto de Pods forma a aplicação completa.
Exemplo simples – Pod com um único container
apiVersion: v1
kind: Pod
metadata:
name: meu-pod
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
O que não é um Pod?
- Não é a aplicação inteira: várias réplicas de Pods compõem a aplicação.
- Não é um container: ele agrupa um ou mais containers.
- Não é um processo isolado: o cluster Kubernetes controla seu ciclo de vida.
- Não é permanente: Pods são efêmeros; ao serem terminados recebem um novo UID na recriação.
Pods multi‑container (sidecar) e casos de uso
Embora a maioria dos Pods contenha apenas um container, há situações em que múltiplos containers precisam ser executados juntos, compartilhando recursos. Esses são os Pods multi‑container, frequentemente adotando o padrão sidecar.
Padrão Sidecar
Um sidecar é um container auxiliar que complementa o container principal, fornecendo funcionalidades como:
- Sincronização de arquivos ou configurações
- Coleta e envio de logs
- Proxy de rede (ex.: Envoy em malha de serviço)
- Backup ou tarefas programadas
- Processamento em tempo real de eventos
Exemplo – Aplicação + agente de logs
apiVersion: v1
kind: Pod
metadata:
name: pod-sidecar
spec:
containers:
- name: app
image: minha-aplicacao:latest
- name: log-agent
image: fluentd:latest
Ambos compartilham rede e volumes, podendo trocar informações via localhost ou diretórios montados.
Casos comuns de multi‑container
- Aplicação + Proxy (Istio, Linkerd)
- Aplicação + Exportador de métricas (Prometheus sidecar)
- Aplicação + Cache local
- Aplicação + Agente de configuração dinâmica
Ciclo de vida, restartPolicy, logs e troubleshooting básico
Ciclo de vida do Pod
| Estado | Descrição |
|---|---|
| Pending | O Pod foi criado, mas ainda não foi agendado ou iniciado. |
| Running | Todos os containers estão em execução. |
| Succeeded | Todos os containers terminaram com sucesso (geralmente Jobs). |
| Failed | Pelo menos um container terminou com erro. |
| Unknown | O estado não pôde ser determinado. |
Comandos úteis:
kubectl get pods
kubectl describe pod <nome-do-pod>
restartPolicy
Define como o Kubernetes reage a falhas de containers. A política é definida por Pod, não por container.
Always(padrão): o container será reiniciado independentemente do motivo da parada.OnFailure: reinicia apenas se o container terminar com código de erro.Never: não reinicia; usado em Pods tipo Job ou batch.
Exemplo de configuração:
spec:
restartPolicy: OnFailure
Logs
Acompanhar em tempo real
kubectl logs -f <nome-do-pod>
Pod com múltiplos containers
kubectl logs <nome-do-pod> -c <nome-do-container>
Pod com um único container
kubectl logs <nome-do-pod>
Troubleshooting básico
Consultar eventos do cluster
kubectl get events --sort-by='.metadata.creationTimestamp'
Útil para identificar falhas de agendamento, políticas de segurança, quotas, etc.
Checar o node onde o Pod está alocado
kubectl get nodes
kubectl describe node <nome-do-node>
Problemas de recursos ou condições do node podem impedir a execução.
Executar comandos dentro do container
kubectl exec -it <nome-do-pod> -- /bin/sh
Permite inspecionar o filesystem, variáveis de ambiente e processos.
Analisar logs
kubectl logs <nome-do-pod>
Verificar estado e eventos
kubectl get pods
kubectl describe pod <nome-do-pod>
Observe mensagens de erro ou avisos.
Resumo rápido
| Item | Descrição |
|---|---|
| Pod | Unidade mínima do Kubernetes; agrupa um ou mais containers com rede e armazenamento compartilhados. |
| Pod multi‑container | Usado para padrões como sidecar; containers colaboram dentro do mesmo Pod. |
| restartPolicy | Controle de reinício (Always, OnFailure, Never). |
| Ciclo de vida | Pending → Running → Succeeded/Failed/Unknown. |
| Logs | kubectl logs (com -c para escolher o container). |
| Debug | kubectl exec para abrir um shell dentro do container. |
Próximos passos
Dominar o Pod é fundamental para gerenciar e depurar aplicações no Kubernetes. Nas próximas matérias, abordaremos Deployments, ReplicaSets e estratégias de escala, sempre partindo desse entendimento básico.
Experimente
kubectl run nginx-pod --image=nginx --restart=Never
kubectl get pods
kubectl logs nginx-pod
kubectl exec -it nginx-pod -- /bin/bash
Esse exercício ajuda a internalizar o comportamento dos Pods e a prática de troubleshooting.