Skip to content

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> || true

Likely 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.

Canonical link

Canonical URL: /atlas/hpa-not-scaling