Helm 使用一种基于 Go 语言模板引擎的语法来创建可扩展和可复用的 Kubernetes 配置模板。在 Helm Chart 中,模板通常位于 templates/
目录下,用于生成最终的 Kubernetes 对象(例如 Deployment、Service、ConfigMap 等)的 YAML 文件。
以下是一些 Helm 模板的基本语法元素:
1. 变量替换 ({{ . }}
)
- 在模板中可以直接引用
values.yaml
或通过--set
参数传入的值:
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}-deployment
spec:
replicas: {{ .Values.replicaCount }}
这里的 .Release.Name
和 .Values.replicaCount
分别代表 release 的名称(由 Helm 自动生成或指定)和 values 文件中的 replicaCount
值。
2. 控制结构
-
条件语句:
{{ if eq .Values.enableService true }} kind: Service {{ end }}
-
循环:
{{ range $index, $value := .Values.envVars }} - name: {{ $value.name }} value: {{ $value.value }} {{- end }}
3. 函数调用
Helm 提供了大量的内建函数,例如:
-
字符串操作:
key: {{ quote .Values.someValue }} # 或者 key: {{ default "defaultValue" .Values.optionalValue }}
-
转换类型:
replicaCount: {{ int .Values.replicas | default 1 }}
-
调试输出:
{{/* This is a comment */}} {{- printf "%s-%s" .Release.Name "suffix" | upper }}
4. 注释
Helm 模板中的注释是以 {{- /* ... */ -}}
形式存在的。
5. 引用全局模板
可以引入 _helpers.tpl
文件中的模板片段:
{{- include "common.labels" . | nindent 4 }}
6. 继承和组合
可以通过 requirements.yaml
文件管理 Chart 之间的依赖关系,并在模板中引用父或子 Chart 的值。
以上只是 Helm 模板语法的一部分,实际上它的功能更加强大和灵活,允许开发者精细地控制和定制 Kubernetes 应用的部署过程。通过 Helm,不仅可以简化配置管理,还可以更好地组织和分享 Kubernetes 应用的最佳实践。