How to Create a Namespace If It Doesn't Exists from Helm Templates?
I Have a Kind: Namespace Template Yaml, as per Below: apiVersion: V1 Kind: Namespace Metadata: Name: {{. Values. Namespace }} Namespace: "" How Do I Make Helm...
I have a kind: Namespace template yaml, as per below:
apiVersion: v1
kind: Namespace
metadata:
name: {{ .Values.namespace }}
namespace: ""
How do I make helm install create the above-given namespace ({{ .Values.namespace }}) if and only if above namespace ({{ .Values.namespace }}) doesn't exits in the pointed Kubernetes cluster?
Thanks.
4 Answers
This feature is implemented in helm >= 3.2 (Pull Request)
Use --create-namespace in addition to --namespace <namespace>
For helm2 it's best to avoiding creating the namespace as part of your chart content if at all possible and letting helm manage it. helm install with the --namespace=<namespace_name> option should create a namespace for you automatically. You can reference that namespace in your chart with {{ .Release.Namespace }}. There's currently only one example of creating a namespace in the public helm/charts repo and it uses a manual flag for checking whether to create it
For helm3 functionality has changed and there's a github issue on this
There are some differences in Helm commands due to different versions.
For Helm 2, just use --namespace; for Helm 3, need to use --namespace and --create-namespace.
Helm 2 Example:
helm install stable/nginx-ingress --name ingress-nginx --namespace ingress-nginx --wait
Helm 3 Example:
helm install ingress-nginx stable/nginx-ingress --namespace ingress-nginx --create-namespace --wait
For terraform users, set create_namespace attribute to true:
resource "helm_release" "kube-prometheus-stack" {
name = ...
repository = ...
chart = ...
namespace = ...
create_namespace = true
}