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 中,当引用值时,只会设置最后一个名称/值,其他值会被覆盖。如何读取/设置部署文件中的所有名称/值?
我已经对如何处理设置敏感环境变量进行了几次迭代。像下面这样的东西是迄今为止我想出的最简单的解决方案:
模板:
{{- 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)
缺点:
这仅适用于与环境变量名称完全匹配的密钥,但这似乎是典型的用例。
这就是我在之前开发的通用 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 会给出错误。
| 归档时间: |
|
| 查看次数: |
5995 次 |
| 最近记录: |