Pular para o conteúdo
Tecnologia

Kubernetes escala automaticamente baseado em CPU, memória ou métricas customizadas. Aprenda HPA, VPA e Cluster Autoscaler.

Conceitos Principais

HPA (Horizontal)

Adiciona/remove Pods. Baseado em CPU, memória ou custom metrics. Min/max replicas. Scale up: CPU > 80%. Scale down: CPU < 50%.

VPA (Vertical)

Ajusta CPU/memory requests/limits. Evita OOM kills. Aprende padrões de uso. Reinicia Pods para aplicar novos limits.

Cluster Autoscaler

Adiciona/remove nodes. Quando Pods pending (sem recursos). Integra com cloud (EC2, GCE). Scale down nodes ociosos.

Custom Metrics

Metrics server (CPU/mem). Prometheus adapter (requests/s, queue length). KEDA (event-driven autoscaling).

Passo a Passo

  1. Instale Metrics Server: kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml. Necessário para HPA.
  2. Configure HPA: YAML: kind HorizontalPodAutoscaler, targetCPUUtilizationPercentage 80, minReplicas 2, maxReplicas 10. Ou CLI: kubectl autoscale deployment app --cpu-percent=80 --min=2 --max=10.
  3. Teste HPA: Load test: kubectl run -i --tty load-generator --image=busybox /bin/sh. while true; do wget -q -O- http://app; done. Watch: kubectl get hpa -w.
  4. Configure VPA: Install VPA: git clone https://github.com/kubernetes/autoscaler, ./hack/vpa-up.sh. YAML: kind VerticalPodAutoscaler, updateMode Auto.
  5. Cluster Autoscaler: Cloud-specific. AWS: --cloud-provider=aws, --nodes=2:10:node-group. Adiciona nodes quando Pods pending > 1min.

Boas Praticas

Recomendacoes

• HPA + VPA juntos (HPA scale out, VPA otimiza resources)

• PodDisruptionBudget para evitar downtime

• Metrics customizadas para business logic

• Cooldown periods para evitar flapping

Erros Comuns

Evite estes erros

• Não definir resource requests (HPA não funciona)

• Min replicas = 1 (sem HA)

• Scale down agressivo (thrashing)

• Não testar autoscaling em staging

Checklist

  • Metrics server instalado
  • Resource requests/limits definidos
  • HPA configurado
  • Load test executado
  • VPA instalado (opcional)
  • Cluster Autoscaler configurado
  • PodDisruptionBudget criado