종단 간 테스트
종단 간 테스트 (End-to-End Tests)
CloudNativePG는 각 커밋 후에 종단 간(E2E) 테스트(또는 통합 테스트) 스위트로 자동 테스트돼요. 이 테스트들은 연산자가 PostgreSQL 클러스터를 올바르게 배포하고 관리하는지 보장해요.
Kubernetes 버전 1.31부터 1.35까지, 그리고 PostgreSQL 버전 14부터 18까지가 각 커밋마다 테스트되어, 개발 과정의 초기 단계에서 버그를 감지하는 데 도움을 줘요.
테스트되는 Kubernetes와 PostgreSQL 버전 각각에 대해, kind를 사용해 Kubernetes 클러스터를 만들고 GitHub Actions 플랫폼에서 실행하며, 그 클러스터에서 다음과 같은 E2E 테스트 스위트를 수행해요:
출처: 문서
본문
-
기본 (Basic):
- 연산자 설치
- Cluster 생성
- 데이터 저장을 위한 persistent volume 사용
-
서비스 연결성 (Service connectivity):
- 읽기 전용을 포함한 서비스를 통한 연결
- 사용자가 제공한 서버 및/또는 클라이언트 인증서를 통한 연결
- PgBouncer
-
자기 치유 (Self-healing):
- 페일오버 (Failover)
- 스위치오버 (Switchover)
- 페일오버 시 10초 미만의 프라이머리 엔드포인트 전환
- 스위치오버 시 20초 미만의 프라이머리 엔드포인트 전환
- 60초 미만의 저하된(degraded) 상태 복구
- PVC 삭제
- 손상된 PVC
-
백업 및 복원 (Backup and Restore):
- Volume Snapshots에서 백업·복원
- S3에서 Barman Cloud를 사용한 Backup·ScheduledBackups 실행
- Azure blob 스토리지에서 Barman Cloud를 사용한 Backup·ScheduledBackups 실행
- S3에서 Barman Cloud를 사용한 백업 복원
- Azure blob 스토리지에서 Barman Cloud를 사용한 백업 복원
- Azure, S3 스토리지에서의 시점 복구 (PITR)
- Wal-Restore (순차 / 병렬)
-
연산자 (Operator):
- 연산자 배포
- ConfigMap을 통한 연산자 구성
- 연산자 pod 삭제
- 연산자 pod 축출(eviction)
- 연산자 업그레이드
- 연산자 고가용성 (High Availability)
-
관찰 가능성 (Observability):
- 메트릭 수집
- PgBouncer 메트릭
- JSON 로그 형식
-
복제 (Replication):
- 복제 슬롯 (Replication Slots)
- 동기 복제 (Synchronous replication)
- Cluster의 스케일업·스케일다운
- 선언적 Publication / Subscription을 통한 논리 복제
-
레플리카 클러스터 (Replica clusters)
- 백업에서 레플리카 클러스터 부트스트래핑
- 스트리밍을 통한 레플리카 클러스터 부트스트래핑
- volume snapshots를 통한 부트스트래핑
- 레플리카 클러스터 분리(detach)
-
플러그인 (Plugin):
- CNPG 플러그인을 사용한 클러스터 하이버네이션
- 펜싱 (Fencing)
- 연결 인증서 생성
-
Postgres 구성 (Postgres Configuration):
- PostgreSQL 구성 변경 관리
- PostgreSQL 이미지 변경 시 롤링 업데이트
- ImageCatalog/ClusterImageCatalog 이미지 변경 시 롤링 업데이트
- 핫 스탠바이 민감 파라미터 변경 시 롤링 업데이트
- InitDB를 통한 데이터베이스 초기화
-
Pod 스케줄링 (Pod Scheduling):
- 톨러레이션과 테인트 (Tolerations and taints)
NodeSelector를 사용한 Pod 어피니티- PodSpec 드리프트 감지 시 롤링 업데이트
- 인플레이스 업그레이드 (In-place upgrades)
- 멀티 아키텍처 사용 가능성
-
클러스터 메타데이터 (Cluster Metadata):
- 클러스터 Labels·Annotations용 ConfigMap
- 객체 메타데이터
-
복구 (Recovery):
- 데이터 손상
- pg_basebackup
-
데이터베이스 가져오기 (Importing Databases):
- 마이크로서비스 방식
- 모놀리스 방식
-
스토리지 (Storage):
- 스토리지 확장
- 전용 PG_WAL persistent volume
-
보안 (Security):
- AppArmor 어노테이션 전파. Azure 환경에서만 실행
-
유지보수 (Maintenance):
- 유지보수 창(maintenance window)을 사용한 Node Drain
- Pod Disruption Budgets 유·무에 따른 단일 인스턴스 클러스터의 Node Drain
-
하이버네이션 (Hibernation)
- 선언적 하이버네이션 / 리하이드레이션
-
볼륨 스냅샷 (Volume snapshots)
- 콜드·온라인 스냅샷의 백업/복원
- 콜드·온라인 스냅샷의 시점 복구 (PITR)
- 콜드·온라인 스냅샷의 플러그인을 통한 백업
- 콜드·온라인 스냅샷의 선언적 백업
-
Managed 역할 (Managed Roles)
- managed 역할의 생성과 갱신
- Kubernetes secrets를 사용한 비밀번호 유지보수
-
테이블스페이스 (Tablespaces)
- 테이블스페이스의 선언적 생성
- 임시 테이블스페이스의 선언적 생성
- 객체 스토리지에서의 백업 / 복구
- volume snapshots에서의 백업 / 복구
-
선언적 데이터베이스 (Declarative databases)
- 기본(retain) 회수 정책을 사용한 선언적 데이터베이스 생성
- delete 회수 정책을 사용한 선언적 데이터베이스 생성
-
메이저 버전 업그레이드 (Major version upgrade)
- 최신 메이저 버전으로의 업그레이드