ラベルと注釈

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

要するに:

  • アノテーションは、外部ツールとの統合を促進する目的で、追加の非識別情報をリソースに割り当てるために使用されます

  • ラベルを使用してオブジェクトをグループ化し、Kubernetes のネイティブ セレクター機能を介してそれらをクエリします

CloudNativePG のデプロイで使用する 1 つ以上のラベルや注釈を選択できます。次に、クラスターのメタデータでこれらのラベルやアノテーションを定義すると、オペレーターによって作成されたすべてのリソース (ポッドを含む) によってそれらが自動的に継承されるように、オペレーターを構成する必要があります。

注釈

ラベルとアノテーションの継承は、ポッド テンプレートなどの代替アプローチの代わりに 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 は、ラベルまたは注釈の削除を自動的に伝達しません。したがって、アノテーションまたはラベルがクラスターから削除された場合、以前に基礎となる Pod に伝搬されていた場合、オペレーターは関連するリソースでそれを自動的に削除しません。