このドキュメントは The Kubectl Book の翻訳です。翻訳の GitHub リポジトリはこちら。
- プロジェクト内のすべてのリソースに対して名前空間を設定するには
namespace
を使う - プロジェクト内のすべてのリソースに対して名前の接頭辞を付けるには
namePrefix
を使う - プロジェクト内のすべてのリソースに対して名前の接尾辞を付けるには
nameSuffix
を使う
名前空間と命名の設定
動機
プロジェクト内のすべてのリソースに対して名前空間と命名に一貫性を強制すると便利な場合があります。
- すべてのリソースが正確な名前空間の中にあることを保証する
- すべてのリソースが共通の命名規則を共有することを保証する
- 既存のプロジェクトをコピーまたはフォークして、名前空間 / 名前を変更する
プロジェクトのコピーについての詳細はベースとバリエーションを確認してください。
すべてのリソースに対して名前空間を設定する
Reference:
リソース構成の中で宣言されたすべてのリソースの名前空間は namespace
で設定できます。これにより設定される名前空間は、生成されたリソース (たとえば ConfigMap と Secret) にもそうでないリソースにも適用されます。
例: 名前空間で区切りたいリソースに対し kustomization.yaml
の中に namespace
を設定する
入力: kustomization.yaml ファイルと deployment.yaml ファイル
# 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
適用: クラスタに適用されるリソース
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
名前空間の設定は、すでにリソースの名前空間が設定されている場合には、上書きされます。
すべてのリソースに対して名前の接頭辞や接尾辞を設定する
すべてのリソースに対して名前の接頭辞や接尾辞を設定するには namePrefix
や nameSuffix
を使用します。
例: すべてのリソースの名前に接頭辞を付ける
入力: kustomization.yaml ファイルと deployment.yaml ファイル
# 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
適用: クラスタに適用されるリソース
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
Deployment や StatefulSet といったリソースは、Pod 定義内で ConfigMap や Secret といった他のリソースに参照をもつことがあります。
これによって、生成されたリソース (たとえば ConfigMap と Secret) にもそうでないリソースにも名前の接頭辞や接尾辞が設定されます。
適用された namePrefix や nameSuffix は更新されたリソースを参照しているリソースに伝播します - たとえば Secret と ConfigMap への参照は namePrefix と nameSuffix と共に更新されます。
例: すべてのリソースの名前に接頭辞を付ける
これは Deployment の中で参照されている ConfigMap が foo
という接頭辞をもつよう更新します。
入力: kustomization.yaml ファイルと deployment.yaml ファイル
# 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
適用: クラスタに適用されるリソース
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
Apply は namePrefix
を、プロジェクト内のリソースが他のリソースによって参照されている場所ならどこへでも、伝播させます。それは以下を含みます。
- StatefulSet から参照される Service
- PodSpec から参照される ConfigMap
- PodSpec から参照される Secret