Helm 图表中的多个环境变量

Sun*_*ula 4 kubernetes kubernetes-helm

我已经创建了通用的舵图。在values.yml文件中,我有一组需要设置为 deployment.yaml 文件一部分的环境变量。

值文件的片段。

env:
  name: ABC
  value: 123
  name: XYZ
  value: 567
  name:  PQRS
  value: 345

Run Code Online (Sandbox Code Playgroud)

在 deployment.yaml 中,当引用值时,只会设置最后一个名称/值,其他值会被覆盖。如何读取/设置部署文件中的所有名称/值?

Sun*_*ula 8

我已经对如何处理设置敏感环境变量进行了几次迭代。像下面这样的东西是迄今为止我想出的最简单的解决方案:

模板:

{{- if or $.Values.env $.Values.envSecrets }}
env:
  {{- range $key, $value := $.Values.env }}
  - name: {{ $key }}
    value: {{ $value | quote }}
  {{- end }}
  {{- range $key, $secret := $.Values.envSecrets }}
  - name: {{ $key }}
    valueFrom:
      secretKeyRef:
        name: {{ $secret }}
        key: {{ $key | quote }}
  {{- end }}
{{- end }}
Run Code Online (Sandbox Code Playgroud)

价值观:

env:
  ENV_VAR: value
envSecrets:
  SECRET_VAR: k8s-secret-name
Run Code Online (Sandbox Code Playgroud)

优点:

语法非常简单

键很容易合并。这在创建具有共享机密的 CronJobs 时很有用。我能够使用以下方法轻松覆盖“全局”值:

  {{- range $key, $secret := merge (default dict .envSecrets) $.Values.globalEnvSecrets }}
Run Code Online (Sandbox Code Playgroud)

缺点:

这仅适用于与环境变量名称完全匹配的密钥,但这似乎是典型的用例。


Blo*_*je5 4

这就是我在之前开发的通用 helm-chart 中解决该问题的方法:

          env:
            {{- if .Values.env }}
            {{- toYaml .Values.env | indent 12 }}
            {{- end }}
Run Code Online (Sandbox Code Playgroud)

在values.yaml中:

env:
- name: ENV_VAR
  value: value
# or
- name: ENV_VAR
  valueFrom:
    secretKeyRef:
      name: secret_name
      key: secret_key
Run Code Online (Sandbox Code Playgroud)

这里需要注意的一个重要事项是缩进。不正确的缩进可能会导致生成有效的 helm-chart(yaml 文件),但 kubernetes API 会给出错误。