Kubernetes 舵图中的多个环境变量

Kubernetes 舵图中的多个环境变量,kubernetes,kubernetes-helm,Kubernetes,Kubernetes Helm,我已经创建了通用的头盔图表。在values.yml文件中,我有一组env变量,需要作为deployment.yaml文件的一部分进行设置 值文件的片段 env: name: ABC value: 123 name: XYZ value: 567 name: PQRS value: 345 在deployment.yaml中,当引用值时,仅设置姓氏/值,其他值将被覆盖。如何读取/设置部署文件中的所有名称/值 这就是我在之前开发的通用舵图中解决它的方法:

我已经创建了通用的头盔图表。在values.yml文件中,我有一组env变量,需要作为deployment.yaml文件的一部分进行设置

值文件的片段

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


在deployment.yaml中,当引用值时,仅设置姓氏/值,其他值将被覆盖。如何读取/设置部署文件中的所有名称/值

这就是我在之前开发的通用舵图中解决它的方法:

          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图表(yaml文件),但kubernetes API将给出一个错误。

我已经反复讨论了如何处理设置敏感环境变量。以下是迄今为止我提出的最简单的解决方案:

模板:

{{- 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
优点:

语法非常简单

钥匙很容易合并。这在创建具有共享机密的cronjob时非常有用。我可以使用以下方法轻松覆盖“全局”值:

  {{- range $key, $secret := merge (default dict .envSecrets) $.Values.globalEnvSecrets }}
缺点:


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

看起来您输入了一个错误,忘记了破折号。如果没有破折号,yaml将把
env
计算为单个对象,而不是列表,并以意外的方式覆盖值

您的
env
应该更像这样:

env:
-姓名:ABC
价值:123
-姓名:XYZ
价值:567
-姓名:PQRS
价值:345
-姓名:秘密
价值来源:
secretKeyRef:
姓名:姓名
钥匙:钥匙

可以帮助可视化yaml的解释方式并调查语法问题。

似乎很有希望,但我遇到了错误(Helm v3.4.1)
Helm template pact broker错误:${applicationName}上的yaml解析错误/templates/deployment.yaml:将yaml转换为JSON时出错:yaml:第44行:在此上下文中不允许映射值使用--debug标志来呈现无效的yaml
这对我来说是一种更好的方式