본문 바로가기
WIKI 기술 지식 베이스

선언적 하이버네이션

원문 보기 위키 갱신

선언적 하이버네이션 (Declarative hibernation)

CloudNativePG는 PostgreSQL 클러스터가 언제든 켜져 있고, 실행 중이며, 사용 가능하도록 설계됐어요.

그런데 데이터베이스가 워크로드가 활성일 때만 켜져 있으면 되는 워크로드 종류도 있어요. 배치 기반(batch-driven) 솔루션이 그런 경우예요.

배치 기반 솔루션에서 데이터베이스는 배치 프로세스가 실행되는 동안에만 켜져 있으면 돼요.

선언적 하이버네이션(declarative hibernation) 기능은 데이터베이스 PVC는 유지하면서 데이터베이스 Pod를 제거해 CPU 전력을 절약할 수 있게 해줘요.

출처: 문서

본문

하이버네이션 (Hibernation)

클러스터를 하이버네이션하려면 cnpg.io/hibernation=on 어노테이션을 설정해요:

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

하이버네이션된 클러스터에는 실행 중인 Pod가 하나도 없지만, PVC는 유지되어 나중에 클러스터를 다시 깨울(rehydrate) 수 있어요. 레플리카 PVC들도 프라이머리의 PVC와 함께 유지돼요.

하이버네이션 절차는 스위치오버를 피하면서 레플리카가 동기화 상태로 유지되도록, 먼저 프라이머리 Pod를 삭제한 다음 레플리카 Pod들을 삭제해요.

하이버네이션 상태는 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.6-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)

클러스터를 다시 깨우려면 cnpg.io/hibernation 어노테이션을 off로 설정하거나:

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

아예 해제해 버려도 돼요:

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

Pod가 다시 생성되고 클러스터가 운영을 재개해요.

더 알아보기 (Learn more)