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 %}