如何在Helm中跳过指定模板部署?Chart.yaml能否添加自定义属性?
仅部署指定模板文件的实现方法
你可以根据你的Helm版本选以下任意一种方案实现:
- 方案1(适用于Helm 3.10及以上版本):使用
--include参数直接指定需要部署的模板文件,执行命令时注意路径和你实际目录结构匹配(如果你的模板目录实际为template就对应调整路径):
helm install app1-release ./my-charts/app1 \ --include templates/app1-microservice1-deployment.yaml \ --include templates/app1-microservice1-service-defintion.yaml
如果是升级操作,把install换成upgrade即可。
- 方案2(全版本兼容,更推荐):给模板添加条件渲染开关
在values.yaml中新增每个微服务的启用配置:
microservices: microservice1: enabled: true microservice2: enabled: false
然后在所有app1-microservice2开头加上条件判断:
{{- if .Values.microservices.microservice2.enabled }} # 原有模板的全部内容 {{- end }}
后续部署时默认就只会渲染microservice1的资源,需要部署microservice2时只要把对应enabled值改为true即可。
相关问题解答
将microservice2相关文件加入.helmignore是否会跳过部署?
不会。.helmignore的作用仅为执行helm package打包Chart时,忽略指定文件不打入最终的tgz包,完全不影响helm install/upgrade时的模板渲染逻辑。如果你是直接用本地目录部署,哪怕把文件加入.helmignore,Helm还是会渲染所有templates(或你命名的template)目录下的YAML文件。
该场景的行业最佳实践是什么?
- 优先使用条件渲染+values开关的方案,兼容性最高,部署逻辑全部固化在配置中,不会因为命令输入错误导致部署不符合预期,后续调整部署范围只要修改values配置即可。
- 如果两个微服务迭代节奏独立、关联性低,建议拆分为独立的子Chart,用伞形Chart(Umbrella Chart)统一管理,后续要部署哪个服务只要开启对应子Chart的开关即可,更符合Helm的设计规范。
- 生产环境不建议使用临时加
--include参数的方式部署,容易出现参数漏传、路径写错等人为失误。
Chart.yaml根层级添加自定义属性的影响
Helm 3允许在Chart.yaml根层级添加自定义字段,不会触发报错,也不会影响Helm的核心功能。这些自定义字段可以直接在模板中通过.Chart对象访问,比如你示例中的projectNames可以通过{{ .Chart.projectNames }}取值,imageRepo.microservice1可以通过{{ .Chart.imageRepo.microservice1 }}取值。
不过官方推荐自定义字段尽量放在annotations字段下,避免后续Helm版本更新新增官方根字段时,和你的自定义字段命名冲突,导致逻辑异常。
内容的提问来源于stack exchange,提问作者Tim
相关产品推荐
相关产品推荐

