Kubernetes helm 头盔制图-如何多次渲染同一模板?

Kubernetes helm 头盔制图-如何多次渲染同一模板?,kubernetes-helm,go-templates,Kubernetes Helm,Go Templates,我希望创建一个helm图表来部署一个具有多个不同POD(因此有多个部署清单)的应用程序。以下是图表的结构: ├── Chart.yaml ├── templates │   ├── NOTES.txt │   ├── _helpers.yaml │   ├── comp-1 │   │   ├── comp-1-deployment.yaml │   │   ├── comp-1-ingress.yaml │   │   └── comp-1-service.yaml │   ├── comp-

我希望创建一个helm图表来部署一个具有多个不同POD(因此有多个部署清单)的应用程序。以下是图表的结构:

├── 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文件(或无);如果不止一个,您需要确保每个都以
--
YAML文档开始标记开始

例如,如果希望基于值生成多个部署,可以指定

{{$top:=.-}
{{range.Values.components-}
---
apiVersion:apps/v1
种类:部署
元数据:
名称:{{$top.Release.name}}-{{.name}
...
{{end-}}
这里的一个技巧是,在
范围
循环中,特殊变量
是循环迭代器,而普通的Helm顶级对象是隐藏的。我倾向于将
的原始值保存在变量中,或者特殊的模板变量
$
通常也会起作用

确保仔细检查
-
空白控件:如果
-
不在自己的行上,则此操作将不起作用。您可以使用
helm-template
查看模板生成的内容,而无需将其提交到集群


在我在GitHub上看到的模板中,“普通样式”似乎是一个文件的Kubernetes资源,可能在顶层用
{{if}}…{{end}}
隐藏,但没有更多的控制流。这些通常是相当重复的,但同时需要部署的组件集通常是固定的(您通常不会使用值仅部署应用程序的一部分)。

我刚刚注意到我的Q可能是的重复,您也回答了这一点。