如何为子舵图设置不同的命名空间?

How to set a different namespace for child helm charts?

当您安装带有未指定命名空间的子图表的图表时,Helm 将使用通过 --namespace 在命令行上指定的名称。是否可以为特定的子图表覆盖此标志?

例如,如果我有依赖于图表 B 的图表 A 并且我指定 --namespace foo,我希望能够自定义图表 B 的资源以安装到其他命名空间 bar而不是 foo.

更新 2: Helm 3 添加了对多命名空间的支持 https://github.com/helm/helm/issues/2060

更新 1: 如果资源模板指定 metadata.namespace,则它将安装在该名称空间中。例如,如果我有一个带 metadata.namespace: x 和 运行 helm install mychart --namespace y 的 pod,该 pod 将安装在 x 中。我猜你可以使用带有命名空间的常规 helm 模板来参数化它。

原回答:

We do not plan on fully supporting multi-namespaced releases until Helm 3.0 https://github.com/kubernetes/helm/issues/2060#issuecomment-306847365

作为解决方法,您可以使用 --skip-dependenciesdependency conditions

分别为每个命名空间安装

如果您已经有不同的图表,那么您可以使用 helmfile 来实现。

步骤 1: 创建以下文件夹。

my-awesome-infrastructure/
  helm
  helmfile
  helmfile.yaml

其中 helm 和 helmfile 是二进制可执行文件。

第二步:安装helmfile需要的helm diff插件

helm plugin install https://github.com/databus23/helm-diff

步骤 3:在 helmfile.yaml.

中声明您的图表
helmBinary: ./helm

repositories:
  - name: ingress-nginx
    url: https://kubernetes.github.io/ingress-nginx
  - name: bitnami
    url: https://charts.bitnami.com/bitnami
releases:
  - name: nginx-ingress
    namespace: nginx-ingress
    createNamespace: true
    chart: ingress-nginx/ingress-nginx
    version: ~4.1.0
  - name: jupyterhub
    namespace: jupyterhub
    createNamespace: true
    chart: bitnami/jupyterhub
    version: ~1.1.12
  - name: metrics-server
    namespace: metrics-server
    createNamespace: true
    chart: bitnami/metrics-server
    version: ~5.11.9

第 4 步:运行 用于部署所有图表的 helmfile。

./helmfile apply

在上面的示例中,您将三个单独的图表部署到三个单独的命名空间。 在幕后,helmfile 将 运行 调用 helm 单独安装并创建单独的版本。