KubernetesのLabelとAnnotationの使い分けについて




LabelとAnnotation

KubernetesにはDeploymentやServiceなどのリソースにLabelとAnnotationという識別子をつけることができます。

それぞれ役割があるので説明したいと思います。

Label

Labelは他のリソースから参照するときに使用します。

例えば、IngressからServiceにリクエスを流すとき、ServiceからDeploymentで設定しているLabelを指定することでリクエストを制御することができます。

まず、service.yamlのselectorでkey: app、value: sample-deploymentというLabelを作ります。

# service.yaml
apiVersion: v1
kind: Service
metadata:
  name: sample-service
spec:
  selector:
    app: sample-deployment

次にdeployment.yamlにselector.matchLabelsにkey: app、value: sample-deploymentのLabelを追加するだけです。

# deployment.yaml
apiVersion: v1
kind: Deployment
metadata:
  name: sample-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: sample-deployment

これだけでリクエストをServiceからDeploymentに流せます。

Labelの使い方はこんな感じです。

Annotation

Annotationも識別子をつけるためなのですが、用途が少し違います。

下記ドキュメントにも書いてありますが、基本的にメタデータを保持させておきます。

https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/

例えば、イメージのビルドID、リリース時のタイムスタンプなど、バージョンに関する情報を持たせたりします。

Annotationにはバージョン情報などのメタデータを持たせるので、CIでつけるのがいいかと思います。下記コマンドで付けることができます。

$ kubectl annotate --overwrite deployment sample-deployment image=BUILD_ID

おすすめ書籍

Dockerの使い方から説明されているので初心者の方も安心して学べる書籍です。

Kubernetesに関してはPod, Service, Deploymentなどを順を追って説明し、実際に動かすところまでを解説しているので非常に実践的な内容となっています。

これからKuebernetesを使ってサービスを開発してみたい方にとって最初のよい手助けとなると思います。是非読んでみてください。

 

The following two tabs change content below.

髙妻智一

2013年CyberAgent新卒入社 スマホゲームを作る子会社に所属し、サーバーサイドのエンジニアを担当。2年目の終わりから新規子会社の立ち上げに参加し、サーバーサイドのエンジニアリーダーとしてサービースのリリースから運用までを担当。 2018年仮想通貨のスマホウォレットを提供するGinco Incにブロックチェーンエンジニアとして入社。






よく読まれている関連記事はこちら




コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です