掌舵图 - 如何多次渲染同一个模板?
helm charting - how to render a same template more than once?
我希望创建一个 helm chart 来部署具有多个不同 pods 的应用程序(因此有多个部署清单)。这是图表的结构:
├── Chart.yaml
├── templates
│ ├── NOTES.txt
│ ├── _helpers.yaml
│ ├── comp-1
│ │ ├── comp-1-deployment.yaml
│ │ ├── comp-1-ingress.yaml
│ │ └── comp-1-service.yaml
│ ├── comp-2
│ │ ├── comp-2-deployment.yaml
│ │ └── comp-2-service.yaml
│ ├── comp-3
│ │ ├── comp-3-deployment.yaml
│ │ └── comp-3-service.yaml
└── values.yaml
我意识到所有组件的模板看起来都一样,所以我想重构以将模板缩减为:
├── Chart.yaml
├── templates
│ ├── NOTES.txt
│ ├── _helpers.yaml
│ ├── comp
│ │ ├── comp-deployment.yaml
│ │ ├── comp-ingress.yaml
│ │ └── comp-service.yaml
└── values.yaml
并使用 values.yaml
中的值多次渲染 comp
以生成它的多个副本。我怎么做?我查看了部分内容,它似乎不符合我的要求。
您可以在模板文件中使用任何您想要的模板结构。一个文件可以包含(或生成)多个 YAML 文件(或none);如果它不止一个,您需要确保每个都以 ---
YAML 文档开始标记开始。
如果你想根据值生成多个Deployment,比如你可以指定
{{ $top := . -}}
{{ range .Values.components -}}
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ $top.Release.Name }}-{{ .name }}
...
{{ end -}}
这里的一个技巧是,在 range
循环内部,特殊变量 .
是循环迭代器,隐藏了正常的 Helm 顶级对象。我倾向于将 .
的原始值保存在一个变量中,或者特殊的模板变量 $
通常也可以工作。
确保仔细检查 -
空格控制:如果 ---
不在自己的一行上,这将不起作用。您可以使用 helm template
.
查看模板生成的内容,而无需将其提交到集群
在我在 GitHub 上查看的模板中,“普通样式”似乎是一个文件的 Kubernetes 资源,可能在顶层用 {{ if }}...{{ end }}
隐藏但没有更多控制流量比那个。这些通常是相当重复的,但同时需要部署的一组组件通常是固定的(您通常不会使用值来仅部署应用程序的一部分)。
我希望创建一个 helm chart 来部署具有多个不同 pods 的应用程序(因此有多个部署清单)。这是图表的结构:
├── Chart.yaml
├── templates
│ ├── NOTES.txt
│ ├── _helpers.yaml
│ ├── comp-1
│ │ ├── comp-1-deployment.yaml
│ │ ├── comp-1-ingress.yaml
│ │ └── comp-1-service.yaml
│ ├── comp-2
│ │ ├── comp-2-deployment.yaml
│ │ └── comp-2-service.yaml
│ ├── comp-3
│ │ ├── comp-3-deployment.yaml
│ │ └── comp-3-service.yaml
└── values.yaml
我意识到所有组件的模板看起来都一样,所以我想重构以将模板缩减为:
├── Chart.yaml
├── templates
│ ├── NOTES.txt
│ ├── _helpers.yaml
│ ├── comp
│ │ ├── comp-deployment.yaml
│ │ ├── comp-ingress.yaml
│ │ └── comp-service.yaml
└── values.yaml
并使用 values.yaml
中的值多次渲染 comp
以生成它的多个副本。我怎么做?我查看了部分内容,它似乎不符合我的要求。
您可以在模板文件中使用任何您想要的模板结构。一个文件可以包含(或生成)多个 YAML 文件(或none);如果它不止一个,您需要确保每个都以 ---
YAML 文档开始标记开始。
如果你想根据值生成多个Deployment,比如你可以指定
{{ $top := . -}}
{{ range .Values.components -}}
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ $top.Release.Name }}-{{ .name }}
...
{{ end -}}
这里的一个技巧是,在 range
循环内部,特殊变量 .
是循环迭代器,隐藏了正常的 Helm 顶级对象。我倾向于将 .
的原始值保存在一个变量中,或者特殊的模板变量 $
通常也可以工作。
确保仔细检查 -
空格控制:如果 ---
不在自己的一行上,这将不起作用。您可以使用 helm template
.
在我在 GitHub 上查看的模板中,“普通样式”似乎是一个文件的 Kubernetes 资源,可能在顶层用 {{ if }}...{{ end }}
隐藏但没有更多控制流量比那个。这些通常是相当重复的,但同时需要部署的一组组件通常是固定的(您通常不会使用值来仅部署应用程序的一部分)。