ラベルとアノテーション¶
Kubernetesのリソースはフラット構造で編成され、それらの間に階層情報や関係はありません。ただし、このようなリソースとオブジェクトは、 ラベル と アノテーション を介してリンクして関係付けることができます。
要するに:
アノテーションは、外部ツールとの統合を促進することを目的として、追加の非識別情報を割り当てるために使用されます
ラベルはオブジェクトをグループ化し、Kubernetesのネイティブセレクター機能を介して照会するために使用されます
CloudNativePG展開で使用する1つ以上のラベルまたはアノテーションを選択できます。次に、クラスターのメタデータでこれらのラベルやアノテーションを定義すると、それによって作成されたすべてのリソース(ポッドを含む)に自動的に継承されるように、オペレーターを構成する必要があります。
注釈
ラベルとアノテーションの継承は、Podテンプレートなどの代替アプローチの代わりにCloudNativePGが採用する手法です。
前提条件¶
- デフォルトでは、クラスターのメタデータで定義されたラベルまたはアノテーションは関連するリソースに継承されません。ラベル/アノテーションの継承を有効にするには、
オペレーター設定 セクションの指示に従う必要があります。
以下では、その例を続行し、以下に制限します。
注釈:
categoriesラベル:
app、environment、およびworkload
注釈
注釈とラベルの両方に、コンテキストに最も適した名前を自由に選択してください。命名にワイルドカードを使用し、 mycompany/ で始まるすべてのラベルまたは注釈を継承するために mycompany/* などの戦略を採用できることに注意してください。
クラスターのメタデータの定義¶
クラスターを定義する場合、リソースをデプロイする前に、次のようにメタデータを適切に設定できます。
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
name: cluster-example
annotations:
categories: database
labels:
environment: production
workload: database
app: sso
spec:
# ... <snip>
クラスターがデプロイされたら、たとえば、次のコマンドを使用して、ポッドにラベルが正しく設定されていることを確認できます。
kubectl get pods --show-labels
現在の制限¶
現在、CloudNativePGはラベルまたはアノテーションの削除を自動的に伝播しません。したがって、以前に基になるポッドに伝播されたアノテーションまたはラベルがクラスターから削除されても、オペレーターは関連するリソースから自動的に削除しません。