helm的子chart

1、Subchart

  • 目录结构
../../mychart/
├── charts
│   └── subchart #子chart
│       ├── Chart.yaml
│       ├── templates
│       │   └── configmap.yaml
│       └── values.yaml
├── Chart.yaml
├── config1.toml
├── config2.toml
├── config3.toml
├── templates
│   ├── cmdemo.yaml
│   ├── configmap.yaml
│   └── secretdemo.yaml
└── values.yaml

  • 在mychart的下创建subchart
# mychart/charts/subchart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: {
    
    {
    
     .Release.Name }}-cfgmap2
data:
  drink: {
    
    {
    
     .Values.favorite.drink }}# mychart/charts/subchart/values.yaml
favorite:
  drink: "orange juice" #正常应该输出drink: orange juice
  
# mychart/values.yaml
favorite:
  myvalue: "Hello World"
  drink: "coffee"
  food: "PIZZA"
subchart: #指定子chart值
  favorite:
    drink: "coffee"

渲染效果

# Source: mychart/charts/subchart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: release-name-cfgmap2
data:
  drink: coffee

可以看到被mychart中的value文件指定后,子chart中的同一字段被重写为drink: coffee
此时及时指定value文件也没用,父chart依旧改写子chart

#指定value取值来自子chart,渲染结果表明,父chart依旧改写子chart
[root@ks-allinone daicong]# helm template mychart -f mychart/charts/subchart/values.yaml 
---
# Source: mychart/charts/subchart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: release-name-cfgmap2
data:
  drink: coffee

可以看到父类改写子类

2、指定目录下的value文件

测试:为父chart指定values.yaml文件,看看是否按照父chart文件夹下的取值还是按照指定的文件取值

  • 1、不指定values.yaml文件
[root@ks-allinone daicong]# helm template mychart 
---
# Source: mychart/templates/cmdemo.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: release-name-configmap
data:
  myvalue: "Hello World"
  drink: "coffee"   #按照默认的mychart文件夹中values.yaml文件取值
  food: "PIZZA"
  • 2、指定values.yaml文件
[root@ks-allinone daicong]# helm template mychart -f mychart/charts/subchart/values.yaml 
---
# Source: mychart/templates/cmdemo.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: release-name-configmap
data:
  myvalue: "Hello World"
  drink: "orange juice"  #按照指定的values.yaml文件取值
  food: "PIZZA"

可以看到当指定values.yaml文件时,优先从values.yaml文件中取值

3、总结

helm官网直通车

1、子图表被认为是“独立的”,这意味着子图表永远不能显式依赖其父图表。
2、子图无法访问其父级的值。
3、父图表可以覆盖子图表的值。
4、Helm具有可被所有图表访问的全局值的概念。
5、当指定values.yaml文件时,优先从values.yaml文件中取值

猜你喜欢

转载自blog.csdn.net/qq_26884501/article/details/108202148