Kubernetes HPA 配了 CPU 阈值却不扩容,六个常见原因
HPA 显示 Targets 一直是 low,副本数不动,多数不是 HPA 本身的问题,按这六条排查基本能定位。
第一,metrics 根本没取到。kubectl top pod 如果报 error,说明 metrics-server 没装好或者证书有问题,HPA 拿不到指标只会显示 unknown,不会扩容。先确认 metrics-server 的 Pod 是 Running,再用 kubectl get --raw /apis/metrics.k8s.io/v1beta1/nodes 试一下。
第二,CPU request 没设。HPA 算的是使用率百分比,分母是 request。request 缺失时这个百分比算不出来,HPA 直接失效。这类问题最隐蔽,因为 Pod 跑得好好的,只是永远不扩容。
第三,指标采集有延迟。默认 metrics 每 15 秒采一次,HPA 还有默认 300 秒的缩容稳定窗口。刚压上去没反应属正常,等两三分钟再看。
第四,副本数撞上 maxReplicas。很多人把 maxReplicas 设成 3 做测试,压测起来一直是 3,看起来像没扩容,其实早到顶了。
第五,Pod 还没 Ready。HPA 只统计 Ready 的 Pod,新 Pod 卡在 ImagePullBackOff 或者探针一直失败,就永远补不上。
第六,集群资源不够。HPA 扩容只是改 ReplicaSet 的期望副本数,调度器没节点可放就只能 Pending。用 kubectl describe pod 看 Events,出现 FailedScheduling 就是节点容量问题,这时该上 cluster-autoscaler,不是继续调 HPA。
补一句:如果要按 QPS 或者队列长度扩容,CPU 指标根本不够用,得上 Prometheus Adapter 把自定义指标喂给 HPA,或者干脆换 KEDA。
- 点赞
- 收藏
- 关注作者
评论(0)