我创建了常见的舵图。在 values.yml 文件中,我有一组env变量,需要将它们设置为Deployment.yaml文件的一部分。
值文件的片段。
env:
name: ABC
value: 123
name: XYZ
value: 567
name: PQRS
value: 345
在deployment.yaml中,当引用值时,仅设置姓氏/值,其他值将被覆盖。如何读取/设置部署文件中的所有名称/值?
答案 0 :(得分:0)
这是我在以前开发的通用舵图中解决它的方法:
env:
{{- if .Values.env }}
{{- toYaml .Values.env | indent 12 }}
{{- end }}
在values.yaml中:
env:
- name: ENV_VAR
value: value
# or
- name: ENV_VAR
valueFrom:
secretKeyRef:
name: secret_name
key: secret_key
这里要注意的重要一点是缩进。不正确的缩进可能会导致有效的helm-chart(yaml文件),但是kubernetes API会给出错误。
答案 1 :(得分:0)
我已经经历了如何处理设置敏感环境变量的一些迭代。到目前为止,以下是最简单的解决方案:
模板:
{{- 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 }}
值:
env:
ENV_VAR: value
envSecrets:
SECRET_VAR: k8s-secret-name
优点:
语法非常简单
键很容易合并。当创建带有共享机密的CronJobs时,这很有用。我可以使用以下命令轻松覆盖“全局”值:
{{- range $key, $secret := merge (default dict .envSecrets) $.Values.globalEnvSecrets }}
缺点:
这仅适用于与环境变量名称完全匹配的秘密密钥,但这似乎是典型的用例。
答案 2 :(得分:0)
您好像打错了字,忘记了破折号。如果没有破折号,yaml会将env
评估为单个对象而不是列表,并以意想不到的方式覆盖值。
您的env
应该更像这样:
env:
- name: ABC
value: 123
- name: XYZ
value: 567
- name: PQRS
value: 345
- name: SECRET
valueFrom:
secretKeyRef:
name: name
key: key
https://www.convertjson.com/yaml-to-json.htm可以帮助可视化如何解释yaml并调查语法问题。