宣言ハイバーネーション ====================== CloudNativePGは、PostgreSQLクラスターを起動、実行、いつでも利用できるように設計されています。 一部の種類のワークロードは、ワークロードがアクティブなときにのみデータベースを起動する必要があります。バッチ駆動のソリューションは、そのようなケースの1つです。 バッチ駆動ソリューションでは、バッチプロセスの実行中にのみデータベースを起動する必要があります。 宣言的ハイバーネーション機能を使用すると、データベースPVCを維持したままデータベースポッドを削除することにより、CPUパワーを節約できます。 .. Note:: 宣言的ハイバーネーションは、 :ref:`imperative hibernation via the `cnpg` plugin ` の既存の実装とは異なります。必須ハイバーネーションは、高可用性クラスター内のすべてのPostgresインスタンスをシャットダウンし、 `PGDATA` およびWALを含むプライマリのPVCの静的コピーを保持します。プラグインは、プライマリを再開し、すべてのレプリカが存在する場合を再作成することにより、ハイバーネーションフェーズを終了できます。 ハイバネーション ---------------- クラスターを休止状態にするには、 ``cnpg.io/hibernation=on`` アノテーションを設定します。 .. code:: sh $ kubectl annotate cluster --overwrite cnpg.io/hibernation=on 冬眠したクラスターには実行中のポッドはありませんが、 PVCは保持されるため、後でクラスターをリハイドレートできます。レプリカPVCは、プライマリのPVCに加えて保持されます。 ハイバーネーションプロシージャは、プライマリポッドを削除してからレプリカポッドを削除し、スイッチオーバーを回避して、レプリカの同期が保たれるようにします。 ハイバーネーション状態ステータスは、 ``cnpg.io/hibernation`` 条件を探すことにより監視できます。 .. code:: sh $ kubectl get cluster -o "jsonpath={.status.conditions[?(.type==\"cnpg.io/hibernation\")]}" { "lastTransitionTime":"2023-03-05T16:43:35Z", "message":"Cluster has been hibernated", "reason":"Hibernated", "status":"True", "type":"cnpg.io/hibernation" } ハイバーネーション状態ステータスは、\ ``kubectl`` の\ ``cnpg`` プラグインの\ ``status`` サブコマンドで読み取ることもできます。 .. code:: sh $ kubectl cnpg status Cluster Summary Name: cluster-example Namespace: default PostgreSQL Image: ghcr.io/cloudnative-pg/postgresql:16.1 Primary instance: cluster-example-2 Status: Cluster in healthy state Instances: 3 Ready instances: 0 Hibernation Status Hibernated Message Cluster has been hibernated Time 2023-03-05 16:43:35 +0000 UTC [..] 水分補給 -------- クラスターをリハイドレートするには、 ``cnpg.io/hibernation`` アノテーションを\ ``off`` に設定します。 :: $ kubectl annotate cluster --overwrite cnpg.io/hibernation=off または、完全に設定を解除します。 :: $ kubectl annotate cluster cnpg.io/hibernation- ポッドが再作成され、クラスターがオペレーションを再開します。