Helm值文件从通用值文件继承配置的实现问题
Helm 跨值文件复用变量的可行方案
核心思路
Helm 的 values.yaml 本身不支持模板语法解析,直接在其中引用外部文件的方式行不通。要实现无需额外传参的通用值复用,有两种可靠方案:
方式一:通过模板片段合并通用值
改造通用值文件为模板片段
将values-generic.yaml重命名为templates/_values-generic.tpl,用define包裹通用变量:{{- define "mychart.genericValues" -}} replicas: 8 # 可添加其他通用配置项 {{- end -}}在助手模板中合并值
在templates/_helpers.tpl中添加合并逻辑,将通用值与本地values.yaml的值合并:{{- define "mychart.combinedValues" -}} {{- mergeOverwrite .Values (include "mychart.genericValues" . | fromYaml) -}} {{- end -}}注:如果需要本地
values.yaml的值优先覆盖通用值,把mergeOverwrite换成merge即可。模板文件引用合并后的值
修改template.yaml,不再直接使用.Values.replicas,而是调用合并后的结果:apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment spec: replicas: {{ (include "mychart.combinedValues" .).replicas }} # 其他Pod相关配置
方式二:通过Chart依赖复用通用值
如果通用值可以抽象为独立的基础Chart,这种方式更适合长期维护:
创建通用基础Chart
新建一个generic-chart,在它的values.yaml中定义通用变量:replicas: 8在业务Chart中添加依赖
修改业务Chart的Chart.yaml,引入通用Chart依赖:dependencies: - name: generic-chart version: 0.1.0 repository: "file://../generic-chart" # 本地路径或远程仓库地址引用依赖Chart的值
在业务Chart的模板或values.yaml中直接引用:# template.yaml 中使用 replicas: {{ .Values.generic-chart.replicas }} # 或在业务 values.yaml 中复用 replicas: {{ .Values.generic-chart.replicas }}使用前先执行
helm dependency build拉取依赖,之后执行helm template就无需额外传参。
内容的提问来源于stack exchange,提问作者Chris Tsag
相关产品推荐
相关产品推荐

