helm global & subchart - 调用值

helm global & subchart - call values

我创建了一个带有子图表的 helm 图表。

全局掌舵图包含 values.yamlvalues-int.yaml 文件。以及所有子图表。

这是结构:

- Global-helm-chart:
  - values.yaml
  - values-int.yaml
  - sub-charts:
    - chart-1:
      - values.yaml
      - value-int.yaml
      - templates:
        - configmap.yaml
    - chart-2:
      - values.yaml
      - value-int.yaml
      - templates:
        - configmap.yaml

这是chart-1下的configmap.yaml(图2同):

{{- $root := .Values -}}
{{ if eq .Values.global.env "int" }}
apiVersion: v1
kind: ConfigMap
metadata:
  name: "{{ .Chart.Name }}-configuration"
data:
  json: {{ $root.tickets | toJson | quote }}
{{ end }}

这是chart-1下的values-int.yaml:

tickets:
  dynamicEvents:
    topics:
    - topic_name: "ai-recommendations-pending-for-review"
      events:
      - name: "PendingForReview"
        parameters:
          subject: "$.insightTypeId"
          group_uid: "customer_care"

helm template . from the global chart 会打印出两个configMaps,它们的值取自全局chart的values.yamlvalues-int.yml以及not 符合预期,来自 chart-1chart-2.

我希望来自 global-helm-chart 的 helm 模板在 configMap 中显示 json: ,其值 values-int.yamlchart-1.

提前致谢..

Helm 本身并没有您所描述的每个环境值文件的概念。如果你运行

helm template . -f values-int.yaml

在当前目录中读取 ./values-int.yaml,但不会在任何其他位置查找该文件;特别是它不会尝试在子图表中查找同名值文件。

相反,您需要将所有设置折叠到一个 values-int.yaml 文件中,无论您从哪里 运行 进行部署(它不需要在图表目录中 本身)。带有图表名称的顶级键下的单个文件 includes settings for all of the sub-charts

因此,文件系统布局为:

global-helm-chart/
+-- Chart.yaml
+-- values.yaml
+-- values-int.yaml
|
\-- charts/
  +-- chart1/
  | +-- Chart.yaml
  | +-- values.yaml
  | \-- templates/
  |   \-- configmap.yaml
  |
  \-- chart2/ 
    +-- Chart.yaml
    +-- values.yaml
    \-- templates/
      \-- configmap.yaml

顶级 values-int.yaml 将包含:

# Helm values for the integration environment.  These override
# settings in values.yaml in this chart and its subcharts.

global:
  env: int

chart1:
  tickets:
    dynamicEvents: { ... }

chart2: { ... }