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

- 作者:Kelsey Hightower,Brendan Burns,Joe Beda
- 発売日: 2018/03/22
- メディア: 単行本(ソフトカバー)
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"