ラベルとアノテーション

Kubernetesのリソースはフラット構造で編成され、それらの間に階層情報や関係はありません。ただし、そのようなリソースとオブジェクトは、 ラベル と 注釈 を介してリンクし、関係付けることができます。

注釈

詳細については、 ラベルとアノテーション および ラベルとアノテーション に関する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はラベルまたはアノテーションの削除を自動的に伝播しません。したがって、以前に基になるポッドに伝播されたアノテーションまたはラベルがクラスターから削除されると、オペレーターは関連付けられたリソースから自動的に削除しません。