Health checks e auto-scaling: o cluster que se cura sozinho
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.

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:
- O K8s manda SIGTERM e retira o pod do balanceador.
- Sua aplicação para de aceitar conexões novas e termina as em andamento (graceful shutdown, com
server.close()e afins). - 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.


Deixe um Comentário