1. 检查 RBAC 配置

确保 Metrics Server 的 RBAC 配置正确,包括 ClusterRoleClusterRoleBinding。以下是一个完整的 RBAC 配置示例:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: metrics-server-role
rules:
- apiGroups: [""]
  resources: ["nodes", "nodes/stats", "pods"]
  verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: metrics-server-rolebinding
subjects:
- kind: ServiceAccount
  name: metrics-server
  namespace: kube-system
roleRef:
  kind: ClusterRole
  name: metrics-server-role
  apiGroup: rbac.authorization.k8s.io

应用上述配置:

kubectl apply -f <(echo "$RBAC_YAML")

2. 检查 Kubelet 配置

确保 Kubelet 的配置允许 Metrics Server 访问节点数据。Kubelet 的配置文件(通常是 /etc/kubernetes/kubelet.conf)中需要包含以下参数:

  • --authentication-token-webhook=true

  • --authorization-mode=Webhook

如果这些参数未启用,Kubelet 将无法正确验证 Metrics Server 的请求。

3. 检查 TLS 配置

如果 Kubelet 使用了 TLS 证书,确保 Metrics Server 能够正确处理 TLS 验证。可以通过以下方式解决 TLS 问题:

  • 跳过 TLS 验证(仅限测试环境): 在 Metrics Server 的 Deployment 中添加以下参数:

    args:
      - --kubelet-insecure-tls
  • 配置 TLS 证书: 确保 Kubelet 的 TLS 证书包含正确的 SAN(Subject Alternative Name)条目,并将证书路径配置到 Metrics Server 中。

4. 检查网络策略

确保集群中的网络策略允许 Metrics Server 访问 Kubelet 的 /metrics/resource 端点。如果使用了 Calico 或其他网络插件,检查是否有阻止 Metrics Server 访问的策略。

5. 验证 Metrics Server 版本

确保 Metrics Server 的版本与 Kubernetes 集群版本兼容。例如:

  • Kubernetes 1.19+ 需要 Metrics Server 0.6.x

  • Kubernetes 1.18 需要 Metrics Server 0.5.x

可以通过以下命令检查 Metrics Server 的版本:

kubectl describe deployment metrics-server -n kube-system | grep Image

如果版本不匹配,可以手动下载对应版本的 Metrics Server 配置文件并部署:

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

6. 查看日志

查看 Metrics Server 的日志,查找可能的错误信息:

kubectl logs -n kube-system <metrics-server-pod-name>

7. 检查 API Service 注册

确保 Metrics Server 的 API Service 已正确注册:

kubectl get apiservice v1beta1.metrics.k8s.io

如果未注册,可以尝试重新应用 Metrics Server 的配置文件:

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐