【问题标题】:Is there a way to use helm to template the values of another helm chart?有没有办法使用 helm 模板化另一个 helm 图表的值?
【发布时间】:2021-09-17 19:10:42
【问题描述】:

假设您需要部署一个具有很多值的公共 helm 图表(如 jenkins/jenkins)。我想将这些值写入多个文件,并在这些值文件中使用 go 模板。然后我想将它们组合在一起并部署它们。有没有办法编写一个元级掌舵图,将值创建为清单,然后根据这些值安装一个子图?

我知道 kustomize、helmfile 和 subchart。我想它们都不是我想要的东西(或者我没有正确使用它们)。 Kustomize 不支持 go 模板。 Helmfile 适用于组合和选择值,但不一定是模板这些值文件(或者它可能是)。如果我要求重复,请告诉我。

【问题讨论】:

    标签: kubernetes kubernetes-helm


    【解决方案1】:

    Helmfile 至少允许在其 Helmfile 和单个值文件中使用 Helm 样式的模板。

    假设您有一些图表,它需要知道它安装在哪个集群中以进行监控。通常,您会将其作为 Helm 值传递,但您希望将其写下来(并且可以编写脚本,并且能够同时将相同的配置传递到多个图表中)。在 Helmfile 中你可以写:

    environments:
      production:
        values:
          - cluster: production.example.com
      testing:
        values:
          - cluster: testing.example.com
    
    releases:
      - name: some-chart
        namespace: some-chart
        chart: ./charts/some-chart
        values:
          - ./charts/some-chart/values.yaml.gotmpl
          - cluster: {{ .Values.cluster }}
    

    最后一个块应该类似于helm install 参数,但其中有两个魔法。 {{ .Values.cluster }} 是一个 Go text/template 块,几乎就像你在 Helm 图表中所做的一样(确切的模板函数有点不同)。或者,如果您引用 *.gotmpl 文件,Helmfile 会在该文件上运行模板引擎,然后将其作为输入提供给 helm。

    # values.yaml.gotmpl
    {{-/* enable profiling but only in testing */}}
    profiling: {{ eq .Environment.Name "testing" }}
    

    与普通的 Helm 一样,模板可能会过火。它也可能有点令人困惑,因为访问未定义的属性通常是一个错误而不是nil,并且helmfile.yaml 被多次渲染(在大多数情况下,如果你定义了一个每个环境的值,它必须在每个环境中定义)。但是,这确实为您提供了一种非常通用的方式来提供每个图表设置,或者定义在不同环境中几乎但不完全相同的图表设置。

    【讨论】:

    • 这是一个非常好的答案,谢谢!我发布的那个好像已经关闭了,并没有真正实现。
    【解决方案2】:

    看起来 helm 已经使用 values/ 子目录开发了此功能 http://www.github.com/helm/helm/pull/6876

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-15
      • 2021-01-28
      • 2020-09-30
      • 2020-06-19
      • 1970-01-01
      • 2022-08-16
      相关资源
      最近更新 更多