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

종단 간 테스트

원문 보기 위키 갱신

종단 간 테스트 (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)

    • 최신 메이저 버전으로의 업그레이드

더 알아보기 (Learn more)