Helm 模板函数深度解析与应用

引言

Helm 是Kubernetes的包管理工具,它通过模板函数来动态生成部署配置文件。掌握Helm模板函数对于运维工程师和开发者来说至关重要,它们可以极大地提高工作效率并减少错误。

quote函数:YAML字符串转义

quote函数用于将字符串参数转义并用双引号括起来,确保在YAML文件中作为有效值。这对于包含特殊字符或需要特殊格式的字符串尤为有用。

示例

考虑一个ConfigMap,我们需要确保键的值是YAML兼容的字符串:

[root@master ~]# cat python-flask/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  myvalue: "Hello World"
  drink: {{ .Values.favorite.drink }}
  food: {{ .Values.favorite.food }}
  drink: {{ quote .Values.favorite.drink }}
  food: {{ quote .Values.favorite.food }}

结果

[root@master ~]# helm install geared-marsupi ./python-flask --dry-run --debug

# Source: python-flask/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: geared-marsupi-configmap
data:
  myvalue: "Hello World"
  drink: coffee
  food: pizza
  drink: "coffee"   # 使用了quote函数的结果带双引号
  food: "pizza"

管道符:函数链式处理

管道符|允许我们将一个值作为多个函数的输入,实现链式操作。

示例

将字符串转换为大写并用双引号括起来:

[root@master ~]# cat python-flask/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  myvalue: "Hello World"
  drink: {{ .Values.favorite.drink | quote }}
  food: {{ .Values.favorite.food | upper | quote }}

结果

[root@master ~]# helm install geared-marsupi ./python-flask --dry-run --debug

# Source: python-flask/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: geared-marsupi-configmap
data:
  myvalue: "Hello World"
  drink: "coffee"
  food: "PIZZA"

repeat函数:字符串重复

repeat函数将一个字符串重复指定次数。

示例

创建一个重复字符串的ConfigMap键:

[root@master ~]# cat python-flask/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  myvalue: "Hello World"
  drink: {{ .Values.favorite.drink | repeat 5 | quote }}
  food: {{ .Values.favorite.food | upper | quote }}

结果

[root@master ~]# helm install geared-marsupi ./python-flask --dry-run --debug

# Source: python-flask/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: geared-marsupi-configmap
data:
  myvalue: "Hello World"
  drink: "coffeecoffeecoffeecoffeecoffee"
  food: "PIZZA"

default函数:设置默认值

default函数在值缺失或为空时提供一个备用值。

示例

为未指定的drink提供一个默认值:

[root@master python-flask]# vim values.yaml
favorite:
  #drink: coffee # 注释一个参数
  food: pizza
  
[root@master ~]# cat python-flask/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  myvalue: "Hello World"
  drink: {{ .Values.favorite.drink | default "tea" | quote }}
  food: {{ .Values.favorite.food | upper | quote }}

结果

# Source: python-flask/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: geared-marsupi-configmap
data:
  myvalue: "Hello World"
  drink: "tea"
  food: "PIZZA"

Lookup函数:集群资源查找

lookup函数在运行的Kubernetes集群中查找资源,如Pods、Namespaces等。

参数组合:

命令Lookup 函数
kubectl get pod mypod -n mynamespacelookup “v1” “Pod” “mynamespace” “mypod”
kubectl get pods -n mynamespacelookup “v1” “Pod” “mynamespace” “”
kubectl get pods --all-namespaceslookup “v1” “Pod” “” “”
kubectl get namespace mynamespacelookup “v1” “Namespace” “” “mynamespace”
kubectl get namespaceslookup “v1” “Namespace” “” “”

示例与应用

检查default命名空间是否存在,然后根据结果设置ConfigMap的值:

[root@master ~]# cat python-flask/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  myvalue: "Hello World"
  {{ $defaultNamespaceExists := false }}
  {{- range $namespace := (lookup "v1" "Namespace" "" "").items }}
    {{- if eq $namespace.metadata.name "default" }}
      {{- $defaultNamespaceExists = true }}
    {{- end }}
  {{- end }}
  {{- if $defaultNamespaceExists }}
  drink: coffee
  {{- else }}
  drink: tea
  {{- end }}

结果

[root@master helm install geared-marsupi ./python-flask
[root@master ~]# kubectl get cm geared-marsupi-configmap -o yaml
apiVersion: v1
data:
  drink: coffee
  myvalue: Hello World
kind: ConfigMap

注意事项
lookup函数在--dry-run模式下不会执行,因此无法查看其效果。但可以通过安装chart后使用kubectl查看实际渲染效果。

其他函数

Helm提供了丰富的模板函数,用于字符串处理、类型转换、列表操作等。更多函数的详细用法可以参考Helm Template函数速查表

结语

通过上述示例,我们可以看到Helm模板函数在Kubernetes配置管理中的强大能力。掌握这些函数不仅能够提升我们的工作效率,还能帮助我们编写出更加灵活和动态的配置文件,以适应多变的部署需求。

  • 26
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值