如何配置 HPA 水平自动伸缩基于 CPU 使用率指标

文章导读
配置基于 CPU 的 HPA 需要先确保集群安装了 metrics-server,并且目标 Pod 必须声明了 CPU 资源请求值,否则控制器无法计算使用率。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 参考来源
A A

配置基于 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 是否就绪

如何配置 HPA 水平自动伸缩基于 CPU 使用率指标
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 列是否显示百分比。

如何配置 HPA 水平自动伸缩基于 CPU 使用率指标
kubectl get hpa

如果显示<unknown>,通常是因为 metrics-server 未工作或 Pod 缺少 requests。

常见坑

1. Pod 未设置 resources.requests.cpu,导致指标无法计算。

如何配置 HPA 水平自动伸缩基于 CPU 使用率指标

2. 集群节点时间不同步,导致 metrics-server 数据采集失败。

3. 伸缩冷却时间(默认 300 秒)内不会再次触发缩放,不要误以为配置失效。

参考来源

Kubernetes 官方文档,Horizontal Pod Autoscaler,https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/