がじぇったー

お金と家電とプログラミングのブログ

マニフェストファイルで使われるLabelとSelectorについて

こんにちわ

がじぇったー (@hackmylife7) | Twitter


です。


KubernetesのLabelとSelectorについて学んでいきます


f:id:gadgeterkun:20190706230722p:plain

TL;DR(要約)


  • LabelはPodやNodeなどのオブジェクトに付加するKeyとValueのペアであり、Selectorでそのラベルを指定することによりマニフェストファイル上で紐づける対象のオブジェクトを選択できる


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)

Kubernetes完全ガイド (impress top gear)



Kubernetesの他の記事へは下記の一覧から飛べるようにしているので参照ください。

gadgeterkun.hatenablog.com