kubectl/docs/book/pages/app_management/namespaces_and_names.md

5.3 KiB

{% panel style="info", title="TL;DR" %}

  • Set the Namespace for all Resources within a Project with namespace
  • Prefix the Names of all Resources within a Project with namePrefix
  • Suffix the Names of all Resources within a Project with nameSuffix {% endpanel %}

Setting Namespaces and Names

Motivation

It may be useful to enforce consistency across the namespace and names of all Resources within a Project.

  • Ensure all Resources are in the correct Namespace
  • Ensure all Resources share a common naming convention
  • Copy or Fork an existing Project and change the Namespace / Names

See Bases and Variations for more details on Copying Projects.

Setting the Namespace for all Resources

The Namespace for all namespaced Resources declared in the Resource Config may be set with namespace. This sets the namespace for both generated Resources (e.g. ConfigMaps and Secrets) and non-generated Resources.

{% method %} Example: Set the namespace specified in the kustomization.yaml on the namespaced Resources.

{% sample lang="yaml" %} Input: The kustomization.yaml and deployment.yaml files

# kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: my-namespace
resources:
- deployment.yaml
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx

Applied: The Resource that is Applied to the cluster

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx
  name: nginx-deployment
  # The namespace has been added
  namespace: my-namespace
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx
        name: nginx

{% endmethod %}

Setting a Name prefix or suffix for all Resources

A name prefix or suffix can be set for all resources using namePrefix or nameSuffix.

{% method %} Example: Prefix the names of all Resources.

{% sample lang="yaml" %} Input: The kustomization.yaml and deployment.yaml files

# kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namePrefix: foo-
resources:
- deployment.yaml
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx

Applied: The Resource that is Applied to the cluster

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx
  # The name has been prefixed with "foo-"
  name: foo-nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx
        name: nginx

{% endmethod %}

{% panel style="info", title="Propagation of the Name to Object References" %} Resources such as Deployments and StatefulSets may reference other Resources such as ConfigMaps and Secrets in the Pod Spec.

This sets a name prefix or suffix for both generated Resources (e.g. ConfigMaps and Secrets) and non-generated Resources.

The namePrefix or nameSuffix that is applied is propagated to references within the Project. {% endpanel %}

{% method %} Example: Prefix the names of all Resources.

This will update the ConfigMap reference in the Deployment to have the foo prefix.

{% sample lang="yaml" %} Input: The kustomization.yaml and deployment.yaml files

# kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namePrefix: foo-
configMapGenerator:
- name: props
  literals:	
  - BAR=baz
resources:
- deployment.yaml
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        env:
        - name: BAR
          valueFrom:
            configMapKeyRef:
              name: props
              key: BAR

Applied: The Resource that is Applied to the cluster

apiVersion: v1
data:
 BAR: baz
kind: ConfigMap
metadata:
 creationTimestamp: null
 name: foo-props-44kfh86dgg
---
apiVersion: apps/v1
kind: Deployment
metadata:
 labels:
   app: nginx
 name: foo-nginx-deployment
spec:
 selector:
   matchLabels:
     app: nginx
 template:
   metadata:
     labels:
       app: nginx
   spec:
     containers:
     - env:
       - name: BAR
         valueFrom:
           configMapKeyRef:
             key: BAR
             name: foo-props-44kfh86dgg
       image: nginx
       name: nginx

{% endmethod %}

{% panel style="info", title="References" %} Apply will propagate the namePrefix to any place Resources within the project are referenced by other Resources including:

  • Service references from StatefulSets
  • ConfigMap references from PodSpecs
  • Secret references from PodSpecs {% endpanel %}