如何覆盖子图表的 Release.namespace?

问题描述

我有一个包含 4 个子图表的父图表,其中我想将 1 个特定子图表部署到不同的命名空间,并且该子图表中的所有模板文件都引用 {{ .Release.Namespace. }}。他们有什么方法可以修改.Release.Namespace。来自父图表的子图表?

解决方法

我认为使用您无法控制的普通 Helm 和图表是不可能的。

当图表依赖于子图表时,可以自定义的可能性很小。父图表可以为子图表提供一组默认值,但不计算任何值,并且这些值可以被运行 helm install 的人覆盖。

当且仅当子图专门用于部署到备用命名空间中

# Every object in the subchart must have this configuration
metadata:
  namespace: {{ .Values.namespace | default .Release.Namespace }}

然后您可以将该值提供给子图表;但这不是默认配置。

我的一般经验是,Helm 的“伞形图”在几个重要方面不够灵活。有更高级的工具,如 HelmfileHelmsman,它们提供了一个带有全套选项的多个 Helm 图表的单命令安装(Helmsman 更简单,Helmfile 几乎可以在任何地方使用 Helm 风格的模板,这是更强大也更复杂)。如果您需要安装四个图表,三个在一个命名空间中,一个在另一个中,这些工具可能会更好地工作。