Atlas Entry
Atlas: HPA Not Scaling
HorizontalPodAutoscaler stays flat; desired replicas do not change despite load or expectations.
Text
Symptom → evidence → resolution.
Symptom
HorizontalPodAutoscaler stays flat; desired replicas do not change despite load or expectations.
WorkloadsReliabilityOperationsObservability
What this usually means
HPA is missing metrics, cannot compute utilization, or is constrained by min/max replicas and stabilization behavior. It is a control loop, not a promise.
What to inspect first
Start with HPA status conditions and current metrics.
- Look for condition messages about missing metrics.
- Verify the target workload has resource requests set.
kubectl
shell
kubectl get hpa -n <ns>
kubectl describe hpa <hpa> -n <ns>
# Metrics sanity:
kubectl top pods -n <ns> || trueLikely causes
Autoscaling failures are mostly signal failures.
- Metrics server not installed or not working; custom metrics adapters missing.
- CPU/memory requests absent; utilization targets can’t be computed meaningfully.
- Target is wrong (label selector points to the wrong object; multiple HPAs fight).
- Stabilization windows and scaling policies prevent rapid change.
- Workload is bottlenecked elsewhere (I/O, locks) so scaling replicas does not change throughput.
Resolution guidance
Make scaling observable and bounded.
- Ensure metrics pipeline is healthy and monitored.
- Set requests deliberately; treat them as economic inputs to scheduling.
- Validate min/max and scale policies match the service’s risk posture.
- If scaling doesn’t improve SLOs, fix the real bottleneck and stop chasing replica counts.
Related
Canonical link
Canonical URL: /atlas/hpa-not-scaling