我有一个 Helm 图表,其中包含两个子图表:
charts/subchart1
和 charts/subchart2
。 每个子图都有自己的 values.yaml
、templates/deployment.yaml
和类似文件。
在父图表的
values.yaml
文件中,我使用的参数如下:
subchart1:
serverPort: 1234
我可以使用 subchart1 中的这个值。
但是,我想在
subchart2/templates/service.yaml
文件中使用相同的值。 使用 {{ .Values.subchart1.serverPort }}
访问无效。 有什么办法可以访问吗?
这是可以实现的,但是会比较复杂。
❗❗❗ 您可能需要先学习一些概念。
这是一个例子:
演示结构
multi
├── Chart.yaml
├── charts
│ ├── sub0
│ │ ├── Chart.yaml
│ │ ├── charts
│ │ ├── templates
│ │ │ └── configmap.yaml
│ │ └── values.yaml
│ └── sub1
│ ├── Chart.yaml
│ ├── charts
│ ├── templates
│ │ └── configmap.yaml
│ └── values.yaml
├── templates
│ └── configmap.yaml
└── values.yaml
我们将展示如何在
test1: t1
中使用 sub1
,其定义在 sub0
multi/charts/sub0/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-cm
data:
sub0: {{ .Values.sub0 }}
g0: {{ .Values.global.test0 }}
g1: {{ .Values.global.test1 }}
multi/charts/sub0/values.yaml
sub0: sub0
global:
test0: t0
exports:
data:
global:
test1: t1
multi/charts/sub1/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-cm
data:
sub1: {{ .Values.sub1 }}
g1: {{ .Values.global.test1 }}
g2: {{ .Values.global.test2 }}
multi/charts/sub1/values.yaml
sub1: sub1
multi/templates.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-cm
data:
dessert: {{ .Values.parent }}
g1: {{ .Values.global.test1 }}
g2: {{ .Values.global.test2 }}
multi/values.yaml
parent: parent
global:
test2: t2
❗ 多/Chart.yaml
apiVersion: v2
name: multi
description: A Helm chart for Kubernetes
type: application
version: 0.1.0
appVersion: "1.16.0"
dependencies:
- name: sub0
repository: file://./charts/sub0
version: 0.1.0
import-values:
- data
helm --dry-run --debug template multi .
---
# Source: multi/charts/sub0/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: multi-cm
data:
sub0: sub0
g0: t0
g1: t1
---
# Source: multi/charts/sub1/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: multi-cm
data:
sub1: sub1
g1: t1
g2: t2
---
# Source: multi/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: multi-cm
data:
dessert: parent
g1: t1
g2: t2
如您所见,
sub1
通过访问全局值从{{ .Values.global.test1 }}
读取parent-chart (multi)
。
但是这个值
{{ .Values.global.test1 }}
并不是直接定义在multi/values.yaml
中,而是从sub0
派生出来,然后``multiimports this value through
依赖```
由于子chart中parent-chart的值需要通过
global value
访问,所以全局值写在sub0的
values.yaml
中
当然,如果只需要
sub1
来访问 sub0
中的值,name 可以直接 dependency
sub0
中的值,类似 sub1
中的方法。
我们的上述方法将在所有子图表中可用。