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

如何打包维护含Kubernetes CRD的Helm Chart开放/封闭Beta版本?

解决方案:维护多Beta版本Helm Chart的最佳实践

核心结论

直接采用你示例中的独立目录结构是最稳妥的方案,Helm本身没有原生支持在单个Chart目录内同时维护两个带破坏性变更的版本,分开管理能彻底避免版本混淆、简化补丁维护流程。

具体实现建议

1. 采用独立目录结构(推荐)

严格按照你给出的示例搭建目录,每个版本对应完全独立的Chart目录:

<root directory>
|
---my-product
   |
   ---v1.0.0
      |
      ---Chart.yaml       # 版本设为v1.0.0,标注开放Beta属性
      ---values.yaml
      ---Chart.lock
      ---crds/            # 仅存放v1版本的CRD文件
   |
   ---v2.0.0
      |
      ---Chart.yaml       # 版本设为v2.0.0,标注封闭Beta属性
      ---values.yaml
      ---Chart.lock
      ---crds/            # 存放v2版本的CRD(含新增、修改、删除后的内容)
  • 每个目录独立维护自身的依赖、CRD和配置,完全隔离,不会互相干扰
  • v1的补丁直接在v1.0.0目录下迭代,比如发布v1.0.1、v1.0.2等补丁版本,不影响v2的开发
  • v2的封闭Beta版本仅用于内部测试,不推送到用户可访问的Chart仓库,仅在内部环境部署

2. 版本与权限管控细节

  • 在Chart.yaml中添加自定义注释或标签,明确区分开放/封闭Beta状态:
    # v1.0.0/Chart.yaml
    apiVersion: v2
    name: my-product
    version: 1.0.0
    appVersion: 1.0.0
    annotations:
      beta-status: "open"
    
    # v2.0.0/Chart.yaml
    apiVersion: v2
    name: my-product
    version: 2.0.0
    appVersion: 2.0.0
    annotations:
      beta-status: "closed"
    
  • 封闭Beta版本的Chart包仅内部分发,不发布到公共/用户可访问的Chart仓库;开放Beta版本正常发布,接收用户反馈和补丁更新

3. 为什么不推荐单一目录方案?

Helm的helm package命令基于单个Chart目录打包,虽然可以通过.helmignore排除文件,但无法实现同一目录下同时生成两个带破坏性变更的版本:

  • 若尝试用条件渲染CRD(比如通过values控制),会导致Chart逻辑极度复杂,且CRD属于集群级操作,条件渲染容易引发意外的资源创建/删除问题
  • 单一目录下维护两个版本的CRD会导致版本混淆,补丁更新时极易误将v2的内容混入v1版本中

额外优化建议

  • 用Git分支辅助管理:主分支维护v1开放Beta的补丁更新,单独开一个v2-beta分支维护封闭Beta版本,避免代码冲突
  • 内部测试v2版本时,直接指定本地目录安装:helm install my-product-v2 ./my-product/v2.0.0

内容的提问来源于stack exchange,提问作者joe b.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 11:42:37