如何在 helm chart 中使用同名的多个变量?

how to use multiple variables with same name in helm chart?

我有 helm chart 需要像这样定义多个相同的变量名

      containers:
      - name: APP_NAME
        image: CONTAINER_IMAGE
        envFrom:
        - secretRef:
            name: secret1
        - secretRef:
            name: secret2
        - configMapRef:
            name: configmap1
        - secretRef:
            name: secret3

我添加了这样的 nonproduction.yaml 图表

envFrom:
  secretRef:
    name1: secret1
  secretRef:
    name2: secret2
  configmapRef:
    name3: configmap1
  secretRef:
    name4: secret3

并定义 deployment.yaml

      containers:
      - name: {{ .Values.appName }}
        image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
        envFrom:
        - secretRef:
            name: {{ .Values.envFrom.secretRef.name1 }}
        - secretRef:
            name: {{ .Values.envFrom.secretRef.name2 }}
        - configMapRef:
            name: {{ .Values.envFrom.configmapRef.name3 }}
        - secretRef:
            name: {{ .Values.envFrom.secretRef.name4 }}

但是它在终端上复制了键,我如何在不更改名称的情况下在 helm chart 上使用相同的名称变量?

编辑:添加数字,这样我们就不会被 'name'

弄晕了

您可以一次调用所有秘密,而不是调用单独的秘密和配置映射。

  env:
    {{- toYaml .Values.envs | nindent 12 }}
  envFrom:
    {{- toYaml .Values.envFrom | nindent 12 }}

YAML 支持一组基本数据结构,例如 JSON(事实上,有效的 JSON 文件通常是有效的 YAML)。在 YAML 的术语中,有 scalars(字符串、数字、布尔值)、sequences(列表、数组)和 mappings(字典)。

在您显示的 values.yaml 文件中, envFrom: 是一个映射,但其中三个键是相同的;你说 属性 secretRef 有映射值 {name1: value1},而且 属性 secretRef 有映射值 {name2: value2},这就是 Helm 感到困惑的地方。

您可以将 values.yaml 文件改为 YAML 序列,方法是在每个项目前添加一个连字符 -

envFrom:
  - secretRef:
      name1: secret1
  - secretRef:
      name2: secret2
  - et: cetera
# ^ add "-" before each item

此时您可以使用 中的方法将此结构按原样复制到 YAML 输出中,因为序列形式与 Kubernetes 在这里期望的相匹配。

envFrom: {{- toYaml .Values.envFrom | nindent 12 }}

如果您确实需要在此处遍历各个值,因为它现在是一个序列,您不能通过名称引用单个项目(并且在 Helm 中查找一系列映射中的项目并不容易一些 属性) 但只能通过索引或通过 range 迭代关键字。