Fases, condições, estados dos containers e políticas de restart. Entender o lifecycle evita metade dos problemas de troubleshooting.
O Pod foi aceito pelo cluster, mas um ou mais containers ainda não estão rodando. Pode estar aguardando scheduling ou download da imagem.
O Pod foi alocado em um node, todos os containers foram criados e pelo menos um está rodando, iniciando ou reiniciando.
Todos os containers terminaram com sucesso (exit code 0) e não serão reiniciados. Típico de Jobs e CronJobs.
Todos os containers terminaram e pelo menos um terminou com falha (exit code != 0 ou foi morto pelo sistema).
O estado do Pod não pôde ser obtido, geralmente por falha de comunicação com o node onde o Pod deveria estar rodando.
Enquanto Fase é o estado geral, Condições são flags booleanas mais granulares. Veja com kubectl describe pod.
Um Pod pode estar Running mas seus containers podem ter estados diferentes. Veja com kubectl describe pod <pod> → seção Containers.
Container aguardando para iniciar. Razão pode ser: ContainerCreating, PullImage, CrashLoopBackOff.
Container executando sem problemas. startedAt indica quando iniciou.
Container finalizou execução. exitCode e reason indicam o motivo (Completed, OOMKilled, Error).
Definida em spec.restartPolicy. Aplica-se a todos os containers do Pod.
Reinicia o container sempre que ele parar, independente do exit code. Padrão para Deployments.
Reinicia apenas se o container terminar com erro (exit code != 0). Usado em Jobs.
Nunca reinicia o container, independente do resultado. Usado em Jobs one-shot.
Rodam antes dos containers principais, em sequência. Cada um deve completar com sucesso antes do próximo iniciar. Se falhar, o Pod é reiniciado.
Rodam junto com o container principal no mesmo Pod, compartilhando rede e volumes. Desde K8s 1.29 existe o tipo nativo initContainer com restartPolicy: Always.
kubectl get pod <name> -o yaml | grep -A5 containerStatuses para ver o estado detalhado de cada container, incluindo lastState com o exit code do crash anterior.