首页 > 解决方案 > Helm values.yaml 文件中的动态变量

问题描述

我有一个用例,我想在 helm values.yaml 中为给定属性设置动态值。例如,我有以下版本文件

version=123

我想动态解析并使用这个版本到 helm values.yaml 版本属性。

预期值.yaml

name: abc
version: 123

标签: kubernetes-helm

解决方案


有很多选项取决于您的工具集的最佳选择,但我过去所做/看到的工作是创建您自己的 yaml 文件模板values.yaml.template,并在其中替换所需的值。

因此,例如您的 values.yaml.template,将类似于:

name: abc
version: {{version}}

并且您会将模板文件名和版本文件名都传递给模板引擎以进行替换。

一些方法可以做到这一点:

  • sed- 有点hacky,但已经安装了。这是一个例子。
  • jinja2-cli - 我已经有效地使用它来将值替换到模板文件中
  • mustache - 我从未使用过,但它似乎是在考虑 CLI 的情况下构建的
  • confd - 似乎适合这种情况,尽管我从未使用过它。
  • 制作/使用您已经在使用的其他模板语言的 CLI 工具 - 例如,我见过有人制作了 Freemarker CLI 工具。

显然有大量的模板语言,所以考虑到你的堆栈,最省力的问题是什么。但也许一个更困难的问题是,您如何挂钩到 helm 配置或启动,以便您可以从模板生成配置 yaml 文件。这也取决于您的堆栈。

[更新] 我不熟悉 helm,但也可以动态获取配置值(即,使用 helm 插件在 helm 启动时从配置服务器检索 helm 配置)。


推荐阅读