Declarative hibernation#

EDB CloudNativePG クラスターは、PostgreSQLクラスターを起動、実行、いつでも利用できるように設計されています。

一部の種類のワークロードは、ワークロードがアクティブなときにのみデータベースを起動する必要があります。バッチ駆動のソリューションは、そのようなケースの1つです。

バッチ駆動ソリューションでは、バッチプロセスの実行中にのみデータベースを起動する必要があります。

宣言的ハイバーネーション機能を使用すると、データベースPVCを維持したままデータベースポッドを削除することにより、CPUパワーを節約できます。

注釈

宣言的ハイバーネーションは、 imperative hibernation via the `cnp plugin <EDB CloudNativePG Cluster Plugin>` の既存の実装とは異なります。必須ハイバーネーションは、高可用性クラスター内のすべてのPostgresインスタンスをシャットダウンし、 PGDATA およびWALを含むプライマリのPVCの静的コピーを保持します。プラグインは、プライマリを再開し、すべてのレプリカが存在する場合を再作成することにより、ハイバーネーションフェーズを終了できます。

ハイバネーション#

クラスターを休止状態にするには、 k8s.enterprisedb.io/hibernation=on アノテーションを設定します。

$ kubectl annotate cluster <cluster-name> --overwrite k8s.enterprisedb.io/hibernation=on

休止したクラスターには実行中のポッドはありませんが、 PVCは保持されるため、後でクラスターをリハイドレートできます。レプリカPVCは、プライマリのPVCに加えて保持されます。

ハイバーネーションプロシージャは、プライマリポッドを削除してからレプリカポッドを削除し、スイッチオーバーを回避して、レプリカの同期が保たれるようにします。

ハイバーネーションステータスは、 k8s.enterprisedb.io/hibernation 条件を探すことにより監視できます。

$ kubectl get cluster <cluster-name> -o "jsonpath={.status.conditions[?(.type==\"k8s.enterprisedb.io/hibernation\")]}"

{
        "lastTransitionTime":"2023-03-05T16:43:35Z",
        "message":"Cluster has been hibernated",
        "reason":"Hibernated",
        "status":"True",
        "type":"k8s.enterprisedb.io/hibernation"
}

ハイバーネーションステータスは、kubectl のcnp プラグインのstatus サブコマンドで読み取ることもできます。

$ kubectl cnp status <cluster-name>
Cluster Summary
Name:              cluster-example
Namespace:         default
PostgreSQL Image:  quay.io/enterprisedb/postgresql:17.2
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
[..]

リハイドレート#

クラスターをrehydrateには、 k8s.enterprisedb.io/hibernation アノテーションをoff に設定します。

$ kubectl annotate cluster <cluster-name> --overwrite k8s.enterprisedb.io/hibernation=off

または、完全に設定を解除します。

$ kubectl annotate cluster <cluster-name> k8s.enterprisedb.io/hibernation-

ポッドが再作成され、クラスターがオペレーションを再開します。