kubernetes 具有单个值文件的多个部署文件

ldioqlga  于 2022-11-28  发布在  Kubernetes
关注(0)|答案(1)|浏览(170)

我是Helm的新手,我想从一个部署YAML文件在k8中创建多个部署。我在deployment中使用了占位符。yaml like

metadata:
  name: job-{{ .Values.app.ujn }}
...
replicas: {{ .Values.app.replicas }}

和我的价值观yaml看起来像

app:
  replicas: 10
  ujn: 1
---
app:
  replicas: 20
  ujn: 2
---
app:
  replicas: 30
  ujn: 3

用例是这样的:我想创建许多配置相似的部署文件,但一些参数发生了变化,我也不想为每个部署创建多个值文件。我可以像上面的例子那样,从一个values.yaml创建多个文件吗?
还有一个后续问题,如果我在群集上部署此图表,并且如果我在下次部署中修改部署数量,helm会删除旧的图表还是必须手动删除这些图表?

zd287kbt

zd287kbt1#

您使用的语法将多个YAML * 文档 * 放到一个文件中。工具很难很好地支持这种语法(尽管kubectl apply和Helm模板的输出确实支持它);最常见的情况是工具将只读取第一个文档。
您可以将一个YAML列表放入值文件中,而不必使用多个文档。

# values.yaml
apps:
  - name: '1'
    replicas: 10
  - name: '2'
    replicas: 20
  - name: '3'
    replicas: 30

然后,在模板文件中,可以使用range循环来循环这个文件。因此您需要确保每个模板都以YAML文档起始标记开头。级别Helm对象(如.Values.Release),或者调用帮助器模板。

{{- range $app := .Values.apps -}}
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ $.Release.Name }}-job-{{ $app.name }}
  # labels: {{- include "mychart.labels" $ | nindent 4 }}
spec:
  replicas: {{ $app.replicas }}
  template: { ... }
{{ end }}

相关问题