Prompt
Why is Kubernetes autoscaling not triggering?
Latest observation
Kubernetes autoscaling can fail to trigger for a few common reasons, and the exact cause depends on which autoscaler you mean:
- HPA: Horizontal Pod Autoscaler
- VPA: Vertical Pod Autoscaler
- Cluster Autoscaler: adds/removes nodes
Here’s a practical checklist.
1) Metrics aren’t available
Autoscaling depends on metrics.
HPA common issues
- metrics-server not installed or broken
- Resource requests are missing, so HPA has nothing to compare against
- CPU/memory metrics aren’t being reported
Check:
kubectl top pods
kubectl top nodes
kubectl get apiservices | grep metrics
kubectl describe hpa <name>
If kubectl top fails, HPA usually won’t work properly.
2) Your deployment has no resource requests
HPA typically scales based on usage vs requested CPU/memory.
Example problem:
- Pod uses 200m CPU
- But CPU request is not set
- HPA can’t calculate target utilization correctly
Check:
kubectl get deploy <name> -o yaml | grep -A5 resources
Add requests/limits like:
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 500m
memory: 512Mi
3) HPA target is too high or workload isn’t exceeding it
Maybe autoscaling is working, but load never crosses the threshold.
Check current HPA status:
kubectl describe hpa <name>
Look for:
- current CPU/memory utilization
- target value
- desired replicas
4) Scale-up is being delayed by stabilization or limits
Kubernetes adds protections to prevent flapping.
Reasons:
stabilizationWindowSecondsbehaviorpolicies limiting rapid scale-up- max replicas reached
Check:
kubectl get hpa <name> -o yaml
5) The app isn’t actually under load
Sometimes requests aren’t hitting the pods you expect.
Possible causes:
- load balancer not sending traffic
- caching hides load
- traffic is going to another service
- app is bottlenecked elsewhere
Generate load and observe:
kubectl top pods
6) HPA object is misconfigured
Common mistakes:
- wrong target name
- wrong metric type
- selecting the wrong label set
- scaling a workload that isn’t the owner of the pods
Check:
kubectl describe hpa <name>
kubectl get hpa <name> -o yaml
7) Cluster Autoscaler is blocked
If the issue is node scaling:
- pods are not pending
- node group min/max size reached
- pod requests fit on existing nodes
- cloud provider permissions are wrong
- taints/tolerations or node selectors prevent scheduling
Check pending pods:
kubectl get pods -A | grep Pending
kubectl describe pod <pod>
8) VPA is not designed to “trigger” like HPA
If you’re using VPA:
- it changes pod resource recommendations
- it may restart pods to apply new requests
- it doesn’t scale replica count
So if you expect more pods, VPA won’t do that.
Fast debugging path
Run these:
kubectl get hpa
kubectl describe hpa <name>
kubectl top pods
kubectl top nodes
kubectl get deploy <name> -o yaml
Look for:
- missing metrics
- no resource requests
- target not being exceeded
- max replicas reached
- events/errors in
describe
If you want, paste the output of:
kubectl describe hpa <name>
kubectl get deploy <name> -o yaml
kubectl top pods
and I can help pinpoint the exact reason.
Brands