このドキュメントは The Kubectl Book の翻訳です。翻訳の GitHub リポジトリはこちら。
- プロジェクト内で宣言されたすべてのリソースにラベルを設定するには
commonLables
を使用する - プロジェクト内で宣言されたすべてのリソースにアノテーションを設定するには
commonAnnotations
を使用する
ラベルとアノテーションを設定する
動機
プロジェクト内のすべてのリソースに共通のラベルやアノテーションを定義したくなることがあります。
- リソースに付けられたラベルを検索することでプロジェクト内のリソースを識別する
- プロジェクト内のすべてのリソースにメタデータを設定する (たとえば
environment=test
) - 既存のプロジェクトをコピーまたはフォークして、ラベルとアノテーションを追加または変更する
プロジェクトのコピーについて詳細はベースとバリエーションを確認してください。
すべてのリソースにラベルを設定する
例: プロジェクト内のすべてのリソースに commonLabels
に宣言されたラベルを追加する
重要: 一度設定した commonLabels は変更すべきではありません。Service やワークロードのセレクタを変更しないためです。
入力: kustomization.yaml ファイルと deployment.yaml ファイル
# kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
commonLabels:
app: foo
environment: test
resources:
- deployment.yaml
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
bar: baz
spec:
selector:
matchLabels:
app: nginx
bar: baz
template:
metadata:
labels:
app: nginx
bar: baz
spec:
containers:
- name: nginx
image: nginx
適用: クラスタに適用されるリソース
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: foo # Label was changed
environment: test # Label was added
bar: baz # Label was ignored
name: nginx-deployment
spec:
selector:
matchLabels:
app: foo # Selector was changed
environment: test # Selector was added
bar: baz # Selector was ignored
template:
metadata:
labels:
app: foo # Label was changed
environment: test # Label was added
bar: baz # Label was ignored
spec:
containers:
- image: nginx
name: nginx
各リソースに付けられたラベルを更新すると、セレクタもそのラベルを対象とするように更新されます。たとえば、プロジェクト内の Service を取得するセレクタは、他のラベルに加えて commonLabels を含むように更新されます。
注意: 一度 commonLabels を設定したら、変更すべきではありません。Service やワークロードを取得するセレクタを変更しないためです。
k8s.io ドキュメントではアプリケーションに適用可能な共通ラベルの規則を定義しています。
注意: commonLabels は不変のラベルにだけ設定されるべきです。セレクタに適用されるからです。
ワークロードリソースにラベル付けすることは、Pod へのクエリを単純にします - たとえば、Pod のログを取得する目的でラベルを付けます。
すべてのリソースにアノテーションを設定する
例: プロジェクト内のすべてのリソースに commonAnnotations
で宣言されたアノテーションを追加する
入力: kustomization.yaml ファイルと deployment.yaml ファイル
# kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
commonAnnotations:
oncallPager: 800-555-1212
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:
# Annotation added to the Deployment
annotations:
oncallPager: 800-555-1212
labels:
app: nginx
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
# Annotation also added to PodTemplate
annotations:
oncallPager: 800-555-1212
labels:
app: nginx
spec:
containers:
- image: nginx
name: nginx
各リソースのアノテーションを更新すると、ObjectMeta を含むすべてのフィールド (たとえば PodTemplate) にもアノテーションが追加されます。