こんにちわ
がじぇったー (@hackmylife7) | Twitter
です。
KubernetesのLabelとSelectorについて学んでいきます
TL;DR(要約)
Labelとは
LabelはPodやNodeなどにオブジェクトに付加するキーと値のペア。
ユーザにとって意味があり関連性のあるオブジェクトの識別属性を指定するために使用する
Labelはその名の通り
- PodとNodeの関係
- Pod間の関係性
- どのバージョンで
- どの環境で稼働するか
等をマニフェストファイル上で定義することができる
Labelはkey:value形式で定義し、オブジェクトの作成時、または作成した後にattachすることができる
"metadata": { "labels": { "key1" : "value1", "key2" : "value2" } }
なぜラベルを使うのか?
Labelを使うことにより多面的な特性を定義づけることができる
- 本番/開発など、ラベルを使うことにより、どちらの環境にデプロイするのか識別することができる
- リリーストラックの定義(ステージング、プロダクション等、ラベルによってバージョン分けすることができる)
- 複数レイヤー:webの三階層定義などを記載することができる
- マイクロサービス化されたアーキテクチャを定義
ラベルの例
- "release" : "stable", "release" : "canary"
- "environment" : "dev", "environment" : "qa", "environment" : "production"
- "tier" : "frontend", "tier" : "backend", "tier" : "cache"
- "partition" : "customerA", "partition" : "customerB"
- "track" : "daily", "track" : "weekly"
Selector
ラベルとセットで抑える。
Selectorを介して、K8sはオブジェクトを識別することができる
基本的にequality-based(=)またはset-based(in)を元に定義する
equality-based(=)
キーが等が等しい、または等しくない場合の書き方
environment = production
tier != frontend
以下のように『否定』と組み合わせることにより、リソースを絞り込むことができる
environment=production,tier!=frontend
以下はマニフェストファイル上での使用例であるが、Selectorで紐づけるべきPodを指定している
apiVersion: v1 kind: Pod metadata: name: cuda-test spec: containers: - name: cuda-test image: "k8s.gcr.io/cuda-vector-add:v0.1" resources: limits: nvidia.com/gpu: 1 nodeSelector: ※※ここ accelerator: nvidia-tesla-p100
set-based(in)
複数のキーのどれかに合致する場合などは in を使う
こちらは『集合』ベースでリソースを指定することができます
下の例だと、キーがproductionまたはqaに等しい場合(または等しくない場合)に用いられる
environment in (production, qa)
tier notin (frontend, backend)
partition
!partition
ラベルとセレクターの関係
Selectorでラベルを指定することにより、
マニフェストファイル上で紐づけるPodを指定することができる
参考(Kubernetesの最強参考書)

Kubernetes完全ガイド (impress top gear)
- 作者: 青山真也
- 出版社/メーカー: インプレス
- 発売日: 2018/09/21
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
Kubernetesの他の記事へは下記の一覧から飛べるようにしているので参照ください。