Helm全局chart执行template时子chart自定义values未生效如何解决
Helm子chart配置读取异常调整方案
根因说明
- Helm默认仅自动加载每个Chart根目录下的
values.yaml文件,自定义命名的values-int.yaml(无论父级还是子级)都不会被默认加载,需要执行命令时显式指定 - 父Chart向子Chart传值时,只有父级values中以子Chart名称为key的配置块才会注入到对应子Chart的
.Values对象中,父级顶级配置不会直接被子Chart读取 - 你当前执行的
helm template .未指定环境配置文件,也没有按子Chart维度做配置隔离,因此出现取值异常
调整步骤
1. 修正父Chart依赖声明
在父Chart的Chart.yaml中添加子Chart依赖配置,确保Helm能正确识别子Chart:
# Global-helm-chart/Chart.yaml apiVersion: v2 name: Global-helm-chart version: 0.1.0 dependencies: - name: chart-1 version: 0.1.0 repository: "file://./sub-charts/chart-1" - name: chart-2 version: 0.1.0 repository: "file://./sub-charts/chart-2"
2. 调整全局环境配置结构
修改父级values-int.yaml,把每个子Chart的配置放在对应子Chart名称的键下,方便自动注入:
# Global-helm-chart/values-int.yaml global: env: "int" # chart-1专属配置 chart-1: tickets: dynamicEvents: topics: - topic_name: "ai-recommendations-pending-for-review" events: - name: "PendingForReview" parameters: subject: "$.insightTypeId" group_uid: "customer_care" # chart-2专属配置 chart-2: tickets: # 此处填写chart-2对应的tickets配置
3. 简化子Chart模板
子Chart的configmap.yaml可以直接使用.Values读取注入后的专属配置,不需要额外赋值变量:
# chart-1/templates/configmap.yaml(chart-2同理) {{ if eq .Values.global.env "int" }} apiVersion: v1 kind: ConfigMap metadata: name: "{{ .Chart.Name }}-configuration" data: json: {{ .Values.tickets | toJson | quote }} {{ end }}
你也可以保留子Chart自己的values.yaml作为默认配置,父级传入的同key配置会自动覆盖默认值。
4. 调整渲染命令
执行渲染时显式指定加载int环境的配置文件:
helm template . -f values-int.yaml
可选方案:保留子Chart独立的多环境配置
如果你希望子Chart的环境配置完全独立维护,不需要合并到父级配置文件,可以在子Chart的values.yaml中内置多环境配置块,通过环境变量判断读取对应块:
# chart-1/values.yaml # 默认配置 tickets: {} # int环境配置 int: tickets: dynamicEvents: topics: - topic_name: "ai-recommendations-pending-for-review" events: - name: "PendingForReview" parameters: subject: "$.insightTypeId" group_uid: "customer_care"
对应模板调整为:
{{ if eq .Values.global.env "int" }} apiVersion: v1 kind: ConfigMap metadata: name: "{{ .Chart.Name }}-configuration" data: json: {{ .Values.int.tickets | toJson | quote }} {{ end }}
内容的提问来源于stack exchange,提问作者jrz
相关产品推荐
相关产品推荐

