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

예제

원문 보기 위키 갱신

예제 (Examples)

예제들은 PostgreSQL 클러스터를 설정하기 위한 구성 파일들을 보여줘요.

:::info[Important] 이 예제들은 데모와 실험 목적이에요. Quick start에서 설명한 대로 Minikube나 Kind를 사용하는 개인 쿠버네티스 클러스터에서 실행할 수 있어요. :::

:::note[Reference] 사용 가능한 옵션 목록은 API reference를 참조하세요. :::

출처: 문서

본문

기본 (Basics)

기본 클러스터 : cluster-example.yaml 클러스터의 기본 예시예요.

커스텀 클러스터 : cluster-example-custom.yaml 기본 스토리지 클래스를 사용하고 postgresql.conf와 pg_hba.conf 파일에 커스텀 파라미터를 사용하는 기본 클러스터예요.

동적 pg_hba 주소 해석을 사용하는 클러스터 : cluster-example-pod-selector-refs.yaml ${podselector:NAME} 문법을 통해 pg_hba 규칙에서 pod IP를 동적으로 해석하기 위해 podSelectorRefs를 사용하는 클러스터예요.

커스터마이즈된 스토리지 클래스를 사용하는 클러스터 : cluster-storage-class.yaml: standard라는 지정된 스토리지 클래스를 사용하는 기본 클러스터예요.

영구 볼륨 클레임(PVC) 템플릿을 구성한 클러스터 : cluster-pvc-template.yaml: 명시적인 영구 볼륨 클레임 템플릿을 가진 기본 클러스터예요.

확장 구성 예시 : cluster-example-full.yaml: 사용 가능한 대부분의 옵션을 설정하는 클러스터예요.

SQL 파일로 부트스트랩하는 클러스터 : cluster-example-initdb-sql-refs.yaml: 데이터베이스가 생성된 직후 시크릿과 ConfigMap에 정의된 일련의 쿼리를 실행하는 클러스터 예시예요.

커스터마이즈된 pg_hba 구성을 가진 샘플 클러스터 : cluster-example-pg-hba.yaml: 사용자 app이 인증서로 인증할 수 있게 하는 기본 클러스터예요.

projected volume 템플릿으로 Secret과 ConfigMap을 마운트한 샘플 클러스터 : cluster-example-projected-volume.yaml 기존 Secret과 ConfigMap을 projected volume mount를 통해 Postgres Pod에 마운트한 기본 클러스터예요.

보안 (Security)

커스텀 보안 컨텍스트를 가진 샘플 클러스터 : cluster-example-security-context.yaml Pod와 Container 보안 컨텍스트를 모두 커스터마이즈하는 방법을 보여주는 클러스터예요. Pod Security Standards를 사용하거나 특정 보안 요구사항을 충족할 때 유용해요.

백업 (Backups)

커스터마이즈된 스토리지 클래스와 백업 : Prerequisites: 버킷 스토리지가 사용 가능해야 해요. 샘플 구성은 AWS용이에요. 자신의 설정에 맞게 바꾸세요. : cluster-storage-class-with-backup.yaml 백업이 구성된 클러스터예요.

백업 (Backup) : Prerequisites: cluster-storage-class-with-backup.yaml이 적용되고 정상이어야 해요. : backup-example.yaml: 이전 샘플에 대해 실행되는 백업 예시예요.

minio용 백업이 구성된 간단한 클러스터 : Prerequisites: 구성이 minio가 실행 중이고 정상 동작한다고 가정해요. backup.barmanObjectStore를 minio 파라미터나 클라우드 솔루션으로 업데이트하세요. : cluster-example-with-backup.yaml 백업이 구성된 기본 클러스터예요.

Scaleway Object Storage용 백업이 구성된 간단한 클러스터 : Prerequisites: 구성이 Scaleway Object Storage 버킷이 존재한다고 가정해요. backup.barmanObjectStore를 Scaleway 파라미터로 업데이트하세요. : cluster-example-with-backup-scaleway.yaml Scaleway Object Storage와 함께 동작하도록 백업이 구성된 기본 클러스터예요.

레플리카 클러스터 (Replica clusters)

오브젝트 스토어의 백업으로 만든 레플리카 클러스터 : Prerequisites: cluster-storage-class-with-backup.yaml이 적용되고 정상이며, 백업 cluster-example-trigger-backup.yaml이 적용되고 완료되어야 해요. : cluster-example-replica-from-backup-simple.yaml: 백업이 구성된 클러스터를 따르는 레플리카 클러스터예요.

볼륨 스냅샷으로 만든 레플리카 클러스터 : Prerequisites: cluster-example-with-volume-snapshot.yaml이 적용되고 정상이며, 볼륨 스냅샷 backup-with-volume-snapshot.yaml이 적용되고 완료되어야 해요. : cluster-example-replica-from-volume-snapshot.yaml: 볼륨 스냅샷이 구성된 클러스터를 따르는 레플리카 클러스터예요.

스트리밍(pg_basebackup)으로 만든 레플리카 클러스터 : Prerequisites: cluster-example.yaml이 적용되고 정상이어야 해요. : cluster-example-replica-streaming.yaml: 스트리밍 복제로 cluster-example을 따르는 레플리카 클러스터예요.

PostGIS

이미지 볼륨 확장을 사용하는 PostGIS 예시 : postgis-example.yaml: 이미지 볼륨 확장(image volume extensions)을 사용하는 PostGIS 클러스터 예시예요. 자세한 내용은 PostGIS를 참조하세요.

관리형 역할 (Managed roles)

선언적 역할 관리를 가진 클러스터 : cluster-example-with-roles.yaml: managed stanza로 역할을 선언해요. 쿠버네티스 시크릿을 사용한 비밀번호 관리가 포함돼요.

DatabaseRole 리소스로 선언적 역할 관리 : role-examples.yaml: 기존 클러스터를 대상으로 하는 독립형 DatabaseRole 리소스로, 쿠버네티스 시크릿을 사용한 비밀번호 관리가 포함돼요.

관리형 서비스 (Managed services)

관리형 서비스를 가진 클러스터 : cluster-example-managed-services.yaml: managed stanza로 서비스를 선언해요. 기본 서비스 비활성화와 새 rw 서비스 템플릿 LoadBalancer 타입 정의가 포함돼요.

선언적 테이블스페이스 (Declarative tablespaces)

선언적 테이블스페이스를 가진 클러스터 : cluster-example-with-tablespaces.yaml

선언적 테이블스페이스와 백업을 가진 클러스터 : Prerequisites: 구성이 minio가 실행 중이고 정상 동작한다고 가정해요. backup.barmanObjectStore를 minio 파라미터나 클라우드 솔루션으로 업데이트하세요. : cluster-example-with-tablespaces-backup.yaml

오브젝트 스토어의 테이블스페이스로 복원한 클러스터 : Prerequisites: 이전 클러스터가 적용되고 베이스 백업이 완료되어야 해요. bootstrap.recovery.backup.name을 백업 이름으로 업데이트하는 것을 잊지 마세요. : cluster-restore-with-tablespaces.yaml

사용 가능한 옵션 목록은 API reference를 참조하세요.

Pooler 구성

커스텀 서비스 구성이 있는 Pooler : pooler-external.yaml

선언적 Publication과 Subscription 객체를 통한 논리 복제

두 개의 테스트 매니페스트가 논리 복제를 설정하는 데 필요한 모든 것을 담고 있어요:

publication이 있는 소스 클러스터 : cluster-example-logical-source.yaml

cluster-example 클러스터를 app 데이터베이스에 몇 개의 테이블을 만들어 설정하고, 중요한 것은 app 사용자에 복제 권한을 추가한다는 점이에요. app 데이터베이스에 클러스터용 publication이 생성돼요: publication은 클러스터의 프라이머리가 가동되고 실행 중일 때만 조정(reconcile)된다는 점을 주의하세요.

subscription이 있는 대상 클러스터 : Prerequisites: 위에서 정의한 대로 publication이 있는 소스 클러스터가 있어야 해요. : cluster-example-logical-destination.yaml

다음으로 cluster-example-dest 클러스터를 설정해요:

  • externalClusters stanza에 소스 클러스터를 정의해요. 연결에 app 역할을 사용한다는 점을 주의하세요. 이는 소스 클러스터가 이 역할에 replication 권한을 부여한다고 가정해요.
  • schemaOnly가 활성화된 microservice 타입의 부트스트랩 임포트를 사용해요.

대상 클러스터에 subscription이 생성돼요: subscription은 대상 클러스터의 프라이머리가 가동되고 실행 중일 때만 조정된다는 점을 주의하세요.

두 클러스터가 publication과 subscription 객체와 함께 조정된 후에는, 소스 클러스터의 테이블과 그 안의 데이터가 대상 클러스터에 복제되었는지 확인할 수 있어요.

또한 몇 가지 독립형 예시 매니페스트가 있어요:

모든 테이블을 대상으로 하는 일반 Publication : Prerequisites: 기존 클러스터 cluster-example이 있어야 해요. : publication-example.yaml

제한된 publication 대상을 가진 Publication : Prerequisites: 기존 클러스터 cluster-example이 있어야 해요. : publication-example-objects.yaml

일반 Subscription : Prerequisites: 소스로 설정된 기존 클러스터 cluster-example이 publication pub-all과 함께 있어야 해요. 소스 클러스터에 대한 연결 파라미터를 포함한 externalClusters stanza(복제 권한이 있는 역할 포함)를 가진 대상 클러스터 cluster-example-dest가 설정되어 있어야 해요. : subscription-example.yaml

위의 모든 매니페스트는 app 데이터베이스에 publication이나 subscription을 생성해요. Database CRD는 데이터베이스를 선언적으로 생성하는 편리한 방법을 제공해요. 그것으로 임의의 데이터베이스에 논리 복제를 설정할 수 있어요. 이제 다음 섹션으로 넘어가죠.

Postgres 데이터베이스의 선언적 관리

일반 Database : Prerequisites: 기존 클러스터 cluster-example이 있어야 해요. : database-example.yaml

ICU locale 사양을 가진 Database : Prerequisites: Postgres 16 이상을 실행하는 기존 클러스터 cluster-example이 있어야 해요. : database-example-icu.yaml

더 알아보기 (Learn more)