1. 導入:なぜリソースに「付箋」が必要なのか?
Kubernetes(K8s)で運用をしていると、「このPodは誰がいつデプロイしたのか?」「このサービスはどの監視ツールが監視しているのか?」といった情報を、リソース自体に持たせたい場面が出てきます。
そんな時に役立つのが「アノテーション(Annotation)」です。アノテーションは、システム側が直接利用するデータではありませんが、人間や外部ツールが運用情報を共有するための「付箋」として非常に強力です。これを使うことで、運用のトレーサビリティ(追跡可能性)が飛躍的に向上します。
2. 基礎知識:アノテーションとラベルは何が違う?
初心者の方がよく迷うのが「ラベル(Label)」との違いです。
ラベルは、PodやServiceをグループ化したり、特定の条件で検索(セレクタ)したりするために使います。いわば「分類タグ」です。
一方、アノテーションは、検索には使われません。デプロイ日時、GitHubのコミットハッシュ、担当者の連絡先など、メタデータ(付随情報)を記録しておくための場所です。システム動作には影響を与えませんが、運用を円滑にするための「メモ帳」と考えてください。
3. 実装/解決策:kubectl annotateを使ってみよう
kubectl annotateコマンドを使用すると、既存のリソースに対して簡単にアノテーションを付与できます。
基本的な構文は「kubectl annotate [リソース名] [リソース識別子] [キー]=[値]」です。
例えば、デプロイした担当者情報を記録したい場合は、以下のように実行します。
4. サンプルプログラム:実践的なコマンド例
以下のコードは、実際に現場でよく利用されるアノテーション付与の例です。まずはターミナルで試してみてください。
1. 特定のPodに「デプロイ担当者」と「チーム名」のアノテーションを付与する
kubectl annotate pod my-app-pod deployer=yamada team=platform-engineering
2. 既存のアノテーションを上書き・更新する場合(–overwriteフラグが必要)
kubectl annotate pod my-app-pod deployer=tanaka –overwrite
3. リソースの状態を確認し、アノテーションが付いたか確認する
kubectl get pod my-app-pod -o yaml
— 動作確認用:YAML形式での記述例(定義ファイルに含める場合) —
apiVersion: v1
kind: Pod
metadata:
name: my-app-pod
annotations:
# 運用自動化ツールが参照する情報をここに記述します
description: “本番環境用フロントエンドPod”
managed-by: “argo-cd”
deployed-at: “2023-10-27T10:00:00Z”
spec:
containers:
- name: nginx
image: nginx
5. 応用・注意点:現場で陥りやすい罠
アノテーション運用で注意すべきポイントが3つあります。
1. 検索対象外であることを理解する: ラベルと違い、アノテーションを条件にして「特定のPodだけ抽出する」といった操作はできません。検索が必要な情報は必ずラベルに入れましょう。
2. 長すぎる値を入れない: アノテーションの値は文字列ですが、あまりに巨大なデータを詰め込むと、リソース定義が肥大化し、APIサーバーへの負荷や制限に引っかかる可能性があります。あくまで「メモ」として運用しましょう。
3. 自動化ツールとの連携: 近年では、Argo CDのようなデプロイツールが自動でアノテーションを付与してくれます。手動で付与したものと競合しないよう、キー名には「company.com/deployer」のように、独自の名前空間(プレフィックス)を付ける習慣をつけると、管理が非常に楽になります。
まずは手元の開発環境で、ぜひ一度アノテーションを付与して、リソースの状態を覗いてみてください。運用の透明性がぐっと高まるはずです!

コメント