• Helm Subcharts And Global Values practical operation


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

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

    操作前准备:

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

            2. 已安装下载HELM。

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

    1. # 本文把chart安装在根目录下的testchart目录下
    2. [root@k8s-master ~]# cd /testchart
    3. [root@k8s-master testchart]# ls
    4. mychart
    5. [root@k8s-master testchart]# cd mychart
    6. [root@k8s-master mychart]# ls
    7. 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目录下创建。

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

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

    dessert: cake

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

    1. apiVersion: v1
    2. kind: ConfigMap
    3. metadata:
    4. name: {{ .Release.Name }}-cfgmap2
    5. data:
    6. dessert: {{ .Values.dessert }}

    命令:

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

    1. [root@k8s-master testchart]# helm install --generate-name --dry-run --debug mychart/charts/mysubchart
    2. # 可以把--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:

    1. mysubchart:
    2. dessert: ice cream

    The result is:

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

    三 全局Chart值

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

    1. global:
    2. salad: caesar

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

    mychart/templates/configmap.yaml:

    1. apiVersion: v1
    2. kind: ConfigMap
    3. metadata:
    4. name: {{ .Release.Name }}-configmap
    5. data:
    6. {{- $files := .Files }}
    7. {{- range tuple "config1.toml" "config2.toml" "config3.toml" }}
    8. {{ . }}: |-
    9. {{ $files.Get . }}
    10. {{- end }}
    11. salad: {{ .Values.global.salad }}

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

    1. apiVersion: v1
    2. kind: ConfigMap
    3. metadata:
    4. name: {{ .Release.Name }}-cfgmap2
    5. data:
    6. dessert: {{ .Values.dessert }}
    7. salad: {{ .Values.global.salad }}

    The result:

    四 共享模板

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

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

    1. {{- define "mychart.app" -}}
    2. app_name: {{ .Chart.Name }}
    3. app_version: "{{ .Chart.Version }}"
    4. {{- end -}}

    mychart/values.yaml

    1. apiVersion: v1
    2. kind: ConfigMap
    3. metadata:
    4. name: {{ .Release.Name }}-configmap
    5. labels:
    6. {{- include "mychart.labels" . | indent 4 }}
    7. data:
    8. salad: {{ .Values.global.salad }}

    mychart/charts/mysubchart/values.yaml

    1. apiVersion: v1
    2. kind: ConfigMap
    3. metadata:
    4. name: {{ .Release.Name }}-cfgmap2
    5. labels:
    6. {{- include "mychart.labels" . | indent 4 }}
    7. data:
    8. dessert: {{ .Values.dessert }}
    9. salad: {{ .Values.global.salad }}

    The result is:

  • 相关阅读:
    【洛谷P1225】黑白棋游戏【DFS】【状压】
    [NOIP2003 普及组]栈
    温湿度监测技术又进化了,这个操作太牛了!
    怎么获取别人店铺的商品呢?
    深入理解数组及其操作
    与面试相关的redis
    Go开始:Go基本元素介绍
    基于SSM的服装商城销售系统(含文档资料)
    酷开系统——酷开科技挖掘下沉市场的重要利器
    【嵌入式百科】002——原码、反码、补码
  • 原文地址:https://blog.csdn.net/lxd_max/article/details/127759694