You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从values.yaml的列表结构中填充deployment.yaml部署值?

解决K8s Deployment中嵌套列表配置的环境变量注入问题

原始配置(values.yaml)

S3Catalogs:
  Catalogs:
    - CatalogName: BotVoice
      Url: "http://sandbox5.*.com"
    - CatalogName: WrongVoice
      Url: "http://sandbox5.*.com"

问题场景

需要将上述嵌套列表结构的配置注入到Deployment的环境变量中,但尝试过索引(如[0])、扁平键名(如S3Catalogs__Catalogs)等写法均无法生效,比如以下写法完全不起作用:

- name: S3Catalogs__Catalogs
  value: "{{ .Values.S3Catalogs.Catalogs  }}"
- name: S3Catalogs__Catalogs__Url
  value: "{{ .Values.S3Catalogs.Catalogs.Url}}"

可行解决方案

方案1:将列表序列化为JSON字符串注入

如果你的应用程序支持解析JSON格式的环境变量,直接把整个Catalogs列表序列化为JSON:

env:
  - name: S3_CATALOGS
    value: "{{ toJson .Values.S3Catalogs.Catalogs }}"

注入后环境变量的值会是标准JSON结构:

[{"CatalogName":"BotVoice","Url":"http://sandbox5.*.com"},{"CatalogName":"WrongVoice","Url":"http://sandbox5.*.com"}]

方案2:遍历列表生成独立环境变量

如果需要为每个Catalog单独生成环境变量,用Helm的range循环遍历列表项:

env:
{{- range $index, $catalog := .Values.S3Catalogs.Catalogs }}
  - name: S3_CATALOG_{{$index}}_NAME
    value: "{{ $catalog.CatalogName }}"
  - name: S3_CATALOG_{{$index}}_URL
    value: "{{ $catalog.Url }}"
{{- end }}

渲染后会生成对应每个列表项的环境变量:

env:
  - name: S3_CATALOG_0_NAME
    value: "BotVoice"
  - name: S3_CATALOG_0_URL
    value: "http://sandbox5.*.com"
  - name: S3_CATALOG_1_NAME
    value: "WrongVoice"
  - name: S3_CATALOG_1_URL
    value: "http://sandbox5.*.com"

原写法失效原因

  • 直接引用.Values.S3Catalogs.Catalogs会输出Go模板默认的列表字符串格式(类似[{BotVoice http://sandbox5.*.com} {WrongVoice http://sandbox5.*.com}]),不是应用能识别的有效结构。
  • .Values.S3Catalogs.Catalogs.Url是错误语法:Catalogs是列表类型,必须通过索引(如.Values.S3Catalogs.Catalogs[0].Url)或遍历才能访问内部字段,直接访问会返回空值。

内容的提问来源于stack exchange,提问作者Iceforest

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 18:33:30