有没有办法使用 helm 来模板化另一个 helm 图表的值?
Is there a way to use helm to template the values of another helm chart?
假设您需要部署一个包含很多值的 public helm chart(如 jenkins/jenkins)。我想将这些值写入多个文件,并在这些值文件中使用 go 模板。然后我想将它们组合在一起并部署它们。有没有一种方法可以编写元级 helm chart,将值创建为清单,然后根据这些值安装子 chart?
我知道 kustomize、helmfile 和子图表。我猜 none 他们只是感觉就像我想要的东西(或者我没有正确使用它们)。 Kustomize 不支持 go 模板。 Helmfile 适用于组合和选择值,但不一定对这些值文件进行模板化(或者可能是)。如果我要重复,请告诉我。
看来 helm 已经使用 values/ 子目录开发了此功能
http://www.github.com/helm/helm/pull/6876
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
被渲染多次(在大多数情况下,如果您定义了每个环境的值它 必须 在每个环境中定义)。但是,这确实为您提供了一种非常通用的方法来提供每个图表设置,或者定义在不同环境中几乎但不完全相同的图表设置。
假设您需要部署一个包含很多值的 public helm chart(如 jenkins/jenkins)。我想将这些值写入多个文件,并在这些值文件中使用 go 模板。然后我想将它们组合在一起并部署它们。有没有一种方法可以编写元级 helm chart,将值创建为清单,然后根据这些值安装子 chart?
我知道 kustomize、helmfile 和子图表。我猜 none 他们只是感觉就像我想要的东西(或者我没有正确使用它们)。 Kustomize 不支持 go 模板。 Helmfile 适用于组合和选择值,但不一定对这些值文件进行模板化(或者可能是)。如果我要重复,请告诉我。
看来 helm 已经使用 values/ 子目录开发了此功能 http://www.github.com/helm/helm/pull/6876
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
被渲染多次(在大多数情况下,如果您定义了每个环境的值它 必须 在每个环境中定义)。但是,这确实为您提供了一种非常通用的方法来提供每个图表设置,或者定义在不同环境中几乎但不完全相同的图表设置。