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

How to override the Release.namespace for subcharts?

我有一个父图表,其中包含 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“伞形图表”在几个重要方面是不灵活的。有更高级别的工具,如 Helmfile and Helmsman 提供了多个 Helm 图表的单命令安装和全套选项(Helmsman 更简单,Helmfile 允许 Helm 风格的模板几乎无处不在,这既更强大也更复杂).如果您需要安装四个图表,三个到一个命名空间,一个到另一个,这些工具可能会更好。