You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes集群中metrics-server更新后自动回滚问题求助

解决Kubernetes metrics-server更新后自动回滚的问题

当metrics-server更新后10-15分钟自动恢复到旧状态,说明有集群管理组件或控制器在**自动调和(reconcile)**该资源,强制恢复其默认配置。以下是排查和解决步骤:

一、定位是谁在修改资源

首先要明确是什么组件在触发回滚操作:

  1. 查看metrics-server部署的详细信息,重点关注事件记录和注解:

    kubectl describe deployment metrics-server -n kube-system
    

    检查是否有类似kubeadm.kubernetes.io/managed-by、rancher.io/managed这类管理标记注解,以及事件列表中是否有来自其他控制器的更新记录。

  2. 查看kube-system命名空间最近的事件,筛选与metrics-server相关的操作:

    kubectl get events -n kube-system --sort-by='.metadata.creationTimestamp' | grep -i metrics-server
    
  3. 检查资源的所有者引用,确认是否被其他控制器托管:

    kubectl get deployment metrics-server -n kube-system -o jsonpath='{.metadata.ownerReferences}'
    

二、针对不同场景的解决方法

场景1:集群由kubeadm部署和管理

kubeadm会自动维护kube-system中的核心组件,手动修改会被其调和逻辑覆盖。正确的更新方式是通过kubeadm配置文件:

  1. 导出当前kubeadm配置:
    kubeadm config view > kubeadm-config.yaml
    
  2. 在配置文件中找到addons下的metricsServer节点,修改镜像版本、启动参数等配置项,对齐你的my-updated-metrics-server.yaml内容。
  3. 应用更新:
    kubeadm apply --config kubeadm-config.yaml
    
    或者单独更新metrics-server addon:
    kubeadm init phase addon metrics-server --config kubeadm-config.yaml
    

场景2:云厂商托管集群(EKS/GKE/AKS等)

云厂商会托管核心组件的生命周期,手动修改会被其后台控制器恢复,必须通过厂商提供的工具更新:

  • EKS:使用eksctl更新addon
    eksctl update addon --name metrics-server --cluster <你的集群名> --version <目标版本>
    
  • GKE:通过gcloud命令更新
    gcloud container clusters update <你的集群名> --update-addons=MetricsServer=<目标版本>
    
  • AKS:通过Azure CLI更新
    az aks update --name <你的集群名> --resource-group <资源组名> --enable-addons monitoring --update-addons monitoring=<目标版本>
    

场景3:存在自定义控制器/突变Webhook

如果排查到有第三方控制器或mutating webhook在修改metrics-server:

  1. 找到对应的控制器Pod(如rancher相关控制器、自定义operator),暂时停止Pod(业务允许的情况下),执行更新命令:
    kubectl apply -n kube-system -f my-updated-metrics-server.yaml
    
  2. 检查控制器的配置,将metrics-server的新配置同步到控制器的管理模板中,避免后续再次被覆盖。
  3. 对于mutating webhook,检查其规则是否会强制覆盖metrics-server的配置,修改webhook逻辑或调整其作用范围。

场景4:移除管理标记注解

如果metrics-server部署带有类似kubeadm.kubernetes.io/managed-by的注解,可尝试删除该注解后再更新:

# 删除管理注解
kubectl annotate deployment metrics-server -n kube-system kubeadm.kubernetes.io/managed-by-
# 应用更新
kubectl apply -n kube-system -f my-updated-metrics-server.yaml

⚠️ 注意:删除这类注解后,集群管理工具将不再自动维护metrics-server,后续需手动负责其版本升级和故障修复。

三、验证更新是否持久

更新完成后等待15-20分钟,执行以下命令确认配置未被回滚:

kubectl get deployment metrics-server -n kube-system -o yaml | grep -E '(image:|args:|replicas:)'

对比输出内容与你的my-updated-metrics-server.yaml,确认关键配置(如镜像版本、启动参数)一致即可。

内容的提问来源于stack exchange,提问作者Kasper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 23:30:44