Série k8s: Probes — liveness, readiness e startup

Este post faz parte da série de fundamentos de Kubernetes. Aqui vamos entender probes, as verificações de saúde que o Kubernetes usa para decidir se um container deve reiniciar, entrar no balanceamento ou aguardar inicialização.

O que são probes

Probes são checagens de saúde executadas pelo kubelet dentro do container. Elas são configuradas por container e podem usar três mecanismos:

  • httpGet: testa um endpoint HTTP.
  • tcpSocket: testa abertura de porta TCP.
  • exec: executa um comando dentro do container.

Tipos de probes e quando usar

  • livenessProbe: responde à pergunta “esse container ainda está vivo?”.
    Se falhar repetidamente, o kubelet reinicia o container. É ideal para detectar deadlocks, travamentos ou situações em que o processo “parece vivo”, mas não responde mais.

  • readinessProbe: responde “esse container está pronto para receber tráfego?”.
    Se falhar, o Pod é removido do balanceamento (Service endpoints), mas o container não é reiniciado. É útil quando a aplicação precisa de tempo para aquecer, carregar cache ou reconectar dependências.

  • startupProbe: responde “a aplicação já subiu?”.
    É usada quando o container demora a inicializar. Enquanto a startupProbe não passar, o Kubernetes ignora liveness e readiness, evitando reinícios prematuros durante o boot.

Liveness Probe

Verifica se o processo está saudável. Se falhar repetidamente, o Pod é reiniciado.

Exemplo completo (nginx-liveness.yaml):

apiVersion: v1
kind: Pod
metadata:
  name: nginx-liveness
spec:
  containers:
    - name: nginx
      image: nginx:1.25
      ports:
        - containerPort: 80
      livenessProbe:
        tcpSocket:
          port: 80
        initialDelaySeconds: 10
        periodSeconds: 10
        timeoutSeconds: 5
        failureThreshold: 3

Readiness Probe

Controla quando o Pod entra no balanceamento de carga do Service. Se falhar, o Pod fica indisponível para tráfego, mas não reinicia.

Exemplo completo (nginx-readiness.yaml):

apiVersion: v1
kind: Pod
metadata:
  name: nginx-readiness
spec:
  containers:
    - name: nginx
      image: nginx:1.25
      ports:
        - containerPort: 80
      readinessProbe:
        httpGet:
          path: /
          port: 80
        initialDelaySeconds: 10
        periodSeconds: 10
        timeoutSeconds: 5
        successThreshold: 2
        failureThreshold: 3

Startup Probe

Usada para containers que demoram a subir. Enquanto ela não passar, liveness/readiness ficam desativadas.

Exemplo completo (nginx-startup.yaml):

apiVersion: v1
kind: Pod
metadata:
  name: nginx-startup
spec:
  containers:
    - name: nginx
      image: nginx:1.25
      ports:
        - containerPort: 80
      startupProbe:
        httpGet:
          path: /
          port: 80
        initialDelaySeconds: 10
        periodSeconds: 10
        timeoutSeconds: 5
        successThreshold: 1
        failureThreshold: 30

Comandos rápidos

  • Aplicar o manifesto da liveness probe:
kubectl apply -f nginx-liveness.yaml
  • Aplicar o manifesto da readiness probe:
kubectl apply -f nginx-readiness.yaml
  • Aplicar o manifesto da startup probe:
kubectl apply -f nginx-startup.yaml
  • Verificar pods e status das probes:
kubectl get pods
  • Ver detalhes e eventos do pod:
kubectl describe pod <nome-do-pod>

No próximo post da série, seguimos com Services e como expor aplicações no cluster.