调试 metrics-server

虚拟私有云 传统基础设施

以下症状可能指示需要调整 metrics-server 资源:

  • metrics-server 正在频繁重新启动。

  • 删除名称空间会导致名称空间陷入 Terminating 状态,并且 kubectl describe namespace 包含报告度量值 API 发现错误的条件。

  • kubectl top podskubectl top nodes,其他 kubectl 命令或使用 Kubernetes API 来记录 Kubernetes 错误的应用程序,例如:

    The server is currently unable to handle the request (get pods.metrics.k8s.io)
    
    Discovery failed for some groups, 1 failing: unable to retrieve the complete list of server APIs: metrics.k8s.io/v1beta1: the server is currently unable to handle the request
    
  • HorizontalPodAutoscalers (HPA)不能扩展部署。

  • 运行 kubectl get apiservices v1beta1.metrics.k8s.io 会导致以下状态:

    NAME                     SERVICE                      AVAILABLE                      AGE
    v1beta1.metrics.k8s.io   kube-system/metrics-server   False (FailedDiscoveryCheck)   139d
    

集群具有由 kube-system 名称空间中的 metrics-server 部署提供的度量服务。 metrics-server 资源请求和限制基于集群中的节点数,并针对每个工作程序节点具有 30 个或更少 pod 的集群进行优化。 如果内存请求过低,那么它可能会因内存不足错误而失败,并且响应速度会非常慢。 如果 CPU 请求过低,那么可能由于 CPU 调速而导致活动性和就绪性探测器失败。

metrics-server 的问题也可能导致其他区域出现问题。 如果控制平面无法使用 Konnectivity 与 metrics-server 通信,那么度量值 API 不可用。 许可控制 Webhook 可以阻止控制平面创建 pod,包括 metrics-server pod。

请遵循以下步骤进行故障诊断。

  1. 验证 metrics-server pod 是否存在。

    kubectl get pod -n kube-system -l k8s-app=metrics-server
    

    如果未列出任何 pod,那么 admission-control Webhook 可能存在问题。 请参阅 为什么集群操作由于 Webhook 中断而失败?

  2. 验证 apiserver 是否可以连接到 metrics-server

    kubectl logs POD -n kube-system -c metrics-server --tail 5
    

    POD 替换为先前显示的 pod 名称。 返回的任何日志的内容都无关紧要。

    如果收到包含文本 (例如 <workerIP>:10250: getsockopt: connection timed out) 的错误消息,请参阅 kubectl 命令超时

  3. 如果先前步骤未显示问题,请调整 metrics-server 的资源。 请参阅 调整集群度量值提供程序资源