如果名称空间不存在于 HELM 模板中,如何创建名称空间?

How to create a namespace if it doesn't exists from HELM templates?

我有一个 kind: Namespace 模板 yaml,如下所示:

apiVersion: v1
kind: Namespace
metadata:
  name: {{ .Values.namespace }}
  namespace: ""

当且仅当上述命名空间 ({{ .Values.namespace }}) 不存在于指定的 Kubernetes 集群中时,我如何 helm install 创建上述命名空间 ({{ .Values.namespace }})?

谢谢。

对于 helm2,最好尽可能避免将名称空间创建为图表内容的一部分,并让 helm 管理它。 helm install--namespace=<namespace_name> 选项应该会自动为您创建一个命名空间。您可以使用 {{ .Release.Namespace }} 在图表中引用该命名空间。目前在 public helm/charts 存储库中只有一个创建命名空间的示例,它使用 a manual flag for checking whether to create it

对于 helm3 功能已经改变并且有 a github issue on this

此功能在 helm >= 3.2 (Pull Request)

中实现

除了--namespace <namespace>

之外还使用--create-namespace

Helm命令因版本不同存在一些差异

对于 Helm 2,只需使用 --namespace;对于 Helm 3,需要使用 --namespace--create-namespace.

Helm 2 示例:

helm install stable/nginx-ingress --name ingress-nginx --namespace ingress-nginx --wait

头盔 3 示例:

helm install ingress-nginx stable/nginx-ingress --namespace ingress-nginx --create-namespace --wait

对于 terraform 用户,将 create_namespace 属性设置为 true:

resource "helm_release" "kube-prometheus-stack" {
  name       = ...
  repository = ...
  chart      = ...
  namespace  = ...
  create_namespace = true
}