E1129 05:31:43.133057 1691 memcache.go:287] couldn't get resource list for metrics.k8s.io/v1beta1: the server is currently unable to handle the request
E1129 05:31:43.143879 1691 memcache.go:121] couldn't get resource list for metrics.k8s.io/v1beta1: the server is currently unable to handle the request
E1129 05:31:43.145402 1691 memcache.go:121] couldn't get resource list for metrics.k8s.io/v1beta1: the server is currently unable to handle the request
E1129 05:31:43.147799 1691 memcache.go:121] couldn't get resource list for metrics.k8s.io/v1beta1: the server is currently unable to handle the request
NAME

为什么会报这个? metrics-server有什么作用?
为什么会报错?
报错的原因是 Kubernetes 集群中的 metrics.k8s.io/v1beta1 API 服务未能正确响应请求。这通常是因为 Metrics Server 没有正确配置、运行或连接不上集群中的 Kubelet。
详细错误解析
• metrics.k8s.io/v1beta1 API 提供集群资源的实时监控数据,比如 Pod 和节点的 CPU、内存使用情况。
• 错误日志表明:
• Kubernetes 调用 metrics.k8s.io 的 API 时,Metrics Server 没有返回数据。
• 原因可能是:
1. Metrics Server未运行或未就绪:Pod 状态异常。
2. 网络问题:Metrics Server 无法访问节点上的 Kubelet。
3. 认证或权限问题:Kubelet未能通过 Metrics Server 的认证。
4. APIService 未注册或无端点:v1beta1.metrics.k8s.io 的 API 无法找到 Metrics Server 的服务端点。
Metrics Server 的作用
Metrics Server 是 Kubernetes 中的一个核心组件,用于实时采集集群的资源使用数据。它的主要功能包括:
-
提供资源监控数据
• kubectl top 命令:
• 通过 Metrics Server,您可以运行以下命令获取集群资源使用情况:
kubectl top nodes
kubectl top pods
-
支持自动扩缩容
• Kubernetes 的 Horizontal Pod Autoscaler (HPA) 和 Vertical Pod Autoscaler (VPA) 依赖 Metrics Server 提供的资源使用指标(如 CPU、内存)来调整 Pod 副本数或资源分配。
-
集成其他监控系统
• Metrics Server 提供的实时数据可以与监控工具(如 Prometheus)结合使用,用于进一步分析集群性能。
解决方案
- 确保 Metrics Server 已部署
检查 Metrics Server 是否运行:
kubectl get pods -n kube-system | grep metrics-server
如果没有运行,安装 Metrics Server:
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
- 检查 Metrics Server 的状态
查看 Metrics Server 的日志,定位问题:
kubectl logs -n kube-system <metrics-server-pod-name>
常见问题:
• TLS 证书错误:可能需要配置 –kubelet-insecure-tls。
• 网络问题:Metrics Server 无法访问 Kubelet。
- 修复 Metrics Server 配置
编辑 Metrics Server Deployment:
kubectl edit deployment metrics-server -n kube-system
添加以下参数:
containers:
- name: metrics-server
args:
- --kubelet-insecure-tls
- --kubelet-preferred-address-types=InternalIP,Hostname,ExternalIP
- 检查 APIService
验证 metrics.k8s.io 是否正确注册:
kubectl get apiservices | grep metrics
如果 AVAILABLE 显示 False,描述该服务:
kubectl describe apiservice v1beta1.metrics.k8s.io
查看是否存在以下问题:
• 连接被拒绝 (connection refused)。
• 缺少端点 (MissingEndpoints)。
- 测试
修复后,运行以下命令验证:
kubectl top nodes
kubectl top pods
![]()