chart可以有称为子chart的依赖关系
关于子chart
1,子chart认为是“独立的”,即子chart不能明确依赖于其父chart。
2,子chart无法访问其父项的值。
3,父chart可以覆盖子chart的值。
4,Helm有全局值的概念,可以被所有chart访问。
创建一个空的子chart
$ cd mychart/charts
$ helm create mysubchart
Creating mysubchart
$ rm -rf mysubchart/templates/*.*
添加一个configmap:mychart/charts/mysubchart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-cfgmap2
data:
dessert: {{ .Values.dessert }}
独立测试这个子chart:
$ helm install --dry-run --debug mychart/charts/mysubchart
SERVER: "localhost:44134"
CHART PATH: /Users/mattbutcher/Code/Go/src/k8s.io/helm/_scratch/mychart/charts/mysubchart
NAME: newbie-elk
TARGET NAMESPACE: default
CHART: mysubchart 0.1.0
MANIFEST:
---
# Source: mysubchart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: newbie-elk-cfgmap2
data:
dessert: cake
一切正常。
覆盖子chart值
要覆盖子chart中的值,可以在父chart 的values.yaml文件中这样写:
favorite:
drink: coffee
food: pizza
pizzaToppings:
- mushrooms
- cheese
- peppers
- onions
mysubchart: # 注意此处名称
dessert: ice cream
再次测试子chart ,则其值已经改变。
data:
dessert: ice cream
全局chart值
全局值是可以从任何chart或子chart用完全相同的名称访问的值。全局值需要明确声明。
全局值的声明方式:
favorite:
drink: coffee
food: pizza
pizzaToppings:
- mushrooms
- cheese
- peppers
- onions
mysubchart:
dessert: ice cream
global:
salad: caesar
这样,则mychart/templates/configmap.yaml和mysubchart/templates/configmap.yaml都能够这样访问该值{{ .Values.global.salad}}。
此外,父chart和子chart可以共享模板。任何chart中的任何定义块都可用于其他chart。