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

删除重复Volume后Kubernetes Deployment无法更新的无停机解决方案

无停机解决Deployment重复Volume删除后无法更新的问题

问题根源

你之前的Deployment存在两个同名data的Volume,虽然K8s允许这种配置(实际运行时会取最后一个条目),但直接删除其中一个后,API服务器的校验逻辑出现异常,导致无法识别volumeMounts中关联的data Volume,进而无法完成更新。

解决步骤(全程无停机,依赖K8s滚动更新机制)

1. 恢复兼容状态,让Deployment可正常更新

先将Deployment的Volumes恢复为原来的重复配置,确保和集群当前状态兼容,执行更新:

spec:
  containers:
  - image: myImage
    name: myImage
    volumeMounts:
    - name: data
      mountPath: /opt/data
  volumes:
  - name: data
    configMap:
      name: configmap-data
  - name: data
    configMap:
      name: configmap-data

执行命令:

kubectl apply -f your-deployment.yaml

此时Deployment会正常完成滚动更新(因为配置和现有集群状态一致,实际Pod不会重启,只是更新Deployment的revision)。

2. 切换到临时Volume名称,清理异常状态

修改Volume和VolumeMounts的名称为临时值(比如data-temp),执行滚动更新:

spec:
  containers:
  - image: myImage
    name: myImage
    volumeMounts:
    - name: data-temp
      mountPath: /opt/data
  volumes:
  - name: data-temp
    configMap:
      name: configmap-data

执行命令:

kubectl apply -f your-deployment.yaml

K8s会逐个替换现有Pod,用新的data-temp Volume挂载,全程无服务中断。

3. 改回原Volume名称,完成修复

最后将Volume和VolumeMounts的名称改回data,执行最终更新:

spec:
  containers:
  - image: myImage
    name: myImage
    volumeMounts:
    - name: data
      mountPath: /opt/data
  volumes:
  - name: data
    configMap:
      name: configmap-data

执行命令:

kubectl apply -f your-deployment.yaml

再次触发滚动更新后,Deployment将使用单一的data Volume,后续可正常执行apply或patch操作。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 19:35:21