我在每个阶段和生产环境中有2个不同的values.yaml文件,例如values.dev.yaml> values.prod.yaml,并与Helm 3一起使用。我想学习如何在每个环境中传递环境变量的最佳实践。例如,我们需要为NODE_ENV变量设置不同的参数。
-我应该在运行带有helm upgrade/install
标志的--set
命令时,按如下所示将变量指定为硬编码并传递环境变量吗?
-使用go模板执行此操作的正确方法是什么?我们可以指定一些{{.Values.node_env.value}},然后将此env值传递到值yaml中,而仅使用-f values.yaml标志吗?
containers:
- name: {{ .Chart.Name }}
securityContext:
{{- toYaml .Values.securityContext | nindent 12 }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- name: http
containerPort: 8080
protocol: TCP
resources:
{{- toYaml .Values.resources | nindent 12 }}
env:
- name: "NODE_ENV"
value: "stage"
- name: "NODE_ENV"
value: "production"
答案 0 :(得分:3)
如果每个环境有一个价值文件(我不清楚这是您的情况),例如values.prod.yaml(针对prod)和values.dev.yaml(针对dev),那么您的庙宇可以看起来这样。
这将导致模板在您的值{dev / prod} .yaml中寻找extraEnv:
,并遍历该部分中的所有键/值。
env:
{{- range $key, $value := .Values.extraEnv }}
- name: {{ $key }}
value: {{ $value | quote }}
{{- end }}
在您的 values.dev.yaml 文件中,添加所有特定于此环境的KEY: values
。请注意,您可以在此处拥有多个键值,所有键值都将被加载。在这种情况下,我们有NODE_ENV,ANOTHER_KEY,YET_ANOTHER_KEY-所有这些都将被加载。
extraEnv:
NODE_ENV: stage
ANOTHER_KEY: value
YET_ANOTHER_KEY: value
您可以在 values.prod.yaml 中指定相同的多个KEY: value
对,并将全部加载。
extraEnv:
NODE_ENV: production
ANOTHER_KEY: value