kubectl top node/pod 显示数据为空或 metrics-server 报错

11次阅读

metrics-server未正常工作导致Metrics API不可用,需检查Pod状态、日志、APIService注册状态,并排查TLS配置、RBAC权限、kubelet配置及网络连通性等问题。

kubectl top node/pod 显示数据为空或 metrics-server 报错

这是因为 metrics-server 没有正确部署、运行异常,或未被 kubernetes 正确识别为 Metrics API 的提供者。

检查 metrics-server 是否正常运行

执行以下命令确认 Pod 状态和日志:

  • kubectl get pods -n kube-system | grep metrics-server —— 查看 Pod 是否处于 Running 状态,且 READY1/1
  • kubectl logs -n kube-system deployment/metrics-server —— 查看是否有 TLS、证书、连接 apiserver 失败等报错(常见如 x509: certificate signed by unknown authority
  • kubectl get apiservice | grep metrics —— 应看到 v1beta1.metrics.k8s.io 的状态为 True;若为 False,说明该 API 未就绪,需进一步查原因

常见部署问题与修复方法

metrics-server 启动失败多由 TLS 配置或权限引起:

  • 使用官方 YAML 部署时,务必关闭 –kubelet-insecure-tls(仅测试环境),生产环境应配置正确的 kubelet 客户端证书;否则会因证书校验失败无法拉取指标
  • 确认 metrics-server 的 ServiceAccount 具备访问 kubelet 的权限(需 ClusterRoleBinding 绑定到 system:auth-delegatorsystem:metrics-reader
  • 若集群启用了 nodeRestriction 准入控制器,需确保 metrics-server 使用的证书中 CommonNameSubjectAlternativeNames 包含其可访问的节点 IP 或域名

验证 Metrics API 是否可用

绕过 kubectl top,直接测试 Metrics API 接口

  • kubectl get –raw “/apis/metrics.k8s.io/v1beta1/nodes” —— 应返回 jsON 格式节点指标数据
  • kubectl get –raw “/apis/metrics.k8s.io/v1beta1/pods” —— 同理,查看 Pod 级别指标
  • 若返回 Error: the server doesn't have a Resource type "nodes" 或 404/503,说明 metrics-server 未成功注册 Metrics API

其他可能原因

排除非 metrics-server 自身的问题:

  • kubelet 是否启用了 --enable-debugging-handlers=true--authentication-Token-webhook=true(部分发行版默认关闭)
  • 节点资源监控是否被禁用:检查 kubelet 启动参数中是否含 --cadvisor-port=0(v1.24+ 已弃用 cAdvisor,但旧版本依赖它)
  • 集群网络插件是否拦截了 metrics-server 到 kubelet 的 10250 端口通信(尤其在使用 NetworkPolicy 或服务网格时)
text=ZqhQzanResources