ラベルとアノテーション
======================
.. raw:: html
Kubernetesのリソースはフラット構造で編成され、階層情報やそれらの間の関係はありません。ただし、このようなリソースとオブジェクトは、
*ラベル* と *アノテーション*
を介してリンクし、関係にすることができます。
.. Note::
詳細については、 `annotations `_ および `labels `_ に関するKubernetesドキュメントを参照してください。
簡単に言うと
- アノテーションは、外部ツールとの統合を促進することを目的に、追加の非識別情報をリソースに割り当てるために使用されます。
- ラベルは、オブジェクトをグループ化し、Kubernetesネイティブセレクター機能を介して照会するために使用されます。
CloudNativePG展開で使用する1つ以上のラベルまたはアノテーションを選択できます。次に、クラスターのメタデータでこれらのラベルまたはアノテーションを定義すると、それによって作成されたすべてのリソースポッドを含むすべてに継承されるようにオペレーターを構成する必要があります。
.. Note::
ラベルとアノテーションの継承は、ポッドテンプレートなどの代替アプローチの代わりにCloudNativePGによって採用された技術です。
事前定義されたラベル
--------------------
CloudNativePGは、次の事前定義されたラベルを管理します。
``cnpg.io/backupDate`` ISO 8601形式のバックアップの日付 ``YYYYMMDD``
。このラベルは、\ ``VolumeSnapshot`` リソースでのみ使用できます。
``cnpg.io/backupName``
バックアップ識別子。このラベルは、\ ``VolumeSnapshot``
リソースでのみ使用できます。
``cnpg.io/backupMonth``
バックアップが取られた年/月。このラベルは、\ ``VolumeSnapshot``
リソースでのみ使用できます。
``cnpg.io/backupTimeline``
バックアップが作成されたときのインスタンスのタイムライン。このラベルは、\ ``VolumeSnapshot``
リソースでのみ使用できます。
``cnpg.io/backupYear``
バックアップが取られた年。このラベルは、\ ``VolumeSnapshot``
リソースでのみ使用できます。
``cnpg.io/cluster`` クラスターの名前。
``cnpg.io/immediateBackup`` バックアップが\ ``immediate`` が\ ``true``
に設定されている\ ``ScheduledBackup``
オブジェクトから作成された最初のバックアップである場合、 ``Backup``
リソースに適用されます。
``cnpg.io/instanceName``
PostgreSQLインスタンスの名前古くて非推奨の\ ``postgresql``
ラベルを置き換えます。
``cnpg.io/jobRole`` ジョブのロールつまり ``import`` 、\ ``initdb``
、\ ``join`` , …
``cnpg.io/onlineBackup``
バックアップがオンラインであるかホットか、Postgresがダウンしているときに取得されたかコールド。このラベルは、\ ``VolumeSnapshot``
リソースでのみ使用できます。
``cnpg.io/podRole``
プーラー展開専用のポッドをデータベースインスタンスに使用するポッドから区別します。
``cnpg.io/poolerName`` PgBouncerプーラーの名前。
``cnpg.io/pvcRole`` ``PG_DATA`` や\ ``PG_WAL`` などのPVCの目的。
``cnpg.io/reload`` ``ConfigMap`` および\ ``Secret``
リソースで使用できます。 ``true``
に設定されている場合、リソースの変更はオペレーターによって自動的にリロードされます。
``cnpg.io/userType`` ``Secret`` 、\ ``superuser``
Postgresスーパーユーザーアクセスまたは\ ``app``
CloudNativePG用語でアプリケーションレベルのユーザーのいずれかに関連付けられているPostgreSQLユーザーのタイプを指定し、CloudNativePGによって作成されたデフォルトユーザー通常は\ ``postgres``
および\ ``app`` に制限されています。
``role`` - **非推奨** ポッドで実行されているインスタンスが\ ``primary``
または\ ``replica``
であるかどうか。このラベルは非推奨です。代わりに\ ``cnpg.io/instanceRole``
を使用する必要があります。
``cnpg.io/scheduled-backup`` 使用可能な場合、特定の\ ``Backup``
オブジェクトを作成した\ ``ScheduledBackup`` リソースの名前。
``cnpg.io/instanceRole``
ポッドで実行されているインスタンスが\ ``primary`` または\ ``replica``
かどうか。
事前定義されたアノテーション
----------------------------
CloudNativePGは、次の事前定義されたアノテーションを管理します。
``container.apparmor.security.beta.kubernetes.io/*``
名前付けたコンテナに適用するAppArmorプロファイルの名前。
:ref:`AppArmorを使用してポッドアクセスを制限する ` を参照
詳細については。
``cnpg.io/backupEndTime``
バックアップが終了した時刻。このアノテーションは、\ ``VolumeSnapshot``
リソースでのみ使用できます。
``cnpg.io/backupEndWAL``
バックアップ終了時のWAL。このアノテーションは、\ ``VolumeSnapshot``
リソースでのみ使用できます。
``cnpg.io/backupStartTime`` バックアップが開始された時刻。
``cnpg.io/backupStartWAL``
バックアップ開始時のWAL。このアノテーションは、\ ``VolumeSnapshot``
リソースでのみ使用できます。
``cnpg.io/coredumpFilter``
Postgresプロセスのコアダンプを制御するフィルター、ビットマスクで表現されます。デフォルトでは、ダンプから共有メモリセグメントを除外するように\ ``0x31``
に設定されます。 :ref:`PostgreSQLコアダンプ ` を参照
詳細については、
``cnpg.io/clusterManifest`` このリソースPVCなどを所有する\ ``Cluster``
のマニフェスト。このラベルは、古い非推奨の\ ``cnpg.io/hibernateClusterManifest``
ラベルを置き換えます。
``cnpg.io/fencedInstances``
JSON形式で表現された、フェンスする必要があるインスタンスのリスト。リストに\ ``*``
要素が含まれる場合、クラスター全体がフェンスされます。
``cnpg.io/forceLegacyBackup`` テスト目的のみで\ ``Cluster``
リソースに適用され、バージョン3.4 2023年1月より前の\ ``--name``
オプションが使用できなかった場合の\ ``barman-cloud-backup``
の動作をシミュレートします。
``cnpg.io/hash`` リソースのハッシュ値。
``cnpg.io/hibernation`` ``Cluster`` リソースに適用されて、
:ref:`declarative hibernation feature <宣言的ハイバーネーション>` を制御します。許可される値は\ ``on`` および\ ``off`` です。
``cnpg.io/managedSecrets``
オペレーターによって管理され、各Postgresクラスターの\ ``ServiceAccount``
リソースに自動的に設定されるシークレットをプルします。
``cnpg.io/nodeSerial``
ポッドリソースで、Postgresクラスター内のインスタンスのシリアル番号を識別します。
``cnpg.io/operatorVersion`` オペレーターのバージョン。
``cnpg.io/pgControldata`` ``pg_controldata``
コマンドの出力。このアノテーションは、古い非推奨の\ ``cnpg.io/hibernatePgControlData``
アノテーションを置き換えます。
``cnpg.io/podEnvHash`` ``cnpg.io/podSpec``
アノテーションにもポッド環境が含まれるため、非推奨。
``cnpg.io/podPatch`` アノテーションは\ ``Cluster``
リソースに適用できます。
JSONパッチ形式のパッチに設定されている場合、パッチはインスタンスポッドに適用されます。
**⚠️警告**
この機能は、オペレーターの予想とKubernetesの動作間の不一致を導入する可能性があります。最後の手段としてのみ使用してください。
**重要**
このアノテーションを追加または変更しても、生成されたポッドのローリング展開はトリガーされません。後者は、\ ``kubectl cnpg restart``
を使用してユーザーが手動でトリガーできます。
``cnpg.io/podSpec`` オペレーターによって生成されたポッドの\ ``spec``
のスナップショット。このアノテーションは、古い非推奨の\ ``cnpg.io/podEnvHash``
アノテーションを置き換えます。
``cnpg.io/poolerSpecHash`` プーラーリソースのハッシュ。
``cnpg.io/pvcStatus`` PVCの現在のステータス ``initializing``
、\ ``ready`` 、または\ ``detached`` 。
``cnpg.io/reconcilePodSpec`` アノテーションを\ ``Cluster``
または\ ``Pooler`` に適用して、再起動を防止できます。
``Cluster`` で\ ``disabled``
に設定されている場合、オペレーターはPodSpecの変更によるインスタンスが再起動しないようにします。これには、次の変更が含まれます。
- トポロジまたはアフィニティ - スケジューラー - ボリュームまたはコンテナ
``Pooler`` で\ ``disabled``
に設定されている場合、オペレーターは\ ``spec.instances``
への変更を除き、展開仕様の変更を制限します。
``cnpg.io/reconciliationLoop`` ``Cluster`` で\ ``disabled``
に設定されている場合、オペレーターは調整ループの実行を防止します。
``cnpg.io/reloadedAt`` 最新のクラスター\ ``reload`` 時間が含まれます。
``reload`` は、プラグインを介してユーザーによってトリガーされます。
``cnpg.io/skipEmptyWalArchiveCheck`` ``Cluster`` リソースで\ ``enabled``
に設定されている場合、オペレーターは、データを書き込む前にWALアーカイブが空であることを確認するチェックを無効にします。自分の責任で使用してください。
``cnpg.io/skipWalArchiving`` ``Cluster`` リソースで\ ``enabled``
に設定されている場合、オペレーターはWALアーカイブを無効にします。これにより、\ ``archive_mode``
が\ ``off``
に設定され、すべてのPostgreSQLインスタンスの再起動が必要です。自分の責任で使用してください。
``cnpg.io/snapshotStartTime`` スナップショットが開始された時刻。
``cnpg.io/snapshotEndTime``
スナップショットが使用する準備ができているとしてマークされた時間。
``cnpg.io/validation``
CloudNativePG管理のカスタムリソースで\ ``disabled``
に設定されている場合、検証Webhookは制限なしですべての変更を許可します。
**⚠️警告**
検証を無効にすると、安全でないまたは破壊的な操作が許可される場合があります。この設定は、自己の責任で注意して使用してください。
``cnpg.io/volumeSnapshotDeadline`` ``Backup``
および\ ``ScheduledBackup``
リソースに適用され、ボリュームスナップショットのバックアップが失敗したとみなす前に、オペレーターが回復可能なエラーを再試行する時間を制御できます。分単位、デフォルト10
``kubectl.kubernetes.io/restartedAt``
利用可能な場合、最後にPostgresクラスターの再起動が要求された時間。
前提条件
--------
デフォルトでは、クラスターのメタデータで定義されたラベルまたはアノテーションは、関連付けられたリソースに継承されません。ラベル/アノテーションの継承を有効にするには、
:ref:`オペレーター設定 <オペレーター設定>` で提供されている手順に従ってください。
以下はその例の続きであり、次のことに制限します。
- アノテーション ``categories``
- ラベル ``app`` 、\ ``environment`` 、および\ ``workload``
.. Note::
注釈とラベルの両方に、コンテキストに最も適した名前を自由に選択してください。名前付けにワイルドカードを使用し、すべてのラベルに`mycompany/*` を使用したり、`mycompany/` で始まるアノテーションを継承するように設定したりするなどの戦略を採用することもできます。
クラスターのメタデータの定義
----------------------------
クラスターを定義するときに、リソースがデプロイされる前に、次のようにメタデータを設定できます。
.. code:: yaml
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
name: cluster-example
annotations:
categories: database
labels:
environment: production
workload: database
app: sso
spec:
# ...
クラスターが展開されると、たとえば、ポッドにラベルが正しく設定されたことを確認できます。
.. code:: shell
kubectl get pods --show-labels
現在の制限
----------
現在、CloudNativePGは、ラベルまたはアノテーションの削除を自動的に伝播しません。したがって、以前に基になるポッドに伝播されたクラスターからアノテーションまたはラベルが削除される場合、オペレーターは、関連するリソースでそれを削除しません。