Sobes.tech
Middle

O que acontece se a prova de vivacidade não passar no Kubernetes?

sobes.tech IA

Resposta da IA

Se o pod não passar no teste de liveness, o Kubernetes executará a ação especificada no manifesto do pod. Por padrão, isso reinicia o contêiner.

Ações possíveis em caso de falha no teste de liveness:

  • Reiniciar: Reinicia o contêiner dentro do pod. Esta ação é a padrão.
  • Nenhuma: O Kubernetes não tomará nenhuma ação em caso de falha no teste de liveness. O contêiner permanecerá no seu estado atual (Running ou Crashing).
  • Executar comando: Executa um comando específico dentro do contêiner. Se o comando terminar com um código de retorno diferente de zero, o teste de liveness é considerado falho.

Cenário com a ação padrão (Reiniciar):

  1. kubelet no nó verifica regularmente o contêiner usando o teste de liveness.
  2. A condição do teste de liveness não é atendida (por exemplo, o servidor HTTP não responde, o comando termina com erro).
  3. kubelet registra a falha do teste.
  4. Após alguns tentativas malsucedidas (configuradas pelos parâmetros failureThreshold, initialDelaySeconds, periodSeconds, timeoutSeconds), kubelet determina que o contêiner está com defeito.
  5. kubelet envia o sinal SIGKILL ao contêiner defeituoso.
  6. O contêiner termina.
  7. kubelet reinicia o contêiner no mesmo pod.
  8. O processo de teste de liveness é retomado.

É importante distinguir entre o teste de liveness e o teste de readiness. O teste de readiness determina se o contêiner está pronto para receber tráfego. Uma falha no teste de readiness faz com que o Service não direcione tráfego para essa instância do pod, mas o contêiner não é reiniciado. Uma falha no teste de liveness indica uma falha e a necessidade de reinício.

# Exemplo de teste de liveness em spec.containers
containers:
  - name: my-container
    image: my-image:latest
    livenessProbe:
      httpGet:
        path: /healthz
        port: 8080
      initialDelaySeconds: 15 # Atraso antes da primeira verificação
      periodSeconds: 20      # Intervalo entre verificações
      timeoutSeconds: 5       # Tempo de espera pela resposta
      failureThreshold: 3     # Número de tentativas malsucedidas antes do reinício