【问题标题】:helm charting - how to render a same template more than once?helm charting - 如何多次渲染同一个模板?
【发布时间】:2021-06-11 19:13:57
【问题描述】:

我希望创建一个 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 以生成它的多个副本。我怎么做?我已经研究了部分,它似乎没有做我想要的。

【问题讨论】:

    标签: kubernetes-helm go-templates


    【解决方案1】:

    您可以在模板文件中使用任何您想要的模板结构。一个文件可以包含(或生成)多个 YAML 文件(或没有);如果不止一个,您需要确保每个都以 --- 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 }},但没有更多的控制流。这些通常是相当重复的,但同时需要部署的组件集通常是固定的(您通常不会使用值来仅部署应用程序的一部分)。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-26
    • 2017-08-06
    相关资源
    最近更新 更多