引用之前在 HELM values.yaml 中声明的值

Neu*_*ann 29 kubernetes-helm

我有一个 HELM 图表,有一些要求(即子图表)。

部署该图表时,我使用values.yaml包含主图表和子图表的所有值的:

globalFoo: "bar"

subchart1:
  foo: subchart1-{{ globalFoo }}

subchart2:
  localFoo: "bar2"
  foo: subchart2-{{ subchart2.localFoo }}
Run Code Online (Sandbox Code Playgroud)

我想实现两件事:

  • 在子图值中引用先前声明的全局变量(即在全局图表范围内)在我的示例中为 subchart1.foo)
  • 在同一子图范围内引用先前声明的局部变量(在我的示例中为subchart2.foo )

上面的例子不行。我尝试了几种语法,但没有一个有效。我在 HELM 文档中没有找到类似的内容。

可行吗?

mir*_*ixx 30

在子图值中引用先前声明的全局变量,在同一子图范围中引用先前声明的局部变量

这可以在某种程度上使用锚点和别名来实现。

global: 
   foo: &global-foo bar
   
subchart1:
  # this verbatim copies the content of the anchor
  foo: *global-foo
  local: &subchart1-local bar 

subchart2:
  foo: *subchart1-local
Run Code Online (Sandbox Code Playgroud)

值可以自然地组合在 helm 模板中:

kind: ConfigMap
...
data:
   FOO: "subchart2-{{ .Values.subchart2.foo }}"
Run Code Online (Sandbox Code Playgroud)

如果发现自己需要“模板化值”,该tpl函数可能会有所帮助:

# values 
global:
   user: foo
   pass: bar 
   dbhost: dbserver.com

mychart:
   connection: "db://{{.d.user}}:{{d.pass}}/{{d.dbhost}}"

# template
kind: ConfigMap
...
data:
   DBURL: "{{ tpl .Values.mychart.connection (dict "d" .Values.global "Template" $.Template }}"
Run Code Online (Sandbox Code Playgroud)

请注意,(dict ...)语法源自此 helm github 评论中的提示。这有助于通过提供“.d”上下文而不是“.Values”来缩短模板字符串,即.d.user缩写.Values.global.user


Laz*_*ass 22

目前(从 Helm 版本 3 开始)不支持此功能。

\n

提案中讨论了类似的问题:允许在 value.yaml 中使用模板

\n

并因多种原因被拒绝。Helm 的创建者说的其中之一

\n
\n

更大的限制是values.yaml 文件必须始终是有效的YAML 文件。

\n
\n

以及支持在values.yaml中使用{{values}}

\n
\n

作为模板数据源传递到模板引擎的文件本身并不通过模板引擎传递。我们几乎肯定不会这样做,因为这会让用户感到非常困惑。它还破坏了标准 YAML 兼容性以及与所有现有 Helm 版本的向后兼容性。

\n
\n

最后但并非最不重要的一点是这里

\n
\n

tl;dr \n最简单的是,不想这样做的原因是您没有对提供模板值的文件进行模板化。此外,Helm 3 将废弃该功能

\n

...

\n

已被 Helm 3 废弃\n在 Helm 3 中,作为事件/钩子系统的一部分,我们将允许以比模板化更简单的方式对值进行基于 Lua 的修改。鉴于 Helm 3 的开发进展顺利,添加具有上述所有缺点的功能会导致比增加的价值更多的流失。因此,我们\xe2\x80\x99t 并没有完全拒绝这一点,而是正在为 Helm 3 实现它(尽管以不同的方式)

\n
\n

但是提到的通过 Lua 的支持已经通过这个评论关闭了

\n
\n

我们应该关闭这个,因为 Lua 支持不会很快出现,而且我们还有其他(可以说更好的)想法来处理这个问题(比如 WASM)。这是在计划中的,但现在不再了。

\n
\n