kubernetes 有没有一种方法可以使用helm来模板化另一个helm图表的值?

llew8vvj  于 2023-08-03  发布在  Kubernetes
关注(0)|答案(3)|浏览(132)

假设您需要部署一个带有大量值的公共Helm图表(如Jenkins/Jenkins)。我想在多个文件中写入这些值,并在这些值文件中使用go模板。然后我想把它们组合在一起并部署它们。有没有一种方法可以编写一个Meta级别的Helm图表,将值创建为清单,然后根据这些值安装一个子图表?
我知道kustomize,helmfile,和子图表。我想没有一个是我想要的(或者我没有正确地使用它们)。Kustomize不支持go模板。Helmfile适合于组合和选择值,但不一定要模板化这些值文件(也许它确实如此)。如果我要的是复制品就告诉我。

mefy6pfw

mefy6pfw1#

Helmfile至少允许Helm样式的模板,在它的Helmfile和单独的values文件中。
假设您有一些图表,它需要知道它安装在哪个集群中以进行监视。通常你会将其作为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 chart中所做的一样(确切的模板函数有点不同)。或者,如果引用*.gotmpl文件,Helmfile会在将该文件作为输入提供给helm之前运行模板引擎。

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


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

nzrxty8p

nzrxty8p2#

看起来helm已经使用values/子目录http://www.github.com/helm/helm/pull/6876开发了这个特性

g6baxovj

g6baxovj3#

**我有和你一样的问题。这让我很困扰,因为至少在我看来,这是一个真实的的需要。

我最初是用mvn,复制资源和一个mustache插件做的,对于大多数情况来说,这是可以的。但现在我有限制,因为我需要使用的功能/代码在我的模板。等等,赫尔姆不是已经能做到这些了吗???
"所以让我们用舵为模板“
这将给予这样的组织:

- meta-chart-folder
 |- Chart.yaml // Useless file to have helm template work
 |- values.yaml // Values to use for meta-templating
 |- template
   |- Chart.yaml // template for the real Chart.yaml
   |- values.yaml // template for the real values.yaml
- standard-chart-folder
  |- template
    |- The std templates of your chart.

字符串

因此,在调用构建系统时:

  • 将标准图表文件夹和其中的所有内容复制到某个target/helm文件夹中
  • 调用元模板文件夹中的helm模板,并在target/helm文件夹中生成输出模板。
  • helm模板--输出方向目标/helm元图表
  • 你现在有一个标准的舵图结构在你的目标/舵文件夹中,里面有你需要的一切。
  • 在target/helm文件夹中调用标准helm命令
    优点/缺点
  • 增加了复杂性和混乱。
  • 功能强大、操作灵活。您可以对图表.yaml和values. yaml执行任何操作。
  • 依然简单:使用您已经使用的现有工具(helm和可能的shell脚本或构建系统)
  • 模板化是在构建时一次性完成的。打包图表是标准图表。
  • 因此,100%兼容和有效的解决方案
  • 但一旦打包/发布,就无法改变主意......或者你需要重建。

相关问题