【问题标题】:Overriding nested Helm values on the command line doesn't work在命令行上覆盖嵌套的 Helm 值不起作用
【发布时间】:2021-05-30 06:52:33
【问题描述】:

我正在尝试安装具有此类模板部分的a Helm chart

{{- if not .Values.persistence.data.claimName }}
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  ...
spec:
  ...
{{- if .Values.persistence.data.storageClass }}
  storageClassName: {{ .Values.persistence.data.storageClass | quote }}
{{- end }}
---
{{- end }}

注意.Values.persistence.data.storageClass

我已通过将此文件通过管道传送到 helm(使用 -f -)在命令行上提供了这些值:

$ cat /tmp/values.yaml
claimToken: claim-GscEQwRPBmXSsYBjwyUD
image.repository: linuxserver/plex
image.tag: arm64v8-latest
ingress.enabled: true
nodeSelector:
  beta.kubernetes.io/arch: arm64
persistence.config.storageClass: rook-cephfs
persistence.data.storageClass: rook-cephfs
persistence.transcode.storageClass: rook-cephfs
service.type: LoadBalancer

在命令行上将它们传递给 Helm install 似乎不起作用,我们最终得到了两个不同的键:

$ cat /tmp/values.yaml | helm upgrade --debug --dry-run -i kube-plex -f - ../kube-plex/charts/kube-plex/
COMPUTED VALUES:
...
persistence:
  ...
  data:
    accessMode: ReadWriteMany
    size: 40Gi
    storageClass: ""
  ...
...
persistence.data.storageClass: rook-cephfs
...

注意persistence.data.storageClass 是如何作为“平面”键和嵌套字典出现的。嵌套的 dict 值不会被覆盖。

--set persistence.data.storageClass=rook-cephfs 作为命令行标志传递确实有效。

如何通过提供文件来覆盖命令行中的嵌套值?

【问题讨论】:

    标签: kubernetes-helm


    【解决方案1】:

    Go text/template 语言使用. 表示字段导航:在表达式.Values.persistence.data.storageClass 中,它从特殊变量. 开始,查找其中的Values 成员,查找persistence成员,依此类推。如果您使用 helm install -f 选项传递覆盖值,您的 YAML 文件布局需要与此匹配:

    persistence:
      config:
        # not "persistence.config.storageClass"; follows the nested map layout
        storageClass: rook-cephfs
      data:
        storageClass: rook-cephfs
      transcode:
        storageClass: rook-cephfs
    

    【讨论】:

      猜你喜欢
      • 2021-07-13
      • 1970-01-01
      • 1970-01-01
      • 2018-08-19
      • 2020-12-29
      • 2017-03-04
      • 1970-01-01
      • 2013-04-17
      • 1970-01-01
      相关资源
      最近更新 更多