kubernetes——Helm(六)

一 、子chart和全局值

到目前为止,我们只使用了一个chart。但chart可以使用依赖,称为 子chart,且有自己的值和模板。 该章节我们会创建一个子chart并能看到访问模板中的值的不同方式。

子chart的重要细节:

  1. 子chart被认为是“独立的”,意味着子chart从来不会显示依赖它的父chart。
  2. 因此,子chart无法访问父chart的值。
  3. 父chart可以覆盖子chart的值
  4. Helm有一个 全局值 的概念,所有的chart都可以访问。

二、子chart添加

2.1 创建子chart

为mychart/中添加一个子chart。

cd mychart/charts
helm create mysubchart
rm -rf mysubchart/templates/*

和以前一样,删除所有的基本模板,然后从头开始

2.2 在子chart中添加值和模板

mysubchart创建一个简单的模板和values文件。mychart/charts/mysubchart应该已经有一个values.yaml。 设置如下:

dessert: cake

下一步,在mychart/charts/mysubchart/templates/configmap.yaml中创建一个新的配置映射模板:

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

因为每个子chart都是 独立的chart,可以单独测试mysubchart

[root@master ~]# vim mychart/charts/mysubchart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-cfgmap2
data:
  dessert: {{ .Values.dessert }}
~                                

[root@master ~]# helm install --dry-run goodly-guppy ./mychart/charts/mysubchart/
NAME: goodly-guppy
LAST DEPLOYED: Fri Jul  5 21:36:50 2024
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
HOOKS:
MANIFEST:
---
# Source: mysubchart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: goodly-guppy-cfgmap2
data:
  dessert: cake

2.3 用父chart的值来覆盖

原始chart,mychart现在是mysubchart的 。这种关系是基于mysubchartmychart/charts中这一事实。

因为mychart是父级,可以在mychart指定配置并将配置推送到mysubchart。比如可以修改mychart/values.yaml如下:

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

mysubchart:
  dessert: ice cream

注意最后两行,在mysubchart中的所有指令会被发送到mysubchartchart中。因此如果运行helm install --dry-run --debug mychart,会看到一项mysubchart的配置:

[root@master ~]# helm install --dry-run goodly-guppy ./mychart               NAME: goodly-guppy
LAST DEPLOYED: Fri Jul  5 21:40:15 2024
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
HOOKS:
MANIFEST:
---
# Source: mychart/charts/mysubchart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: goodly-guppy-cfgmap2
data:
  dessert: ice cream
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: goodly-guppy-configmap
data:
  config1.yaml: |-
        message = Hello from config1

  config2.yaml: |-
        message = This is config2

  config3.yaml: |-
        message = This is config3

子chart的值已经被顶层的值覆盖了。

这里需要注意个重要细节。我们不会改变mychart/charts/mysubchart/templates/configmap.yaml模板到 .Values.mysubchart.dessert的指向。从模板的角度来看,值依然是在.Values.dessert。当模板引擎传递值时,会设置范围。 因此对于mysubchart模板,.Values中只提供专门用于mysubchart的值。

2.4 全局Chart值

全局值是使用完全一样的名字在所有的chart及子chart中都能访问的值。全局变量需要显式声明。不能将现有的非全局值作为全局值使用。

这些值数据类型有个保留部分叫Values.global,可以用来设置全局值。在mychart/values.yaml文件中设置一个值如下:

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

mysubchart:
  dessert: ice cream

global:
  salad: caesar

因为全局的工作方式,mychart/templates/configmap.yamlmysubchart/templates/configmap.yaml 应该都能以{{ .Values.global.salad }}进行访问。

mychart/templates/configmap.yaml:

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

mysubchart/templates/configmap.yaml:

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

预安装,两个输出会看到相同的值

[root@master ~]# helm install --dry-run goodly-guppy ./mychart          
NAME: goodly-guppy
LAST DEPLOYED: Fri Jul  5 21:48:06 2024
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
HOOKS:
MANIFEST:
---
# Source: mychart/charts/mysubchart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: goodly-guppy-cfgmap2
data:
  dessert: ice cream
  salad: caesar
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: goodly-guppy-configmap
data:
  salad: caesar

2.5 与子chart共享模板

父chart和子chart可以共享模板。子chart中的模板父chart可以用,父chart定义的模板子chart也可以用

在任意chart中定义的块在其他chart中也是可用的。

定义一个简单的模板:

{{- define "labels" }}from: mychart{{ end }}


[root@master ~]# vim mychart/charts/mysubchart/templates/_helpers.tpl 
{{- define "labelssub" }}
from: mysubchart
{{ end }}

[root@master ~]# vim mychart/templates/_helpers.tpl
{{- define "labels" }}
from: mycahart
{{ end }}

[root@master ~]# vim mychart/charts/mysubchart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-cfgmap2
  {{- include "labels" . | indent 2 }}
data:
  dessert: {{ .Values.dessert }}
  salad: {{ .Values.global.salad }}

[root@master ~]# vim mychart/templates/configmap.yaml  
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
  label:
  {{- include "labelssub" . | indent 2 }}
data:
  salad: {{ .Values.global.salad }}
~       [root@master ~]# helm install --dry-run goodly-guppy ./mychart               
NAME: goodly-guppy
LAST DEPLOYED: Sat Jul  6 15:09:19 2024
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
HOOKS:
MANIFEST:
---
# Source: mychart/charts/mysubchart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: goodly-guppy-cfgmap2  
  from: mycahart
  
data:
  dessert: ice cream
  salad: caesar
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: goodly-guppy-configmap
  label:  
  from: mysubchart
  
data:
  salad: caesar                            

当chart开发者在include 和 template 之间选择时,使用include的一个优势是include可以动态引用模板:

{{ include $mytemplate }}

三、Helm命令行

命令太多网址在这里乐意自己查阅学习相关命令,https://helm.sh/zh/docs/helm/helm/

  • 14
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叽叽喳喳323

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值