このセクションでは、Kubernetes クラスタ上の各リソースにラベル( labels )というメタデータを付与する方法について紹介します。
ラベルは各リソースを分別するための情報のようなものであり、ラベルをもとにして各リソースをグループ制御することができます。
サンプルのマニフェストファイルを新規作成し、以下コードを記述します。
[root@kube-master sample-label]# vi sample-pod.yaml
sample-pod1 に ラベル label1 と label2 を付与し、sample-pod2 に ラベル label1 を付与するように metadata に labels を記述しています。
--- apiVersion: v1 kind: Pod metadata: name: sample-pod1 labels: label1: group1 label2: group2 spec: containers: - name: nginx-container image: nginx:1.13 --- apiVersion: v1 kind: Pod metadata: name: sample-pod2 labels: label2: group2 spec: containers: - name: nginx-container image: nginx:1.13
Master サーバーから 作成したマニフェストを実行し、Kubernetes クラスタ上にリソースを作成します。
[root@kube-master sample-label]# kubectl apply -f sample-pod.yaml pod/sample-pod1 created pod/sample-pod2 created [root@kube-master sample-label]#
Master サーバーから Kubernetes クラスタ上のリソースを確認します。 sample-pod1 と sample-pod2 の Pod リソースが稼働していることが確認できます。
[root@kube-master sample-label]# kubectl get pods NAME READY STATUS RESTARTS AGE sample-pod1 1/1 Running 0 8s sample-pod2 1/1 Running 0 8s [root@kube-master sample-label]#
Master サーバーから sample-pod1 の リソース詳細情報を確認します。Labels の部分にマニフェストで記述した ラベルの情報が表示されていることが確認できます。
[root@kube-master sample-label]# kubectl describe pods sample-pod1 Name: sample-pod1 Namespace: default Priority: 0 PriorityClassName: <none> Node: kube-work2/192.168.25.102 Start Time: Sun, 06 Jan 2019 20:35:49 +0900 Labels: label1=group1 label2=group2 Annotations: kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"v1","kind":"Pod","metadata":{"annotations":{},"labels":{"label1":"group1","label2":"group2"},"name":"sample-pod1","namespac... Status: Running IP: 10.244.2.25 Containers: nginx-container: Container ID: docker://e0f03fe75cff9270c4a284008242e57523b933e8c186c986edd64144c86c300a Image: nginx:1.13 Image ID: docker-pullable://nginx@sha256:b1d09e9718890e6ebbbd2bc319ef1611559e30ce1b6f56b2e3b479d9da51dc35 Port: <none> Host Port: <none> State: Running Started: Sun, 06 Jan 2019 20:35:50 +0900 Ready: True Restart Count: 0 Environment: <none> Mounts: /var/run/secrets/kubernetes.io/serviceaccount from default-token-75dfq (ro) Conditions: Type Status Initialized True Ready True ContainersReady True PodScheduled True Volumes: default-token-75dfq: Type: Secret (a volume populated by a Secret) SecretName: default-token-75dfq Optional: false QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s node.kubernetes.io/unreachable:NoExecute for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 40s default-scheduler Successfully assigned default/sample-pod1 to kube-work2 Normal Pulled 40s kubelet, kube-work2 Container image "nginx:1.13" already present on machine Normal Created 40s kubelet, kube-work2 Created container Normal Started 39s kubelet, kube-work2 Started container [root@kube-master sample-label]#
Master サーバーから sample-pod2 の リソース詳細情報を確認します。Labels の部分にマニフェストで記述した ラベルの情報が表示されていることが確認できます。
[root@kube-master sample-label]# kubectl describe pods sample-pod2 Name: sample-pod2 Namespace: default Priority: 0 PriorityClassName: <none> Node: kube-work1/192.168.25.101 Start Time: Sun, 06 Jan 2019 20:35:49 +0900 Labels: label2=group2 Annotations: kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"v1","kind":"Pod","metadata":{"annotations":{},"labels":{"label2":"group2"},"name":"sample-pod2","namespace":"default"},"spe... Status: Running IP: 10.244.1.105 Containers: nginx-container: Container ID: docker://7282a05e2fc9fd7a6eea3a9835bcaed6a8dc8b8287236e933e7c72284e7d79ac Image: nginx:1.13 Image ID: docker-pullable://nginx@sha256:b1d09e9718890e6ebbbd2bc319ef1611559e30ce1b6f56b2e3b479d9da51dc35 Port: <none> Host Port: <none> State: Running Started: Sun, 06 Jan 2019 20:35:50 +0900 Ready: True Restart Count: 0 Environment: <none> Mounts: /var/run/secrets/kubernetes.io/serviceaccount from default-token-75dfq (ro) Conditions: Type Status Initialized True Ready True ContainersReady True PodScheduled True Volumes: default-token-75dfq: Type: Secret (a volume populated by a Secret) SecretName: default-token-75dfq Optional: false QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s node.kubernetes.io/unreachable:NoExecute for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 61s default-scheduler Successfully assigned default/sample-pod2 to kube-work1 Normal Pulled 61s kubelet, kube-work1 Container image "nginx:1.13" already present on machine Normal Created 61s kubelet, kube-work1 Created container Normal Started 60s kubelet, kube-work1 Started container [root@kube-master sample-label]#
Master サーバーから Kubernetes クラスタ上の label1 ラベルが付与されているリソースを確認します。sample-pod1 だけが表示されます。
[root@kube-master sample-label]# kubectl get pods -l label1 NAME READY STATUS RESTARTS AGE sample-pod1 1/1 Running 0 3m16s [root@kube-master sample-label]#
Master サーバーから Kubernetes クラスタ上の label1 と label2 ラベルが付与されているリソースを確認します。sample-pod1 だけが表示されます。
[root@kube-master sample-label]# kubectl get pods -l label1,label2 NAME READY STATUS RESTARTS AGE sample-pod1 1/1 Running 0 3m25s [root@kube-master sample-label]#
Master サーバーから Kubernetes クラスタ上の label2 ラベルが付与されているリソースを確認します。sample-pod1 と sample-pod2 が表示されます。
[root@kube-master sample-label]# kubectl get pods -l label2 NAME READY STATUS RESTARTS AGE sample-pod1 1/1 Running 0 3m32s sample-pod2 1/1 Running 0 3m32s [root@kube-master sample-label]#
Master サーバーから Kubernetes クラスタ上の Pod リソースをラベルを使って削除します。
[root@kube-master sample-label]# kubectl delete pods -l label1,label2 pod "sample-pod1" deleted [root@kube-master sample-label]# [root@kube-master sample-label]# kubectl delete pods -l label2 pod "sample-pod2" deleted [root@kube-master sample-label]#
Master サーバーから Kubernetes クラスタ上の Pod リソースが削除されていることを確認します。
[root@kube-master sample-label]# kubectl get pods No resources found. [root@kube-master sample-label]#