首页/云/Kubernetes 速查/HPA 依赖 metrics-server
调度与资源52 条

HPA 依赖 metrics-server

资源指标型 HPA 从 metrics-server 取数:它未安装或异常时,kubectl top 与 HPA 会同时失效;先查 APIService 与组件状态。

Kubernetes 速查云更新于 2026-10-13

为什么依赖 metrics-server

按 CPU/内存使用率扩缩的 HPA 并不自己采集数据:它通过聚合 API 路径 metrics.k8s.io 向 metrics-server 取数,metrics-server 再从各节点 kubelet 的 10250 端口汇总指标。所以指标管道任一段中断,HPA 的 TARGETS 列就会显示 unknown,同时 kubectl top 也会一起失效——这两个现象同时出现,几乎可以断定问题在指标管道而不是 HPA 本身。

基本信息

数据链路HPA -> metrics.k8s.io -> metrics-server -> kubelet:10250
聚合入口APIService v1beta1.metrics.k8s.io
部署位置通常位于 kube-system,以 Deployment 形式运行
连带影响kubectl top、HPA 资源指标同时失效
替代方案自定义指标需 Prometheus Adapter 等额外组件

典型使用场景

  • HPA 报 unknown:先确认指标管道,避免在策略配置上反复试错
  • kubectl top 报错:值班告警里常与容量看板一起出现,需要同一套检查路径
  • 集群升级后指标失效:kubelet 证书或聚合层参数变化导致采集握手失败
  • 自签证书环境:kubelet 证书不被信任时 metrics-server 持续采不到数据
  • 容量审计:核对指标数据是否真实,避免基于失真数据做扩缩决策

按链路顺序检查

按链路顺序检查
kubectl get apiservice v1beta1.metrics.k8s.io          # 是否为 True,Available 列最直观
kubectl -n kube-system get deploy,pods | grep metrics-server   # 组件是否就绪
kubectl -n kube-system logs deploy/metrics-server --tail=50    # 采集失败原因通常在这里
kubectl top node                                        # 端到端验证,报错即管道不通
kubectl get --raw /apis/metrics.k8s.io/v1beta1/nodes | head -c 200   # 直接读聚合接口

常见报错对照

现象可能的层下一步
APIService 显示 False 或 MissingEndpoints聚合层未就绪看 metrics-server 的 Pod 与 Endpoints 是否为空
日志出现 x509 或证书校验错误与 kubelet 的 TLS 握手失败按官方建议配置 kubelet 证书信任参数
日志出现 dial tcp ... connection refused到 kubelet 10250 网络不通检查节点网络、防火墙与 kubelet 监听地址
HPA 有值但 top 报错权限或聚合层权限问题检查组件 ServiceAccount 的 RBAC 绑定
HPA 计算使用率的分母是容器的 requests:容器没有写 CPU requests 时,资源型 HPA 无法计算百分比,TARGETS 同样显示 unknown,此时问题在清单而不在指标管道,先确认 Pod 的 requests 是否齐全。
metrics-server 提供的是短周期的资源使用快照,不保存历史数据。需要趋势分析、扩缩依据留痕或基于历史做容量规划时,应另建长期指标系统,把它当成实时查询入口而不是监控库。

易错点

  • 看到 HPA 不动就去改阈值:指标管道不通时改任何参数都不会生效,先修采集链路
  • 只重启 metrics-server 不看日志:证书、网络、RBAC 类根因会随重启重复出现,日志里早有原文
  • 忽略容器未声明 requests:分母缺失时使用率无法计算,HPA 只能显示 unknown
  • 把 kubectl top 的数字当容量规划依据:它是瞬时快照,缺少历史与峰值信息

数据来源与参考

  • Kubernetes 官方文档 · 资源指标管道(metrics-server)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌