配置基于 CPU 的 HPA 需要先确保集群安装了 metrics-server,并且目标 Pod 必须声明了 CPU 资源请求值,否则控制器无法计算使用率。
先说结论:HPA 依赖 metrics-server 获取指标,且 Pod 必须设置 resources.requests.cpu,否则无法生效。
- 适合:无状态且负载波动明显的 Deployment
- 先准备:确认 metrics-server 运行正常且能抓取数据
- 验收:观察 HPA 状态列是否出现数值而非 unknown
命令速用版
kubectl autoscale deployment <deployment-name> `--cpu-percent`=50 `--min`=1 `--max`=10
为什么会这样
HPA 控制器通过 metrics-api 查询 Pod 的实时 CPU 使用率。计算逻辑是“当前使用率 / 请求值”,如果 Pod 没有定义 CPU request,分母为零,控制器无法计算百分比,只能显示 unknown。
分步处理
1. 检查 metrics-server 是否就绪
kubectl get pods -n kube-system | grep metrics-server
2. 确认目标 Pod 已设置 CPU 请求
kubectl get deployment <name> -o yaml | grep -A 5 resources
3. 创建 HPA 对象(推荐使用 v2 API 以支持更灵活策略)
kubectl apply -f hpa.yaml
怎么验证是否生效
使用 get 命令查看 CURRENT 列是否有数值,TARGET 列是否显示百分比。
kubectl get hpa
如果显示<unknown>,通常是因为 metrics-server 未工作或 Pod 缺少 requests。
常见坑
1. Pod 未设置 resources.requests.cpu,导致指标无法计算。
2. 集群节点时间不同步,导致 metrics-server 数据采集失败。
3. 伸缩冷却时间(默认 300 秒)内不会再次触发缩放,不要误以为配置失效。
参考来源
Kubernetes 官方文档,Horizontal Pod Autoscaler,https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/