HPA(Horizontal Pod Autoscaler)看起来配置很简单,但「明明 CPU 打满了却不变」的情况,我至少见过三次。

最常见的坑:metrics-server 没装

HPA 默认读的是 metrics.k8s.io 这个 API,它由 metrics-server 提供。很多新手集群只装了核心组件,忘了它:

kubectl get apiservices | grep metrics.k8s.io
# 如果没看到 Available,HPA 永远拿不到数据

资源配置没设 limit,HPA 算不了

HPA 基于「当前使用量 / requests」算百分比。如果你的 Pod 没设 resources.requests.cpu,HPA 直接跳过:

resources:
  requests:
    cpu: 100m # 必须有,HPA 才能算比例
  limits:
    cpu: 500m

用自定义指标才灵活

CPU 不是所有服务的瓶颈。对 IO 密集的服务,用 QPS 或队列长度更合理:

metrics:
  - type: Pods
    pods:
      metric:
        name: http_requests_per_second
      target:
        type: AverageValue
        averageValue: "100"

一句话总结

HPA 不扩容,九成是「指标没上来」而不是「阈值不对」。先 kubectl describe hpaMetrics 那一行是不是 <unknown>,能省下大把瞎调的时间。