首页 > 编程学习 > Helm Subcharts And Global Values practical operation

Helm Subcharts And Global Values practical operation

发布时间:2022/11/9 7:22:15

以下操作,均原取自HELM官网,由个人进行实操。

Helm | 子chart和全局值与子chart和全局值进行交互https://helm.sh/zh/docs/chart_template_guide/subcharts_and_globals/

操作前准备:

        1. 有一台云服务器(已配置成为master结点),确保集群所有pod正常运行。

        2. 已安装下载HELM。

        3. 已创建了一个chart(本文命名同官网,名mychart), 并且删除templates文件夹下的所有。

# 本文把chart安装在根目录下的testchart目录下
[root@k8s-master ~]# cd /testchart
[root@k8s-master testchart]# ls
mychart
[root@k8s-master testchart]# cd mychart 
[root@k8s-master mychart]# ls
charts  Chart.yaml templates  values.yaml

         4. 已在values.yaml文件中插入:

favorite:  drink: coffee  food: pizza pizzaToppings:  - mushrooms  - cheese  - peppers  - onions

本节介绍操作的是子chart:

① 独立;② 无法访问父chart值;③父chart可覆盖子chart;④helm有一全局值使所有chart均可访问。

一 创建子chart(独立性)

到mychart下面的charts目录下创建。

[root@k8s-master mychart]# cd charts
[root@k8s-master charts]# helm create mysubchart   # 创建子chart
Creating mysubchart
[root@k8s-master charts]# ls
mysubchart
[root@k8s-master charts]# cd mysubchart
[root@k8s-master mysubchart]# ls
charts  Chart.yaml  templates  values.yaml
[root@k8s-master mysubchart]# rm -rf templates/*   # 强制删除templates目录下所有文件

把该subchart的values.yaml文件加上:

dessert: cake

其templates/configmap.yaml创建并加入:

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-cfgmap2
data:
  dessert: {{ .Values.dessert }}

命令:

[root@k8s-master mysubchart]# vim values.yaml
[root@k8s-master mysubchart]# vim templates/configmap.yaml

[root@k8s-master testchart]# helm install --generate-name --dry-run --debug mychart/charts/mysubchart
# 可以把--generate-name代替成自命名,--dry-run --debug是测试启动helm的参数,并不真正启动

结果

独立性体现在可以只依靠自己单独运行。

二 父chart覆盖

Actually,mychart is the father of mysubchart, so mychart can push the configuration to mysubchart.

helm install --dry-run -debug mychart --generate-name

After insert mychart/values.yaml:

mysubchart:
  dessert: ice cream

The result is:

重要细节:不会改变mychart/charts/mysubchart/templates/configmap.yaml模板到 .Values.mysubchart.dessert的指向。也就是说模板渲染的过程中,模板指向是不变的,只是在模板引擎传递值的过程中,发送了变化。 

三 全局Chart值

Values.global,可以用来设置全局值,参考官网,我们可以在mychart/values.yaml加:

global:
  salad: caesar

那么这时候这个global内的部分将能被所有的chart访问到。

mychart/templates/configmap.yaml:

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  {{- $files := .Files }}
  {{- range tuple "config1.toml" "config2.toml" "config3.toml" }}
  {{ . }}: |-
        {{ $files.Get . }}
  {{- end }}
  salad: {{ .Values.global.salad }}

mychart/charts/mysubchart/templates/configmap.yaml:

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-cfgmap2
data:
  dessert: {{ .Values.dessert }}
  salad: {{ .Values.global.salad }}

The result:

 

四 共享模板

这里将能体会到为什么_helper.tql的define命名建议把chart名写在命名前,这为共享提供了区分。(此部分官网是没有给具体的yaml事例的,但根据helm模板介绍,小做一下即可)

创建模板,mychart/templates/_helper.tql

{{- define "mychart.app" -}}
app_name: {{ .Chart.Name }}
app_version: "{{ .Chart.Version }}"
{{- end -}}

mychart/values.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
  labels:
{{- include "mychart.labels" . | indent 4 }}
data:
  salad: {{ .Values.global.salad }}

mychart/charts/mysubchart/values.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-cfgmap2
  labels:
{{- include "mychart.labels" . | indent 4 }}
data:
  dessert: {{ .Values.dessert }}
  salad: {{ .Values.global.salad }}

The result is:

 

Copyright © 2010-2022 dgrt.cn 版权所有 |关于我们| 联系方式