Pular para o conteúdo
Abrir o Kubepier

Probe · Reason: Unhealthy · Killing

Liveness probe failed

A liveness falhou três vezes seguidas e o kubelet reiniciou o container. Se a probe estiver errada, ele reinicia um container saudável para sempre.

publicado em 25 set 2026 6 min de leitura reproduzido num cluster k3s 1.35 de teste em 25 set 2026 verificado contra a documentação do Kubernetes: "Configure Liveness, Readiness and Startup Probes" e a referência da API Probe

Sinal

Eventos Unhealthy "Liveness probe failed" seguidos de Killing; RESTARTS subindo.

Causa mais comum

Probe apontando para caminho ou porta que a aplicação não responde, ou aplicação lenta para subir.

Correção rápida

Testar o endpoint da probe de dentro do pod; startupProbe para quem demora a subir.

Comando que confirma

kubectl describe pod NOME | grep -E "Liveness|Unhealthy|Killing"

O que significa

A liveness probe é a pergunta que o kubelet faz periodicamente ao container: você ainda está funcionando? Quando a resposta falha failureThreshold vezes seguidas, o kubelet mata o container e o reinicia conforme a restartPolicy. Os padrões da API são: periodSeconds 10, timeoutSeconds 1, failureThreshold 3 e initialDelaySeconds 0 (referência da API do Kubernetes, objeto Probe).

Com os padrões, um container que para de responder é reiniciado em cerca de 30 s. Com uma probe errada, um container saudável também.

Achado ao reproduzir: o kubelet encerra o container com SIGTERM, e o exit code registrado depende de como o processo reage. O nginx do teste tratou o sinal e saiu limpo, com Exit Code: 0 e motivo Completed. Um processo que morre pelo próprio SIGTERM registra 143. Não use o exit code para decidir se foi a probe: use os eventos.

Causas comuns

Caminho ou porta erradosstatuscode: 404 · connection refused

A probe consulta um endpoint que a aplicação não tem, ou a porta mudou numa versão nova. O container está saudável e mesmo assim morre a cada 30 s.

Aplicação lenta para subirmata durante a inicialização

A liveness começa a contar antes de a aplicação terminar de carregar. O container é reiniciado antes de ficar pronto, e nunca fica.

Timeout curto sob cargacontext deadline exceeded

O timeoutSeconds padrão é 1 s. Sob carga, o endpoint de saúde demora mais, a probe falha e o reinício piora a carga dos outros pods.

Probe que checa dependência externatodos os pods reiniciam juntos

Liveness que consulta banco ou API externa reinicia o serviço inteiro quando a dependência cai, sem resolver nada.

Diagnóstico em 3 comandos

Saídas reais de um nginx de teste com a liveness apontando para /healthz, caminho que o nginx padrão não serve.

1 · reinícios subindo, container "Running"

saída real
kubectl -n loja get pod busca
NAME    READY   STATUS    RESTARTS      AGE
busca   1/1     Running   4 (38s ago)   109s

2 · a probe, o último término e os eventos

saída real, resumida
kubectl -n loja describe pod busca
    Last State:     Terminated
      Reason:       Completed
      Exit Code:    0
    Restart Count:  5
    Liveness:       http-get http://:80/healthz delay=5s timeout=1s period=5s #success=1 #failure=3
Events:
  Warning  BackOff    47s (x2 over 47s)   kubelet  Back-off restarting failed container busca in pod busca_loja(...)
  Normal   Killing    7s (x5 over 92s)    kubelet  Container busca failed liveness probe, will be restarted
  Warning  Unhealthy  2s (x16 over 102s)  kubelet  Liveness probe failed: HTTP probe failed with statuscode: 404

O statuscode: 404 fecha o diagnóstico: a aplicação responde, só não naquele caminho. connection refused apontaria porta errada ou processo que ainda não abriu a porta; context deadline exceeded, lentidão.

3 · teste o endpoint de dentro do pod

terminal
kubectl -n loja exec busca -- wget -qO- -S http://127.0.0.1:80/healthz

A correção

  1. Aponte a probe para um endpoint que existe e que responde rápido, sem consultar banco nem API externa.
  2. Para aplicação que demora a subir, use startupProbe: enquanto ela não passa, a liveness não roda. É a forma indicada pela documentação para proteger containers lentos na subida.
  3. Dê margem de timeout ao endpoint sob carga, em vez de afrouxar o failureThreshold ao ponto de a probe não servir.
deployment.yaml
containers:
  - name: busca
    startupProbe:
      httpGet: { path: /saude, port: 80 }
      periodSeconds: 5
      failureThreshold: 24
    livenessProbe:
      httpGet: { path: /saude, port: 80 }
      periodSeconds: 10
      timeoutSeconds: 3
      failureThreshold: 3

No exemplo, a startup dá até 120 s para a subida (24 × 5 s); depois disso, a liveness assume com a cadência normal.

Como aparece no Kubepier

O Kubepier mostra os eventos do pod com os avisos primeiro, com filtro por tipo, namespace e motivo. O diagnóstico por IA explica o erro a partir dos eventos e do log, em português, com a sua chave de API (Anthropic ou OpenAI). Abaixo, uma ilustração com dados fictícios.

Kubepier um produto
Liveness probe failed · 16×
Diagnóstico por IA · sua chave Anthropic ou OpenAI

Causa provável: a liveness consulta /healthz, que a aplicação não serve. Evidência: "HTTP probe failed with statuscode: 404" repetido e 5 reinícios; o container sobe normalmente entre um e outro. Correção sugerida: apontar a probe para um caminho que exista, ou criar o endpoint de saúde na aplicação.

Conhecer o KubepierFree · Pro R$ 49/mês · Team R$ 199/mês