label は Kubernetes オブジェクトをまとめるための仕組みです。label は key/value のペアで、値の長さと許可される値には制約がありますが、事前に意味は定義されていません。そのため、label は目的に合わせて自由に選べます。たとえば、「この pod はプロダクション環境で実行されている」というように環境を表現したり、「あの pod は X 課が所有している」というように所有権を表現したりできます。
初期状態で一つの label (env=development
) をもつ pod を作成しましょう。
$ kubectl apply -f https://raw.githubusercontent.com/openshift-evangelists/kbe/master/specs/labels/pod.yaml
$ kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
labelex 1/1 Running 0 10m env=development
上の get pods
に --show-labels
オプションを付けました。このオプションを指定すると、出力にオブジェクトの label 用の列を追加します。
次のように label をこの pod に追加できます。
$ kubectl label pods labelex owner=michael
$ kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
labelex 1/1 Running 0 16m env=development,owner=michael
label でフィルターするには、--selector
オプションを使用します。たとえば、owner
が michael
と等しい pod だけをリスト表示するには、次のようにします。
$ kubectl get pods --selector owner=michael
NAME READY STATUS RESTARTS AGE
labelex 1/1 Running 0 27m
--selector
オプションは -l
に短縮できます。env=development
という label の pod だけを選ぶには以下のようにします。
$ kubectl get pods -l env=development
NAME READY STATUS RESTARTS AGE
labelex 1/1 Running 0 27m
Kubernetes オブジェクトは複数の値を扱う set-based selector もサポートしています。別の pod を起動しましょう。二つの label (env=production
と owner=michael
) が付いています。
$ kubectl apply -f https://raw.githubusercontent.com/openshift-evangelists/kbe/master/specs/labels/anotherpod.yaml
では、env=development
または env=production
どちらかの label が付いた pod をリスト表示しましょう。
$ kubectl get pods -l 'env in (production, development)'
NAME READY STATUS RESTARTS AGE
labelex 1/1 Running 0 43m
labelexother 1/1 Running 0 3m
label selection は他のコマンドでもサポートされています。たとえば、これまで作成した pod を削除するには次のようにします。
$ kubectl delete pods -l 'env in (production, development)'
指定した label をもつ pod がすべて削除されるので注意してください。
これらの pod を名前を指定して直接削除することもできます。
$ kubectl delete pods labelex
$ kubectl delete pods labelexother
label を付けられるのは pod だけではありません。node や service のようなどんなオブジェクトにも label を適用できます。