Pods no Kubernetes: o Guia Completo para Entender e Gerenciar suas Unidades Básicas de Execução

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 PendingRunningSucceeded/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.