Health checks e auto-scaling: o cluster que se cura sozinho

Health checks e auto-scaling: o cluster que se cura sozinho

Robson Rabelo - 13 de julho de 2026 - 0 visualizações

Liveness magro, readiness honesto, HPA calibrado e morte com elegância: o conjunto que transforma a promessa do orquestrador em realidade, e o erro que derruba clusters inteiros.

A promessa do orquestrador é sedutora: o sistema que se cura e se dimensiona sozinho. A parte que ninguém conta: ele só se cura se você ensinar o que é "saudável", e só escala se você disser o que é "cheio". Health checks e auto-scaling são esse ensino, e configurá-los errado é pior do que não tê-los.

As três perguntas que o Kubernetes faz ao seu pod

Liveness: "você está vivo?" Falhou repetidamente → o container é reiniciado. Serve para um estado terminal: deadlock, processo travado.

Readiness: "você pode receber tráfego?" Falhou → o pod é retirado do balanceamento (sem restart). Serve para estados temporários: aquecendo cache, dependência instável, sobrecarga momentânea.

Startup: "você ainda está subindo?" Dá tempo extra para aplicações de boot lento antes de o liveness começar a julgar.

containers:
  - name: api
    livenessProbe:
      httpGet: { path: /health/live, port: 3000 }
      periodSeconds: 10
      failureThreshold: 3
    readinessProbe:
      httpGet: { path: /health/ready, port: 3000 }
      periodSeconds: 5

O erro que derruba clusters inteiros

A distinção liveness/readiness não é pedantismo; é onde mora o incidente clássico:

Liveness que verifica dependências causa tempestade de restarts. O banco fica lento 30 segundos → o /health/live (que consulta o banco) falha → o K8s reinicia todos os pods ao mesmo tempo → os pods reiniciando não atendem nada → a fila de conexões explode no banco que já estava sofrendo → o incidente pequeno virou apagão.

A regra de projeto (documentação oficial):

  • /health/live: só o processo. Responde 200 se o event loop está girando. Ponto. Sem tocar banco, fila ou API externa.
  • /health/ready: o processo + o essencial para servir. Banco fora? Fico fora do balanceador, mas vivo, pronto para voltar em segundos quando a dependência sarar, degradação em vez de colapso.

Auto-scaling: as três dimensões

HPA (horizontal, o que você quer): mais réplicas quando a métrica passa do alvo:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
spec:
  scaleTargetRef: { apiVersion: apps/v1, kind: Deployment, name: api }
  minReplicas: 3
  maxReplicas: 20
  metrics:
    - type: Resource
      resource:
        name: cpu
        target: { type: Utilization, averageUtilization: 70 }

Os detalhes que separam o HPA que funciona do que oscila: o alvo se baseia nos requests (sem eles, nada funciona); CPU é o padrão, mas a métrica certa às vezes é outra (profundidade da fila, requisições/s via métricas customizadas); e minReplicas: 3 existe porque escalar de zero a quente demora: o mínimo cobre o vale, o máximo protege a fatura.

Cluster Autoscaler (os nós): réplicas novas precisam de máquina; o autoscaler de cluster adiciona e remove nós conforme os pods pedem. Sem ele, o HPA agenda pods que ficam pendentes para sempre.

VPA (vertical): ajusta requests/limits com base no uso real. Útil como recomendador para calibrar os números que você chutou no dia um.

Probes e auto-scaling: o ciclo do cluster saudável

A peça esquecida: morrer com elegância

Auto-scaling significa que pods morrem o tempo todo (scale-down, deploy, nó reciclado). Cada morte malfeita é um lote de erros 502 para usuários. O contrato de encerramento:

  1. O K8s manda SIGTERM e retira o pod do balanceador.
  2. Sua aplicação para de aceitar conexões novas e termina as em andamento (graceful shutdown, com server.close() e afins).
  3. Passou o terminationGracePeriodSeconds (30s por padrão)? SIGKILL sem dó.

Aplicação que ignora SIGTERM transforma cada evento de rotina em micro-incidente. É um teste que vale automatizar: mate um pod no ambiente de teste e afirme zero erros no cliente.

O checklist do cluster que se cuida

  • Liveness magro (processo), readiness honesto (dependências essenciais).
  • Requests/limits calibrados (VPA recomendando).
  • HPA com mínimo que aguenta o vale e máximo que protege o orçamento.
  • Graceful shutdown testado de verdade.
  • E alertas por sintoma para saber quando o "sozinho" precisou de ajuda.

Configurar esse conjunto (e testá-lo com caos controlado) fecha as implantações de containers do nosso serviço de DevOps e Deploy.

Seu liveness consulta o banco? Vá conferir, é sério. Depois conte para a IA da Rabelo Digital, aqui no canto da tela, e ela desenha os endpoints certos. Sem formulário, sem espera.


Leia também

Compartilhar:

Deixe um Comentário

Categorias

Posts Recentes