Labels and annotations
======================

Kubernetesのリソースはフラット構造で編成され、階層情報やそれらの間の関係はありません。ただし、このようなリソースとオブジェクトは、\_labels_および_annotations_を介してリンクし、関係を置くことができます。

..  Note::
   詳細については、 `annotations <https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/>`_ および `labels <https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/>`_ に関するKubernetesドキュメントを参照してください。

簡単に言うと

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

- ラベルは、オブジェクトをグループ化し、Kubernetesネイティブセレクター機能を介して照会するために使用されます。

Kubernetes展開のEDB
Postgresで使用する1つ以上のラベルまたはアノテーションを選択できます。次に、クラスターのメタデータでこれらのラベルまたはアノテーションを定義すると、それによって作成されたすべてのリソースポッドを含むすべてに継承されるようにオペレーターを構成する必要があります。

..  Note::
   ラベルとアノテーションの継承は、ポッドテンプレートなどの代替アプローチの代わりにKubernetesのEDB Postgresで採用された技術です。

事前定義されたラベル
--------------------

これらの事前定義されたラベルは、 EDB Postgres for
Kubernetesによって管理されます。

``k8s.enterprisedb.io/backupDate`` ISO 8601形式のバックアップの日付
``YYYYMMDD``

``k8s.enterprisedb.io/backupName`` バックアップ識別子、\ ``Backup``
および\ ``VolumeSnapshot`` リソースでのみ使用可能

``k8s.enterprisedb.io/backupMonth`` バックアップが取られた年/月

``k8s.enterprisedb.io/backupTimeline``
バックアップが取られたインスタンスのタイムライン

``k8s.enterprisedb.io/backupYear`` バックアップが取られた年

``k8s.enterprisedb.io/cluster`` クラスターの名前

``k8s.enterprisedb.io/immediateBackup`` バックアップが\ ``immediate``
が\ ``true`` に設定されている\ ``ScheduledBackup``
オブジェクトから作成された最初のバックアップである場合、 ``Backup``
リソースに適用されます

``k8s.enterprisedb.io/instanceName``
PostgreSQLインスタンスの名前古い非推奨の\ ``postgresql``
ラベルを置き換えます

``k8s.enterprisedb.io/jobRole`` ジョブのロールつまり ``import``
、\ ``initdb`` 、\ ``join`` , …

``k8s.enterprisedb.io/onlineBackup``
バックアップがオンラインであるかホットか、Postgresがダウンしているときに取得されたかコールド

``postgresql``
非推奨、PostgreSQLインスタンスの名前。代わりに\ ``k8s.enterprisedb.io/instanceName``
を使用してください

``k8s.enterprisedb.io/podRole``
プーラー展開専用のポッドとデータベースインスタンスに使用されるポッドを区別します

``k8s.enterprisedb.io/poolerName`` PgBouncerプーラーの名前

``k8s.enterprisedb.io/pvcRole`` ``PG_DATA`` や\ ``PG_WAL``
などのPVCの目的

``k8s.enterprisedb.io/reload`` ``ConfigMap`` および\ ``Secret``
リソースで使用できます。 ``true``
に設定されている場合、リソースの変更はオペレーターによって自動的にリロードされます。

``k8s.enterprisedb.io/userType`` ``Secret`` 、\ ``superuser``
Postgresスーパーユーザーアクセスまたは\ ``app`` EDB Postgres for
Kubernetes用語のアプリケーションレベルのユーザーのいずれかに関連付けられているPostgreSQLユーザーのタイプを指定し、
EDB Postgres for
Kubernetesによって作成されたデフォルトユーザーに制限されます\ ``postgres``
および\ ``app`` ）。

``role`` - **非推奨** ポッドで実行されているインスタンスが\ ``primary``
または\ ``replica``
であるかどうか。このラベルは非推奨です。代わりに\ ``k8s.enterprisedb.io/instanceRole``
を使用する必要があります。

``k8s.enterprisedb.io/scheduled-backup``
使用可能な場合、特定の\ ``Backup``
オブジェクトを作成した\ ``ScheduledBackup`` リソースの名前

``k8s.enterprisedb.io/instanceRole``
ポッドで実行されているインスタンスが\ ``primary`` または\ ``replica``
かどうか。

事前定義されたアノテーション
----------------------------

これらの事前定義されたアノテーションは、EDB Postgres for
Kubernetesによって管理されます。

``container.apparmor.security.beta.kubernetes.io/*``
名前付けたコンテナに適用するAppArmorプロファイルの名前。
:ref:`AppArmorを使用してポッドアクセスを制限する <AppArmorを使用してポッドアクセスを制限する>` を参照

詳細については。

``k8s.enterprisedb.io/backupEndTime`` バックアップが終了した時刻。

``k8s.enterprisedb.io/backupEndWAL`` バックアップ終了時のWAL。

``k8s.enterprisedb.io/backupStartTime`` バックアップが開始された時刻。

``k8s.enterprisedb.io/backupStartWAL`` バックアップ開始時のWAL。

``k8s.enterprisedb.io/coredumpFilter``
Postgresプロセスのコアダンプを制御するフィルター、ビットマスクで表現されます。デフォルトでは、ダンプから共有メモリセグメントを除外するように\ ``0x31``
に設定されます。 :ref:`PostgreSQLコアダンプ <PostgreSQLコアダンプ>` を参照

詳細については、

``k8s.enterprisedb.io/clusterManifest``
このリソースPVCなどを所有する\ ``Cluster``
のマニフェスト。このラベルは、古い非推奨の\ ``k8s.enterprisedb.io/hibernateClusterManifest``
ラベルを置き換えます。

``k8s.enterprisedb.io/fencedInstances``
JSON形式で表現された、フェンスする必要があるインスタンスのリスト。リストに\ ``*``
要素が含まれる場合、クラスター全体がフェンスされます。

``k8s.enterprisedb.io/forceLegacyBackup`` テスト目的のみで\ ``Cluster``
リソースに適用され、バージョン3.4 2023年1月より前の\ ``--name``
オプションが使用できなかった場合の\ ``barman-cloud-backup``
の動作をシミュレートします。

``k8s.enterprisedb.io/hash`` リソースのハッシュ値。

``k8s.enterprisedb.io/hibernation`` ``Cluster`` リソースに適用されて、
:ref:`declarative hibernation feature <Declarative hibernation>` を制御します。許可される値は\ ``on`` および\ ``off`` です。

``k8s.enterprisedb.io/managedSecrets``
オペレーターによって管理され、各Postgresクラスターの\ ``ServiceAccount``
リソースに自動的に設定されるシークレットをプルします。

``k8s.enterprisedb.io/nodeSerial``
ポッドリソースで、Postgresクラスター内のインスタンスのシリアル番号を識別します。

``k8s.enterprisedb.io/operatorVersion`` オペレーターのバージョン。

``k8s.enterprisedb.io/pgControldata`` ``pg_controldata``
コマンドの出力。このアノテーションは、古い非推奨の\ ``k8s.enterprisedb.io/hibernatePgControlData``
アノテーションを置き換えます。

``k8s.enterprisedb.io/podEnvHash`` ``k8s.enterprisedb.io/podSpec``
アノテーションにもポッド環境が含まれるため、非推奨。

``k8s.enterprisedb.io/podSpec``
オペレーターによって生成されたポッドの\ ``spec``
のスナップショット。このアノテーションは、古い非推奨の\ ``k8s.enterprisedb.io/podEnvHash``
アノテーションを置き換えます。

``k8s.enterprisedb.io/poolerSpecHash`` プーラーリソースのハッシュ。

``k8s.enterprisedb.io/pvcStatus`` PVCの現在のステータス ``initializing``
、\ ``ready`` 、または\ ``detached`` 。

``k8s.enterprisedb.io/reconcilePodSpec`` アノテーションを\ ``Cluster``
または\ ``Pooler`` に適用して、再起動を防止できます。

::

   When set to `disabled` on a `Cluster`, the operator prevents instances
   from restarting due to changes in the PodSpec. This includes changes to:

     - Topology or affinity
     - Scheduler
     - Volumes or containers

   When set to `disabled` on a `Pooler`, the operator restricts any modifications
   to the deployment specification, except for changes to `spec.instances`.

``k8s.enterprisedb.io/reconciliationLoop`` ``Cluster`` で\ ``disabled``
に設定されている場合、オペレーターは調整ループの実行を防止します。

``k8s.enterprisedb.io/reloadedAt`` 最新のクラスター\ ``reload``
時間が含まれます。 ``reload``
は、プラグインを介してユーザーによってトリガーされます。

``k8s.enterprisedb.io/skipEmptyWalArchiveCheck`` ``Cluster``
リソースで\ ``true``
に設定されている場合、オペレーターは、データを書き込む前にWALアーカイブが空であることを確認するチェックを無効にします。自分の責任で使用してください。

``k8s.enterprisedb.io/skipWalArchiving`` ``Cluster``
リソースで\ ``enabled``
に設定されている場合、オペレーターはWALアーカイブを無効にします。これにより、\ ``archive_mode``
が\ ``off``
に設定され、すべてのPostgreSQLインスタンスの再起動が必要です。自分の責任で使用してください。

``k8s.enterprisedb.io/snapshotStartTime``
スナップショットが開始された時刻。

``k8s.enterprisedb.io/snapshotEndTime``
スナップショットが使用する準備ができているとしてマークされた時間。

``kubectl.kubernetes.io/restartedAt``
利用可能な場合、最後にPostgresクラスターの再起動が要求された時間。

前提条件
--------

デフォルトでは、クラスターのメタデータで定義されたラベルまたはアノテーションは、関連付けられたリソースに継承されません。ラベル/アノテーションの継承を有効にするには、
:ref:`Operator configuration <Operator configuration>`  で提供されている手順に従ってください。

以下はその例の続きであり、次のことに制限します。

- アノテーション ``categories``

- ラベル ``app`` 、\ ``environment`` 、および\ ``workload``

..  Note::
   注釈とラベルの両方に、コンテキストに最も適した名前を自由に選択してください。名前付けにワイルドカードを使用し、すべてのラベルに`mycompany/*` を使用したり、`mycompany/` で始まるアノテーションを継承するように設定したりするなどの戦略を採用することもできます。

クラスターのメタデータの定義
----------------------------

クラスターを定義するときに、リソースがデプロイされる前に、次のようにメタデータを設定できます。

.. code:: yaml

   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Cluster
   metadata:
     name: cluster-example
     annotations:
       categories: database
     labels:
       environment: production
       workload: database
       app: sso
   spec:
     # ... <snip>

クラスターが展開されると、たとえば、ポッドにラベルが正しく設定されたことを確認できます。

.. code:: shell

   kubectl get pods --show-labels

現在の制限
----------

現在、KubernetesのEDB
Postgresは、ラベルまたはアノテーションの削除を自動的に伝播しません。したがって、以前に基になるポッドに伝播されたクラスターからアノテーションまたはラベルが削除される場合、オペレーターは、関連するリソースでそれを削除しません。
