HPA 不扩容排查:指标、请求值与伸缩行为

检查 Metrics API、资源 requests、目标计算和 stabilization window,定位 HPA 不动作或反复抖动。

文章目录 · 4 节

HPA 不扩容不一定是控制器故障。CPU 利用率目标以 requests.cpu 为分母,指标缺失、请求值为空或伸缩窗口限制都会让期望副本与直觉不同。

先读 HPA 决策

kubectl describe hpa api -n production
kubectl get hpa api -n production -w
kubectl top pod -n production -l app=api
kubectl get --raw /apis/metrics.k8s.io/v1beta1/namespaces/production/pods

关注 current/target、Conditions 和 Events。FailedGetResourceMetric 指向指标或 request 配置,ScalingLimited 则说明 min/max 或速率策略限制了结果。

核对工作负载

kubectl get deploy api -n production -o jsonpath='{.spec.template.spec.containers[*].resources}'
kubectl get apiservice v1beta1.metrics.k8s.io
kubectl logs -n kube-system deploy/metrics-server --since=15m

多容器 Pod 中任一相关容器缺少 request,都可能使资源指标无法计算。自定义指标还要继续检查 adapter 查询和标签映射。

避免抖动

  • 根据启动时间配置合理的 scaleUp 策略
  • 为 scaleDown 设置稳定窗口,避免瞬时低谷缩容
  • 不把 HPA 与固定副本的自动化同时作为控制源
  • 容量规划要考虑扩容延迟和集群剩余资源

收尾清单

用可控压测验证触发、扩容、流量接入和回落全过程。记录指标延迟、期望副本和实际就绪副本,而不只看 Deployment replicas。