Helm YAML 模板语法详解(values.yaml + templates)

Helm 的 YAML 语法基于 Kubernetes 的 YAML 配置文件,但在此基础上引入了 Go Template 模板语法,使得配置更灵活、参数化程度更高。以下是对 Helm 的 YAML 文件结构和语法的详细介绍。

一、Helm YAML 文件分类

Helm Chart 中的 YAML 文件主要分为两类:

文件说明
values.yaml参数默认值,供模板引用
templates/*.yamlKubernetes 配置模板,使用 Go Template 语法生成

两者结合,即能复用 Kubernetes 通用配置,如:安装 nginx 集群,又能实现一些个性化配置。


二、values.yaml 的语法(配置参数)

这个文件结构就是普通的 YAML,没有模板语法,通常定义变量供模板使用。

📌 示例:

replicaCount: 3

image:
  repository: nginx
  tag: "1.24"
  pullPolicy: IfNotPresent

service:
  type: ClusterIP
  port: 80

resources:
  limits:
    cpu: 100m
    memory: 128Mi

三、templates/*.yaml 中的模板语法(Go Template)

templates/ 下的 YAML 文件中,可以使用 Go Template 语法,主要有以下几类写法:


✅ 1. 变量引用

replicas: {{ .Values.replicaCount }}
  • .Values 代表 values.yaml 中的变量
  • 支持多层嵌套,例如:
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"

✅ 2. 内置对象

对象名说明
.Release.Name当前 release 名称
.Chart.NameChart 名称
.Valuesvalues.yaml 中的变量值
.Capabilities当前 Kubernetes 能力信息
.Files引用其他文件(如 config 文件)

✅ 3. 条件判断(if, else, end

{{- if .Values.service.enabled }}
apiVersion: v1
kind: Service
...
{{- end }}
{{- if .Values.image.pullSecrets }}
imagePullSecrets:
  - name: {{ .Values.image.pullSecrets }}
{{- else }}
imagePullSecrets: []
{{- end }}

✅ 4. 循环(range

适用于列表或字典遍历。

env:
{{- range $key, $val := .Values.env }}
  - name: {{ $key }}
    value: "{{ $val }}"
{{- end }}

✅ 5. 模板注释

{{/* 这是一个注释,不会渲染出来 */}}

✅ 6. 默认值 (default 函数)

replicas: {{ .Values.replicaCount | default 1 }}

如果 .Values.replicaCount 未设置,则使用默认值 1


✅ 7. include 与 define(模块化模板)

可以将某些通用片段提取为可复用函数:

# _helpers.tpl
{{- define "mychart.fullname" -}}
{{ .Release.Name }}-{{ .Chart.Name }}
{{- end }}
# deployment.yaml
name: {{ include "mychart.fullname" . }}

✅ 8. 格式控制(- 用于去除空格)

{{- if ... }}  # 左侧无空格
{{ ... -}}     # 右侧无空格

四、实战例子:Deployment 模板

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ include "mychart.fullname" . }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app: {{ include "mychart.name" . }}
  template:
    metadata:
      labels:
        app: {{ include "mychart.name" . }}
    spec:
      containers:
        - name: {{ .Chart.Name }}
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          ports:
            - containerPort: {{ .Values.service.port }}

五、调试推荐命令

命令说明
helm template渲染模板但不部署
helm lint语法检查
helm install --dry-run --debug预览安装并输出调试信息

六、YAML 模板技巧总结

场景模板技巧
字符拼接{{ print "a" .Values.xxx }}include
默认值处理`{{ .Values.key
控制缩进配合 nindent, indent, trim
文件读取{{ .Files.Get "files/config.conf" }}
标签自动生成提取公共标签逻辑封装到 _helpers.tpl

七、学习资源推荐

类型名称
官方文档https://helm.sh/docs
中文教程https://helm.sh/zh/docs/
可视化工具Kubeapps, Monokle, Lens
Chart 示例Bitnami Charts: https://bitnami.com/stacks/helm
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值