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"
}

ハイバーネーションステータスは、kubectlcnpg プラグインの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-

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