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-
ポッドが再作成され、クラスターがオペレーションを再開します。