通过命令行文件覆盖嵌套Helm values不生效该如何解决
Helm values文件嵌套字段覆盖失败解决方法
根本原因
YAML 语法本身不会将键名中的.识别为嵌套字典的分隔符,只有--set命令行参数的解析逻辑才会自动按.拆分生成嵌套结构。你当前在values.yaml中写的persistence.data.storageClass: rook-cephfs属于扁平化写法,相当于在Values顶级域新增了一个名为persistence.data.storageClass的独立键,和原有嵌套的persistence.data字典完全无关,自然不会覆盖嵌套字段的值,也就会出现你看到的两种格式键并存的情况。
解决方案
方案1(推荐):调整values.yaml为标准嵌套YAML结构
把所有带.的扁平化键都改为YAML嵌套格式,修改后的values.yaml示例如下:
claimToken: claim-GscEQwRPBmXSsYBjwyUD image: repository: linuxserver/plex tag: arm64v8-latest ingress: enabled: true nodeSelector: beta.kubernetes.io/arch: arm64 persistence: config: storageClass: rook-cephfs data: storageClass: rook-cephfs transcode: storageClass: rook-cephfs service: type: LoadBalancer
修改后再执行原命令即可正常覆盖嵌套字段,不会再出现冗余的扁平化键。
方案2(无需修改原文件):用yq工具转换扁平化键为嵌套结构
如果你不想修改原values.yaml文件,可以用yq工具实时转换后再传给helm:
cat /tmp/values.yaml | yq 'nest("." )' | helm upgrade --debug --dry-run -i kube-plex -f - ../kube-plex/charts/kube-plex/
内容的提问来源于stack exchange,提问作者tibbe
相关产品推荐
相关产品推荐

