えいのうにっき

a-knowの日記です

Kubernetes における Label と Annotation(入門k8s 読書メモ)

入門 Kubernetes の読書メモ、第2弾。

入門 Kubernetes

入門 Kubernetes

Label

  • オブジェクトのメタデータを特定するためのもの。
    • Kubernetesクラスタ上のオブジェクトをグループ化/一覧表示/操作するときに利用可能。
  • Pod や ReplicaSet などの Kubernetes オブジェクトに付与できる、キーと値のペア。
    • キーにはプレフィックスを指定できる・指定する場合にはプレフィックスはDNSサブドメインである必要がある。

Labelの操作

  • Label を付与するのは、マニフェスト内 metadata で指定するケースが多い。
  • kubectl label コマンドで更新することも可能。
    • 階層構造を持つオブジェクトの上位要素のラベルだけを変更した場合、その上位要素が作成した下位要素のラベルまでは変更されないので注意。
      • 例:Deployments の Label を更新しても、Replicaset や Pod の Label は変更されない。

Label セレクタ

  • Label の集合をもとに Kubernetes オブジェクトをフィルタリングすることができる
    • kubectl get pods --selector="ver=2"
    • kubectl get pods --selector="app=hoge,ver=2"
    • kubectl get pods --selector="app in (hoge,fuga)"
    • kubectl get pods --selector="canary"
      • Label の値は問わず、Labelが設定されていれば表示する
  • ある Kubernetes オブジェクトが他の Kubernetes オブジェクトの集合を参照する際にも、Label セレクタが利用可能。マニフェスト内での指定方法は以下のようになる。
selector:
  matchLabels:
    app: hoge
  matchExpressions:
    - {key: ver, operator: In, values: [1, 2]}

Annotation

  • Label と同じく、キーと値のペア。Kubernetes オブジェクトに対するメタデータを保存する入れ物。
    • 自動化ツールやクライアントライブラリから使用するメタデータを保存するキーバリューストア。
    • オブジェクトに関する不特定の情報を保存する方法とも言える。
      • ツールやライブラリを便利に使用するために必要になる、オブジェクトを特定しない情報を入れられる。
  • Annotation の主な用途:
    • オブジェクトの変更理由の記録
    • 特別なスケジューラへの、特別なスケジュールポリシーの伝達
    • リソースを更新したツールと、それがどのように更新したかの情報の付加
      • 他のツールからの更新検知などのため
    • Deployment オブジェクトによるロールアウトのための、ReplicaSet の追跡情報の保存
    • など。(入門 Kubernetes P.77)
  • Kubernetes にデータを入れておきたいが、そのデータが明確なオブジェクトに関連づいたものでない場合には、Annotationなどは使わず、適切なデータベースを用意するなどの他の保存を検討するほうがよい。

Annotaion の操作

  • 付与する際には、Kubernetes オブジェクトのマニフェスト内・metadata セクションにて定義する。
metadata:
  annotations:
    example.com/icon-url: "https://ecample.com/icon.png"