Declarative hibernation
CloudNativePGは、PostgreSQLクラスターを起動、実行、いつでも利用できるように設計されています。
一部の種類のワークロードは、ワークロードがアクティブなときにのみデータベースを起動する必要があります。バッチ駆動のソリューションは、そのようなケースの1つです。
バッチ駆動ソリューションでは、バッチプロセスの実行中にのみデータベースを起動する必要があります。
宣言的ハイバーネーション機能を使用すると、データベースPVCを維持したままデータベースポッドを削除することにより、CPUパワーを節約できます。
ハイバネーション
クラスターを休止状態にするには、 cnpg.io/hibernation=on
アノテーションを設定します。
$ kubectl annotate cluster <cluster-name> --overwrite cnpg.io/hibernation=on
冬眠したクラスターには実行中のポッドはありませんが、 PVCは保持されるため、後でクラスターをリハイドレートできます。レプリカPVCは、プライマリのPVCに加えて保持されます。
ハイバーネーションプロシージャは、プライマリポッドを削除してからレプリカポッドを削除し、スイッチオーバーを回避して、レプリカの同期が保たれるようにします。
ハイバーネーションステータスは、 cnpg.io/hibernation
条件を探すことにより監視できます。
$ kubectl get cluster <cluster-name> -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 サブコマンドで読み取ることもできます。
$ kubectl cnpg status <cluster-name>
Cluster Summary
Name: cluster-example
Namespace: default
PostgreSQL Image: ghcr.io/cloudnative-pg/postgresql:18.1-system-trixie
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
[..]
Rehydration
クラスターをrehydrateには、 cnpg.io/hibernation
アノテーションをoff に設定します。
$ kubectl annotate cluster <cluster-name> --overwrite cnpg.io/hibernation=off
または、完全に設定を解除します。
$ kubectl annotate cluster <cluster-name> cnpg.io/hibernation-
ポッドが再作成され、クラスターがオペレーションを再開します。