如何使用单个Helm模板为多个同类应用生成部署并遍历配置
你可以直接使用Helm内置的range遍历函数实现统一模板复用,无需维护多份独立模板,具体实现如下:
核心写法
通过range遍历Values.applications下的所有子应用配置,遍历过程中可以直接获取每个应用的配置字段:
{{- range $appName, $appConf := .Values.applications }} # 每个应用的资源配置都写在这个range块内,会自动为app1、app2各生成一份 spec: containers: - name: {{ $appConf.containerName }} env: - name: LOG_LEVEL value: "{{ $appConf.logLevel }}" # 其他配置按需引用$appConf下的字段即可,比如副本数:{{ $appConf.replicaCount }} {{- end }}
完整示例(生成多应用独立Deployment)
如果需要为每个应用生成独立的Deployment资源,完整模板写法如下:
{{- range $appName, $appConf := .Values.applications }} --- apiVersion: apps/v1 kind: Deployment metadata: name: {{ $appName }}-deploy spec: replicas: {{ $appConf.replicaCount }} selector: matchLabels: app: {{ $appConf.containerName }} template: metadata: labels: app: {{ $appConf.containerName }} spec: containers: - name: {{ $appConf.containerName }} image: your-custom-image:tag env: - name: LOG_LEVEL value: "{{ $appConf.logLevel }}" - name: SERVICE_QUEUE value: "{{ $appConf.queue }}" {{- end }}
说明
range后的两个变量$appName对应applications下的键(即app1、app2),$appConf对应每个应用的配置对象- 块内的
---是YAML多文档分隔符,用于分隔多个独立的资源清单 - 语法里
{{-的横杠用于删除渲染时产生的多余空行,避免YAML格式错误
后续如果要新增应用,只需要在values.yaml的applications下新增对应配置即可,模板无需任何修改。
内容的提问来源于stack exchange,提问作者gbt
相关产品推荐
相关产品推荐

