我对 Helm 模板有疑问。 我正在制作一个用于部署和使用的通用模板:
{{- range $index, $service := .Values.services}}
从values.yaml 文件中枚举参数。 我想在运行时交互式地更改部署版本参数:
helm upgrade ... --set appVersion=<my version>
但是出现了一个问题,我的部署参数位于values.yaml中的服务内部,而appVersion参数不在那里。
values.yaml:
services:
firstservice:
name: firstservice
productCode: product-code
imageRegistryHost: myregistry
...
secondservice:
name: secondservice
productCode: product-code
imageRegistryHost: myregistry
...
部署.yml:
{{- range $index, $service := .Values.services}}
---
...
spec:
containers:
- name: productcontainer
image: {{ $service.imageRegistryHost }}/{{ $service.productCode }}/{{ $service.name }}:{{ $service.appVersion }}
...
{{- end }}
升级部署时如何设置appVersion参数?
对于您所描述的设置,您需要将
appVersion
作为顶级参数包含在 Helm 值中。
{{ $appVersion := .Values.appVersion }}
helm install --set-string appVersion=...
range
循环重新绑定特殊变量.
,因此您需要确保在循环之外设置该变量。
{{ $appVersion := .Values.appVersion }}
{{- range $index, $service := .Values.services}}
image: .../{{ $service.name }}:{{ $appVersion }}
{{- end }}
如果您想允许每个服务版本,但有全局默认值,您可以使用
default
...:{{ $service.appVersion | default $appVersion }}