はじめに
この実験では、Kubernetes で Kubernetes リソースにメタデータのアノテーションを追加または変更するために使用される強力なツールである kubectl annotate コマンドを調べます。アノテーションは、キーと値のペアの形式で Kubernetes リソースに任意のメタデータを付加するために使用され、Kubernetes システム自体では使用されないが、外部ツールやプロセスで利用できるリソースに関する追加情報を格納するために使用できます。
この実験全体を通して、簡単な例から始めて、徐々に kubectl annotate コマンドのより複雑なユースケースに向かって進み、さまざまなシナリオでのその汎用性と有用性を示します。
前提条件
- Kubernetes の概念とコマンドの基本的な理解
kubectlがインストールされ、構成された Kubernetes クラスタのセットアップ
Minikube クラスタを起動する
リソースを作成する前に、動作している Kubernetes クラスタが必要です。Minikube は、ローカル マシン上で動作する軽量の Kubernetes 環境です。
作業ディレクトリに移動する:
ターミナルを開き、デフォルトのプロジェクト フォルダに移動します。
cd /home/labex/projectMinikube を起動する:
Minikube を起動して Kubernetes クラスタを初期化します。
minikube start- このコマンドは、ローカル マシン上に単一ノードの Kubernetes クラスタをセットアップします。
- Minikube は、システムの性能に応じて数分かかる場合があります。
Minikube が動作していることを確認する:
Minikube クラスタの状態を確認します。
minikube statuskubeletやapiserverなどのコンポーネントがRunningと表示されていることを確認します。- クラスタが動作していない場合は、
minikube startを再度実行します。
Minikube の起動に問題がある場合は、必要に応じて minikube delete を使用して環境をリセットします。
kubectl annotate コマンドを調べる
kubectl annotate コマンドは、Kubernetes リソースのアノテーションを更新または削除するために使用されます。アノテーションは、任意の文字列を含むこともできるメタデータを格納するキーと値のペアです。また、構造化された JSON も含むことができます。これらは、ツールや拡張機能がデータを格納するのに役立ちます。
kubectl annotate の利用可能なオプションを表示するには、次のコマンドを実行します。
kubectl annotate -h
次の出力が表示されます。
1つ以上のリソースのアノテーションを更新します。
すべての Kubernetes オブジェクトは、アノテーションとしてオブジェクトに追加データを格納する機能をサポートしています。アノテーションは、ラベルよりも大きくなる可能性があり、構造化された JSON などの任意の文字列を含むキー/値ペアです。ツールやシステム拡張機能は、独自のデータを格納するためにアノテーションを使用する場合があります。
既に存在するアノテーションを設定しようとすると、--overwrite が設定されていない限り失敗します。--resource-version が指定され、サーバー上の現在のリソース バージョンと一致しない場合、コマンドは失敗します。
サポートされているリソースの完全な一覧については、「kubectl api-resources」を使用してください。
例:
## ポッド 'foo' に 'description' というアノテーションを設定し、値を'my frontend' に更新します
## 同じアノテーションを複数回設定した場合、最後の値のみが適用されます
kubectl annotate pods foo description='my frontend'
## "pod.json" で型と名前によって識別されるポッドを更新します
kubectl annotate -f pod.json description='my frontend'
## ポッド 'foo' に 'description' というアノテーションを設定し、値を'my frontend running nginx' に更新し、既存の値を上書きします
kubectl annotate --overwrite pods foo description='my frontend running nginx'
## 名前空間内のすべてのポッドを更新します
kubectl annotate pods --all description='my frontend running nginx'
## リソースがバージョン1から変更されていない場合のみ、ポッド 'foo' を更新します
kubectl annotate pods foo description='my frontend running nginx' --resource-version=1
## ポッド 'foo' を更新して、存在する場合は 'description' という名前のアノテーションを削除します
## --overwrite フラグは必要ありません
kubectl annotate pods foo description-
単一のキー - 値ペアで Pod にアノテーションを付ける
このステップでは、kubectl annotate コマンドを使用して、単一のキーと値のペアでポッドにアノテーションを付ける簡単な例から始めます。
/home/labex/projectディレクトリにpod.yamlという名前のファイルを作成し、以下の内容を記述します。
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: nginx
image: nginx
以下のコマンドでポッドを作成します。
kubectl apply -f pod.yaml
kubectl annotateコマンドを使用して、ポッドにアノテーションを追加します。
kubectl annotate pod my-pod my-annotation-key=my-annotation-value
- ポッドにアノテーションが追加されたことを確認します。
kubectl describe pod my-pod | grep Annotations
出力に、値 my-annotation-value を持つアノテーション my-annotation-key が表示されるはずです。
複数のキー - 値ペアで Pod にアノテーションを付ける
このステップでは、kubectl annotate コマンドを使用してポッドに複数のアノテーションを追加する方法を調べます。
kubectl annotateコマンドを使用して、ポッドに複数のアノテーションを追加します。
kubectl annotate pod my-pod my-annotation-key-1=my-annotation-value-1 my-annotation-key-2=my-annotation-value-2
- ポッドにアノテーションが追加されたことを確認します。
kubectl describe pod my-pod | grep my-annotation-key
出力に、それぞれの対応する値を持つ my-annotation-key-1 と my-annotation-key-2 の両方のアノテーションが表示されるはずです。
既存のアノテーションを更新する
このステップでは、kubectl annotate コマンドを使用して、既存のポッドのアノテーションを更新する方法を学びます。
kubectl annotateコマンドを使用して、ポッドの既存のアノテーションの値を更新します。
kubectl annotate pod my-pod my-annotation-key-1=new-value --overwrite=true
- ポッドのアノテーションが更新されたことを確認します。
kubectl describe pod my-pod | grep my-annotation-key-1
出力に my-annotation-key-1 の更新された値が表示されるはずです。
アノテーションを削除する
このステップでは、kubectl annotate コマンドを使用してポッドからアノテーションを削除する方法を見ていきます。
--overwriteフラグ付きでkubectl annotateコマンドを使用して、ポッドからアノテーションを削除します。
kubectl annotate pod my-pod my-annotation-key-2- ## 末尾のダッシュに注意
- ポッドからアノテーションが削除されたことを確認します。
kubectl describe pod my-pod | grep my-annotation-key-2
出力に my-annotation-key-2 のアノテーションが表示されないはずです。
異なるリソースにアノテーションを付ける
このステップでは、kubectl annotate コマンドを使用して、Deployment などの異なるリソースにアノテーションを付ける方法を調べます。
/home/labex/projectディレクトリにdeployment.yamlという名前のファイルを作成し、以下の内容を記述します。
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: nginx
image: nginx
以下のコマンドでデプロイメントを作成します。
kubectl apply -f deployment.yaml
kubectl annotateコマンドを使用して、デプロイメントにアノテーションを追加します。
kubectl annotate deployment my-deployment my-annotation-key=my-annotation-value
- デプロイメントにアノテーションが追加されたことを確認します。
kubectl describe deployment my-deployment
出力に、値 my-annotation-value を持つアノテーション my-annotation-key が表示されるはずです。
まとめ
この実験では、Kubernetes リソースにアノテーションを追加、更新、削除するための kubectl annotate コマンドの使い方を学びました。まず、単一のキーと値のペア、および複数のキーと値のペアでポッドにアノテーションを付ける単純な例から始め、既存のアノテーションを更新したり、Deployment のような異なるリソースにアノテーションを付けるような高度なユースケースを調べました。アノテーションは、Kubernetes リソースに追加のメタデータを付加し、外部ツールやプロセスに有用な情報を提供する強力なツールになる可能性があります。


