Helm Install/Upgrade通过CLI为数组元素设置值的方法咨询
Helm Chart 动态values配置问题
当前使用的第三方Chart核心结构
vendor: tier: - name: tier1 valueToSet: TBD - name: tier2 valueToSet: TBD - name: tier3 valueToSet: TBD customValueOnlyInThisTier: TBD - name: tierN valueToSet: TBD
问题背景
受厂商限制,每次执行install/upgrade操作时,valueToSet和customValueOnlyInThisTier字段的值都需要动态拉取。由于values.yaml文件体量极大,希望避免每次升级时直接编辑该文件,咨询两个核心问题:
- 调用upgrade命令时,是否可以通过
--set参数为数组内的所有元素批量设置值? - 是否支持使用数组选择器语法设置指定元素的
customValueOnlyInThisTier字段,例如类似--set vendor.tier[?name="tier3"].customValueOnlyInThisTier=TESTING的写法?
现有临时规避方案
目前梳理出的临时实现方案操作流程如下:
# 此处执行逻辑生成PREPEND.yaml mv values.yaml values.yaml.bak cat PREPEND.yaml values.yaml.bak > values.yaml
在动态生成的PREPEND.yaml文件中添加如下YAML锚点定义:
Reference1: &SomeTag1 VALUE_HERE Reference2: &SomeTag2 VALUE_HERE
之后即可在values.yaml中通过锚点引用对应的值,示例写法如下:
vendor: tier: - name: tier1 valueToSet: *SomeTag1
该方案虽然实现方式不够优雅,但可以满足当前需求。
答复
- 针对
--set批量赋值问题:不支持。Helm原生--set参数对数组的操作仅支持两种模式:一是按下标指定单个元素赋值(例如--set vendor.tier[0].valueToSet=xxx),二是传入完整数组全量覆盖原有配置,不存在遍历数组批量给所有元素同名字段赋值的能力。 - 针对数组条件选择器问题:不支持。Helm的
--set参数无法解析JSONPath风格的条件筛选语法,你举例的[?name="tier3"]类写法会被判定为非法路径,执行时直接报错。
方案优化提示:你当前手动拼接YAML文件的操作可以简化,无需修改原values.yaml文件。Helm原生支持多values文件传入,执行install/upgrade时可以多次指定
-f/--values参数,Helm会按传入顺序自动合并所有配置文件内容,你只需要把动态生成的配置单独存为独立文件,升级时按顺序传入即可,示例命令:helm upgrade my-release third-vendor/chart -f values.yaml -f dynamic-values.yaml需要注意Helm默认对数组类型做全量覆盖合并,而非深度合并,如果要修改数组内的指定元素,要么配合
--set明确指定元素下标传值,要么通过post-render插件实现自定义的数组合并逻辑。
内容的提问来源于stack exchange,提问作者el n00b
相关产品推荐
相关产品推荐

