◾️はじめに
Label / Selector / Node Selector について、 メモしていく
目次
【1】Label 1)目的 2)サンプル 3)推奨ラベル (Recommended Labels) 4)補足:Annotations 【2】Selector 0)LabelとSelectorの関係 1)Label Selector 2)Node Selector 3)Field Selector 【3】関連するkubectlコマンド 1)ラベル確認 --show-labelsオプション 2)ラベル追加 kubectl label 3)ラベルでフィルタ -l / --selectorオプション
【1】Label
https://kubernetes.io/ja/docs/concepts/overview/working-with-objects/labels/
* Podなどのk8sオブジェクトに割り当てられたキーとバリューのペア => AWS で言うと、タグ(Tags)みたいな感じ?
1)目的
* k8sクラスタ上のオブジェクトをグループ化/一覧表示/操作する時に利用可能
2)サンプル
apiVersion: v1 kind: Pod metadata: name: label-demo # ★ここ labels: environment: production app: nginx tier: frontend partition: customerA track: daily release: canary # cf. canary release ... 新しい機能を追加/バージョンアップしたときのリリース手法の一つ
https://wa3.i-3-i.info/word19671.html
3)推奨ラベル (Recommended Labels)
* k8s では、推奨ラベルというのが、 以下の公式ドキュメントが紹介されているので一読しておくといいかも
https://kubernetes.io/ja/docs/concepts/overview/working-with-objects/common-labels/
apiVersion: apps/v1 kind: StatefulSet metadata: labels: app.kubernetes.io/name: mysql app.kubernetes.io/instance: mysql-abcxzy app.kubernetes.io/version: "5.7.21" app.kubernetes.io/component: database app.kubernetes.io/part-of: wordpress app.kubernetes.io/managed-by: helm
4)補足:Annotations
* 識別用途でない任意のメタデータをオブジェクトに割り当てるための機能
https://kubernetes.io/ja/docs/concepts/overview/working-with-objects/annotations/
apiVersion: v1 kind: Pod metadata: name: annotations-demo # ★ annotations: imageregistry: "https://hub.docker.com/" spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80
【2】Selector
* Selectorを介して、k8sオブジェクトを識別できる
0)LabelとSelectorの関係
* SelectorでLabelを指定する => マニフェストファイル上で紐づけるPodなどのk8sオブジェクトを指定可能
1)Label Selector
* k8s オブジェクトをフィルタリングすることができる機能 => ラベルセレクター を介して、 クライアントとユーザーはk8s オブジェクトのセットを指定可能 * 指定の仕方は、以下の2通り。
[1] 等価ベース(equality-based / =)
キーが等が等しい、または等しくない場合の書き方
[2] 集合ベース(set-based / in)
* 複数キーのどれかに合致する場合などに in を使う
サンプル
selector: matchLabels: app: demo-app matchExpressions: - {key: ver, operator: In, values: [1, 2]}
2)Node Selector
* Podを特定のNodeへスケジューリングする仕組み
サンプル
apiVersion: v1 kind: Pod metadata: name: node-selector spec: containers: - name: nginx image: nginx:alpine # ★ nodeSelector: environment: dev terminationGracePeriodSeconds: 0
3)Field Selector
* 1つかそれ以上のリソースフィールドの値を元にk8sリソースを選択するためのもの
https://kubernetes.io/ja/docs/concepts/overview/working-with-objects/field-selectors/
【3】関連するkubectlコマンド
https://kubernetes.io/ja/docs/tasks/configure-pod-container/assign-pods-nodes/
1)ラベル確認 --show-labelsオプション
# すべてのPod(またはラベル付けをサポートする他のKubernetesオブジェクト) # のラベルのリストを表示します $ kubectl get nodes --show-labels NAME STATUS ROLES AGE VERSION LABELS worker0 Ready <none> 1d v1.13.0 ...,disktype=ssd,kubernetes.io/hostname=worker0
2)ラベル追加 kubectl label
# <your-node-name>は選択したノードの名前 kubectl label nodes <your-node-name> disktype=ssd
3)ラベルでフィルタ -l / --selectorオプション
kubectl get pods -l environment=dev kubectl get node -l 'pool in (apl, ingress)' kubectl get node -l 'tier notin (frontend, backend)'
https://kubernetes.io/ja/docs/concepts/overview/working-with-objects/labels/#api
参考文献
https://gadgeterkun.hatenablog.com/entry/20190716/1563228000
関連記事
Kubernetes ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2020/04/27/224624
Kubernetes ~ Windows / 環境構築編 ~
https://dk521123.hatenablog.com/entry/2020/05/01/000000
Kubernetes ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/05/04/013529
Kubernetes ~ kube-proxy ~
https://dk521123.hatenablog.com/entry/2025/03/22/111422
Kubernetes ~ Health check / Probe ~
https://dk521123.hatenablog.com/entry/2025/03/27/182147