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
- Instale Metrics Server:
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml. Necessário para HPA. - Configure HPA: YAML: kind HorizontalPodAutoscaler, targetCPUUtilizationPercentage 80, minReplicas 2, maxReplicas 10. Ou CLI:
kubectl autoscale deployment app --cpu-percent=80 --min=2 --max=10. - 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. - Configure VPA: Install VPA:
git clone https://github.com/kubernetes/autoscaler,./hack/vpa-up.sh. YAML: kind VerticalPodAutoscaler, updateMode Auto. - 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