Kubernetesではリソースに対してラベルを付与することによりselectorやフィルタリングに利用することができる。
ラベルは以下のようにKey,Valueでオブジェクト(Pod,Replication Controllerなど)にアタッチする。
"labels": {
"key1" : "value1",
"key2" : "value2"
}
ラベルの例として、以下のようなものが公式ページに記載されている。リリースや環境などを区別するために用いることを想定されているようである。
"release" : "stable", "release" : "canary"
"environment" : "dev", "environment" : "qa", "environment" : "production"
"tier" : "frontend", "tier" : "backend", "tier" : "cache"
"partition" : "customerA", "partition" : "customerB"
"track" : "daily", "track" : "weekly"
ラベルは Label Selector を利用して特定の Pod を判別するために利用される。
ラベルのアタッチ
マニフェストで定義する。
既に環境作ってたので既存のDeployment、Podに対してラベルを追加する。
$ kubectl get --show-labels=true deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE LABELS
gcp-cost 1 1 1 1 15d name=gcp-cost-pods
task-processing-time 1 1 1 1 7d name=task-processing-time-pods
$ kubectl edit deployments/gcp-cost
以下のラベルを追加。
environment: dev
※task-processingにはenvironment:qaを追加。
deploymentにラベルが追加されていることを確認
$ kubectl get --show-labels=true deployments
gcp-cost 1 1 1 1 15d environment=dev,name=gcp-cost-pods
task-processing-time 1 1 1 1 7d environment=qa,name=task-processing-time-pods
注) templateのラベルを変更すると、既存のPodを落とし、新しいPod(ラベル付き)が作成されることを確認。
$ kubectl get --show-labels=true pods
gcp-cost-1823646609-u7s4z 1/1 Terminating 0 5m name=gcp-cost-pods,pod-template-hash=1823646609
gcp-cost-3407718879-zrso2 1/1 Running 0 2s environment=dev,name=gcp-cost-pods,pod-template-hash=3407718879
- environmentがdevと一致するpodのみ、一覧を出力する。
$ kubectl get pods -l "environment=dev"
NAME READY STATUS RESTARTS AGE
gcp-cost-3407718879-zrso2 1/1 Running 0 7m
- environmentがdevと一致しないpodのみ、一覧を出力する。
$ kubectl get pods -l "environment!=dev"
NAME READY STATUS RESTARTS AGE
task-processing-time-1436137422-8fwba 1/1 Running 0 2m
- environmentがdevとqaのpod一覧を出力する。
$ kubectl get pods -l "environment in (dev,qa)"
NAME READY STATUS RESTARTS AGE
gcp-cost-3407718879-zrso2 1/1 Running 0 23m
task-processing-time-1436137422-8fwba 1/1 Running 0 3m
getだけではなくdeleteなどと組み合わせることが可能。environmentがdevのpodを全て削除するなど。