Kubernetes使用Helm 3 Go模板为每个环境提供多个环境变量

时间:2020-02-12 17:26:38

标签: kubernetes kubernetes-helm

我在每个阶段和生产环境中有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"

1 个答案:

答案 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