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

如何在Helm模板中修改metadata.name并保留旧资源实例?

Helm升级时保留旧MyResource实例的解决办法

你遇到的问题本质是Helm的资源清理机制:Helm会跟踪每个Release版本对应的资源清单,每次升级时,它会对比当前模板生成的资源和已部署的资源,凡是旧清单里有但新清单里没有的资源,都会被Helm自动删除。你用{{ .Release.Revision }}作为资源名后缀,每次升级生成的新资源名和旧的不一样,旧资源自然不在新清单里,所以被删了。

下面是两种可行的解决方法:

方法一:给资源添加保留注解(最直接)

在你的MyResource模板里添加helm.sh/resource-policy: keep注解,告诉Helm不要删除这个资源,哪怕它不在当前版本的资源清单里。修改后的模板如下:

apiVersion: v1
kind: MyResource
metadata:
  name: myresource-{{ .Release.Revision }}
  labels:
    {{- include "mychart.labels" . | nindent 4 }}
  annotations:
    "helm.sh/resource-policy": "keep"

这样每次升级生成的新资源都会带上这个注解,Helm后续升级时就不会删除任何带有该注解的旧资源了。

注意:加了这个注解后,执行helm uninstall只会删除当前Release版本对应的资源,旧的带注解的资源会留在集群里,需要你手动用kubectl delete清理。

方法二:自定义资源管理逻辑(适合复杂场景)

如果需要自动管理旧资源的生命周期(比如保留最近3个实例),可以在Helm升级前后配合脚本实现:

  • 升级前,用kubectl get myresource列出所有旧实例,标记需要保留的
  • 升级后,删除超出保留数量的旧实例

这种方式需要额外编写脚本,结合CI/CD流程来执行,适合有自动化运维需求的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 10:51:07