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

如何仅升级Helm release中的单个subchart而不影响其他关联资源

Helm 单独升级子chart不影响其他资源的解决方案

错误操作原因

你执行的helm upgrade my-app ./charts/frontend等价于用frontend子chart的完整资源清单替换原有my-app release的全部资源,Helm默认采用声明式全量覆盖逻辑,会自动清理不在本次渲染清单内的资源,这就是其他Pod被终止的原因。

可行解决方案

方案1:子chart启用开关+禁用资源清理(推荐,无需调整现有架构)

  1. 先在主chart的values.yaml中为每个子chart配置enabled开关(如果未配置的话):
# 主chart values.yaml 示例
frontend:
  enabled: true
backend:
  enabled: true
mysql:
  enabled: true
# 其他子chart对应配置
  1. 单独升级frontend子chart时,仍然指向主chart根目录执行命令,临时关闭其他子chart的启用状态,同时关闭自动清理逻辑:
helm upgrade my-app . \
  --values values.dev.yaml \
  --reuse-values \
  --set frontend.enabled=true \
  --set backend.enabled=false \
  --set mysql.enabled=false \
  --prune=false

--prune=false是核心参数,会让Helm跳过删除本次未渲染的已有资源,仅更新本次渲染出的frontend相关资源

方案2:拆分为独立Release(多团队长期协作推荐)

如果各子chart的维护团队完全独立,不需要共享发布生命周期,建议直接将每个子chart拆分为独立的Release管理:

# 单独安装frontend Release
helm install my-app-frontend ./charts/frontend --values values.dev.yaml
# 单独安装backend Release
helm install my-app-backend ./charts/backend --values values.dev.yaml
# 后续升级仅需操作对应Release即可,完全不会影响其他组件
helm upgrade my-app-frontend ./charts/frontend --values values.dev.yaml

方案3:使用Helm内置局部升级特性(需Helm 3.10+版本)

3.10及以上版本的Helm支持--include参数指定仅升级匹配路径的资源,无需额外配置开关:

helm upgrade my-app . \
  --values values.dev.yaml \
  --reuse-values \
  --include charts/frontend/*

该参数会自动跳过其他路径资源的更新与删除操作。

注意事项

  • 升级前建议添加--dry-run --debug参数预览变更内容,确认仅会修改目标资源后再执行正式操作
  • 若子chart依赖共享的CRD资源,单独升级前需确认CRD版本兼容性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 11:06:02