调试 metrics-server
虚拟私有云 传统基础设施
以下症状可能指示需要调整 metrics-server 资源:
-
metrics-server正在频繁重新启动。 -
删除名称空间会导致名称空间陷入
Terminating状态,并且kubectl describe namespace包含报告度量值 API 发现错误的条件。 -
kubectl top pods,kubectl 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。
请遵循以下步骤进行故障诊断。
-
验证 metrics-server pod 是否存在。
kubectl get pod -n kube-system -l k8s-app=metrics-server如果未列出任何 pod,那么
admission-controlWebhook 可能存在问题。 请参阅 为什么集群操作由于 Webhook 中断而失败?。 -
验证 apiserver 是否可以连接到
metrics-server。kubectl logs POD -n kube-system -c metrics-server --tail 5将
POD替换为先前显示的 pod 名称。 返回的任何日志的内容都无关紧要。如果收到包含文本 (例如
<workerIP>:10250: getsockopt: connection timed out) 的错误消息,请参阅kubectl命令超时。 -
如果先前步骤未显示问题,请调整
metrics-server的资源。 请参阅 调整集群度量值提供程序资源。