Metrics Server是一个特殊的集群级别(Cluster-Level)组件,而不是一个普通的命名空间级别(Namespace-Level)的工作负载应用。
|---------------|----------------------------------------------|-----------------------------------------------------------------------------------------------|
| 特性 | 普通应用Pod (如Nginx) | Metrics Server |
| 作用域 | 命名空间级别:属于特定Namespace,仅对该Namespace内的资源可见。 | 集群级别:服务于整个集群,收集所有Namespace下的Node和Pod的性能指标。 |
| 安装目标Namespace | 可以是任何Namespace(如zxx, default)。 | 必须 安装在 kube-system 命名空间。这是Kubernetes生态的约定俗成,集群核心组件都放在这里。 |
| 功能依赖 | 通常被同一Namespace内的Service或Ingress访问。 | 其API(metrics.k8s.io)被Horizontal Pod Autoscaler (HPA) 和 **kubectl top** 命令等集群级功能依赖。 |
目录
[正确安装与验证 Metrics Server](#正确安装与验证 Metrics Server)
[1.正确安装 Metrics Server](#1.正确安装 Metrics Server)
[1. 查看 Pod 详细信息和事件](#1. 查看 Pod 详细信息和事件)
[解决:直接修改 Pod 镜像(快速修复)](#解决:直接修改 Pod 镜像(快速修复))
[新问题:看到两个 Metrics Server Pod!](#新问题:看到两个 Metrics Server Pod!)
[步骤 1:直接删除这两个有问题的Pod](#步骤 1:直接删除这两个有问题的Pod)
[步骤 2:立即检查新Pod的状态和事件](#步骤 2:立即检查新Pod的状态和事件)
[步骤 3:完全卸载当前的 Metrics Server](#步骤 3:完全卸载当前的 Metrics Server)
[步骤 4:使用国内镜像源重新安装](#步骤 4:使用国内镜像源重新安装)
[步骤 5:等待并验证安装](#步骤 5:等待并验证安装)
[方法一 通过 Patch 命令快速修复(推荐)](#方法一 通过 Patch 命令快速修复(推荐))
[方法二 编辑 Deployment 配置文件(更直观)](#方法二 编辑 Deployment 配置文件(更直观))
正确安装与验证 Metrics Server
请按照以下步骤操作:
1.正确安装 Metrics Server
推荐使用官方提供的YAML文件进行安装,这会自动将其部署到kube-system命名空间。
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
注意 :在某些环境(特别是使用自签名证书的私有集群),你可能需要编辑这个YAML文件,在Metrics Server的Deployment参数中添加--kubelet-insecure-tls以跳过TLS验证。
2.验证安装是否成功
安装后,检查kube-system命名空间下的Metrics Server Pod是否正常运行:
kubectl get pods -n kube-system | grep metrics-server
等待片刻(约1-2分钟),让Metrics Server完成数据采集,然后测试命令:
# 查看集群节点的资源使用情况
kubectl top nodes
# 查看指定命名空间(如zxx)下Pod的资源使用情况
kubectl top pods -n zxx
遇到镜像问题,网络原因一直拉取不过来:

诊断步骤
1. 查看 Pod 详细信息和事件
# 查看 Pod 详细信息,特别是 Events 部分
kubectl describe pod metrics-server-856f767b-s6m2m -n kube-system
重点关注:
-
Events:查看是否有警告或错误事件
-
Readiness Probe:查看就绪探针的配置
-
Conditions:查看 Pod 的各项条件状态
2.查看容器日志(最可能找到原因)
# 查看容器日志(这是最关键的一步)
kubectl logs metrics-server-856f767b-s6m2m -n kube-system
# 如果上面命令没输出,尝试指定容器名
kubectl logs metrics-server-856f767b-s6m2m -n kube-system -c metrics-server

Metrics Server 无法从官方镜像仓库拉取镜像 ,导致 Pod 无法启动。这是一个网络连接问题,不是 Pod 配置或健康检查的问题。
3.检查就绪探针配置
# 查看 Deployment 配置
kubectl get deployment metrics-server -n kube-system -o yaml | grep -A 10 "readinessProbe"
解决:直接修改 Pod 镜像(快速修复)
如果您只需要临时解决这个问题:镜像加速器:https://console.ucloud.cn/
# 1. 编辑 Deployment
kubectl edit deployment metrics-server -n kube-system
# 2. 找到 image 字段,修改为:
# image: registry.aliyuncs.com/google_containers/metrics-server:v0.8.0
# 3. 保存并退出,Pod 会自动重启
新问题:看到两个 Metrics Server Pod!

这是 Kubernetes Deployment 滚动更新和故障恢复的正常现象 ,但两个Pod都处于 0/1 Running状态说明当前的部署是有问题的。
步骤 1:直接删除这两个有问题的Pod
Deployment 控制器会发现 Pod 被删除,并立即尝试用当前最新的配置重新创建一个全新的Pod。
kubectl delete pod metrics-server-856f767b-s6m2m metrics-server-5f4646758d-9wwzx -n kube-system
步骤 2:立即检查新Pod的状态和事件
删除后,马上运行以下命令查看是否生成了新Pod,以及它卡在哪一步。
# 查看新Pod是否生成
kubectl get pods -n kube-system -l k8s-app=metrics-server -w
# 按 Ctrl+C 停止监视
# 查看新Pod的详细事件,这是诊断的关键
kubectl describe pod -n kube-system -l k8s-app=metrics-server
重点关注 Events:部分,看是否还是 Failed to pull image。
**步骤 3:**完全卸载当前的 Metrics Server
# 1. 删除 Deployment
kubectl delete deployment metrics-server -n kube-system
# 2. 删除 Service
kubectl delete service metrics-server -n kube-system
# 3. 删除所有相关资源(更彻底的方式)
kubectl delete -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml 2>/dev/null || true
# 4. 强制删除所有残留的 Pod(如果还有)
kubectl delete pod -n kube-system -l k8s-app=metrics-server --force --grace-period=0 2>/dev/null || true
# 5. 验证是否已完全删除
kubectl get all -n kube-system | grep -i metrics
步骤 4:使用国内镜像源重新安装
这是关键步骤!我们将使用镜像替代官方镜像:
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
修改代码中image地址为镜像加速后的地址:
# 3. 应用修改后的配置文件
kubectl apply -f components-modified.yaml
# 4. 删除临时文件
rm -f components.yaml components-modified.yaml
步骤 5:等待并验证安装
# 等待 Pod 启动(大约30-60秒)
echo "等待 Metrics Server 启动..."
sleep 30
# 检查 Pod 状态(应该只有一个 Pod,且状态为 Running 1/1)
kubectl get pods -n kube-system -l k8s-app=metrics-server
# 查看详细状态
kubectl describe pod -n kube-system -l k8s-app=metrics-server
# 等待一段时间让 Metrics Server 收集数据
echo "等待数据收集(约30秒)..."
sleep 30
# 测试功能
kubectl top nodes 2>/dev/null && echo "Metrics Server 安装成功!" || echo "仍在初始化,请稍后再试"
最后一个问题:
Readiness probe failed: HTTP probe failed with statuscode: 500这个错误说明 Metrics Server 容器已成功启动,但内部的 HTTP 健康检查接口返回了 500 内部服务器错误。

查看详细的应用日志(最关键)
# 查看 Metrics Server 的详细日志
kubectl logs -n kube-system deployment/metrics-server --tail=100
# 或者查看特定 Pod 的日志
kubectl logs -n kube-system metrics-server-5f4646758d-4kxhk

-
根本问题:Kubernetes 节点的 kubelet 使用了自签名的、不包含 IP SAN 的证书,导致 Metrics Server 无法与其建立安全连接。
-
解决方案 :通过在 Metrics Server 的启动命令中添加
--kubelet-insecure-tls参数,使其跳过证书验证。
方法一 通过 Patch 命令快速修复(推荐)
执行以下命令,为现有的 Metrics Server Deployment 添加必要的参数:
# 这个命令将向 Metrics Server 添加三个关键参数:
# 1. --kubelet-insecure-tls: 跳过 TLS 验证(解决证书问题)
# 2. --kubelet-preferred-address-types=InternalIP: 优先使用节点内网IP连接
# 3. --metric-resolution=30s: 设置指标采集间隔
kubectl patch deployment metrics-server -n kube-system --type='json' -p='
[
{
"op": "add",
"path": "/spec/template/spec/containers/0/args/-",
"value": "--kubelet-insecure-tls"
},
{
"op": "add",
"path": "/spec/template/spec/containers/0/args/-",
"value": "--kubelet-preferred-address-types=InternalIP"
},
{
"op": "add",
"path": "/spec/template/spec/containers/0/args/-",
"value": "--metric-resolution=30s"
}
]'
方法二 编辑 Deployment 配置文件(更直观)
kubectl edit deployment metrics-server -n kube-system
在 spec.template.spec.containers[0].args部分,确保包含以下参数:
args:
- --cert-dir=/tmp
- --secure-port=443
- --kubelet-insecure-tls # 新增:跳过TLS验证
- --kubelet-preferred-address-types=InternalIP # 新增:使用内网IP
- --metric-resolution=30s # 新增:采集间隔