예제
예제 (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 클러스터를 설정해요:
externalClustersstanza에 소스 클러스터를 정의해요. 연결에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