Capítulo 3.4 - Ciclo de Vida dos Pods
Objetivos de Aprendizagem
Ao final deste capítulo, você será capaz de:
- Compreender as fases de um Pod
- Identificar os estados de um Pod
- Entender as condições
- Gerenciar reinicializações
Fases de um Pod
Um Pod passa por várias fases durante seu ciclo de vida:
Estados Detalhados
1. Pending
O Pod foi aceito pelo Kubernetes, mas os contêineres ainda não foram criados.
Possíveis razões:
- Imagem sendo baixada
- Nenhum node disponível
- Recursos insuficientes
2. Running
O Pod está vinculado a um node e todos os contêineres foram criados. Pelo menos um contêiner está em execução.
3. Succeeded
Todos os contêineres do Pod foram finalizados com sucesso e não serão reiniciados.
4. Failed
Pelo menos um contêiner foi finalizado com falha.
5. Unknown
O estado do Pod não pode ser obtido (problema de comunicação com o node).
Condições de um Pod
As condições fornecem mais detalhes sobre o estado:
conditions:
- type: PodScheduled
status: "True"
reason: ""
- type: Initialized
status: "True"
- type: ContainersReady
status: "True"
- type: Ready
status: "True"
Tipos de condições:
- PodScheduled: O Pod foi atribuído a um node
- Initialized: Todos os init containers foram finalizados
- ContainersReady: Todos os contêineres estão prontos
- Ready: O Pod pode receber tráfego
Restart Policy
Determina quando reiniciar os contêineres:
spec:
restartPolicy: Always # Sempre reiniciar
# restartPolicy: OnFailure # Reiniciar somente em caso de falha
# restartPolicy: Never # Nunca reiniciar
Init Containers
Os init containers são executados antes dos contêineres principais:
spec:
initContainers:
- name: init-db
image: busybox
command: ['sh', '-c', 'until nslookup mydb; do sleep 2; done']
containers:
- name: app
image: my-app:1.0
Casos de uso:
- Esperar uma dependência estar pronta
- Inicializar o banco de dados
- Baixar arquivos de configuração
Comandos Úteis
# Ver o estado de um Pod
kubectl get pod my-pod
# Detalhes completos com condições
kubectl describe pod my-pod
# Ver os eventos
kubectl get events --field-selector involvedObject.name=my-pod
# Logs de um contêiner que falhou
kubectl logs my-pod --previous
Resumo
Neste capítulo, você aprendeu:
Fases: Pending → Running → Succeeded/Failed
Condições: PodScheduled, Initialized, ContainersReady, Ready
Restart Policy: Always, OnFailure, Never
Init Containers: Executados antes dos contêineres principais
Diagnóstico: kubectl describe, get events, logs --previous
Próximos Passos
Agora que você entende o ciclo de vida:
Capítulo 3.5: ReplicaSets - Gerenciamento de Replicação
Lab 3.1: Criação e Gerenciamento de Pods
Capítulo criado em: Dezembro 2024