EDB Cloud-Native PostgreSQL
EDB Cloud-Native PostgreSQL (1.14.0 및 이전 버전 릴리스 노트)
CloudNativePG의 전신인 EDB의 "Cloud Native PostgreSQL" 1.14.0 이하 버전들의 릴리스 노트를 정리해 드릴게요. 이 페이지의 변경 목록은 제품의 역사를 보여주기 위한 정보 제공 목적이며, 여기 나열된 버전들은 CloudNativePG에 존재하지 않아요.
출처: 문서
본문
CloudNativePG의 첫 공개 릴리스는 1.15.0 버전이에요. 그 이전에는 제품 전체가 EDB 소유였고 "Cloud Native PostgreSQL"이라는 이름으로 배포됐어요.
이 페이지의 변경 목록은 커밋 위에 제품의 역사를 보여주는 정보 제공 목적뿐이에요. 여기에 나열된 어떤 버전도 CloudNativePG에는 존재하지 않아요.
버전 1.14.0
릴리스 날짜: 2022년 3월 25일
기능:
- Barman Cloud 2.19에서 도입된 기능을 활용해 백업과 복구를 위해 Google Cloud Storage를 네이티브 지원해요
Cluster객체에LastBackupSucceeded조건을 도입해 백업 관측성을 개선해요- Hot Standby에 민감한 파라미터 업데이트를 지원해요:
max_connections,max_prepared_transactions,max_locks_per_transaction,max_wal_senders,max_worker_processes - 오퍼레이터의 온라인 업그레이드가 진행 중일 때 표시하도록
Cluster객체에Online upgrade in progress단계를 추가해요 - S3 객체 스토리지 자격 증명을 제공하는 대안으로 AWS IAM Role을 상속하는 기능
- Pooler의 authQuerySecret과 인증서에 대한 Opaque 시크릿 지원
- 기본 PostgreSQL 버전을 14.2로 업데이트
kubectl cnp플러그인에maintenance라는 새 명령을 추가해 Kubernetes 클러스터 전체의 하나 또는 모든 네임스페이스의 클러스터(들)에 유지보수 창을 설정해요
컨테이너 이미지:
- 최신 PostgreSQL 컨테이너에 Barman Cloud 2.19 포함
보안 강화:
- Operator Lifecycle Manager(OpenShift 포함)를 사용하는 네임스페이스 오퍼레이터 설치에 대해 더 강력한 RBAC 적용. OpenShift 사용자는 이 버전으로 업데이트할 것을 권장해요.
수정:
- 원래
pg_control파일의 복사본을 보존해 인스턴스 매니저가 중단된pg_rewind를 재시도할 수 있게 해요 pg_rewind실행 전에 오래된 PID 파일을 정리해요- 13 이전 PostgreSQL 버전에서 무작위 재시작을 피하기 위해
primary_conninfo에서 키 순서 정렬을 강제해요 - 리컨실리에이션 시
ServiceAccount변경(예: 라벨, 어노테이션)을 보존해요 - imagePullPolicy 기본값 적용을 비활성화해요
- WAL 세그먼트 크기에 대한 initDB 검증을 개선해요
- LSN이 지정된 클러스터 복구 시
targetLSN옵션을 올바르게 처리해요 - 서버 및 CA 인증서 모두에 인증서 체인을 허용해 커스텀 TLS 인증서 검증을 수정해요
버전 1.13.0
릴리스 날짜: 2022년 2월 17일
기능:
- Snappy 압축 지원. Snappy는 더 낮은 압축 비율로 객체 스토어에 대한 업로드 속도를 높이는 백업용 빠른 압축 옵션이에요
- Barman 객체 스토어에 업로드된 파일 태깅 지원. 이 기능은 오퍼랜드 이미지에 Barman 2.18이 필요해요
status.conditions로Cluster상태 확장.ContinuousArchiving조건은 클러스터가 WAL 파일 아카이빙을 시작했음을 나타내요kubectl용cnp플러그인의 status 명령을 추가 정보로 개선: 클러스터 상태를 보여주는Cluster Summary섹션과 클러스터에서 사용되는 인증서의 상태와 만료까지 남은 시간을 포함한Certificates Status섹션 추가- 새 클러스터 생성 시 비어 있지 않은 백업 대상을 감지하기 위한 새
barman-cloud-check-wal-archive명령 지원 MONITORING_QUERIES_SECRET구성 변수를 통해 기본 모니터링 쿼리를 추가하기 위해Secret사용 지원- 사용자가 AppArmor를 사용해 컨테이너의 권한을 제한할 수 있게 허용 (AppArmor 지원으로 배포된 Kubernetes 클러스터에서)
kubectl용cnp플러그인에 Windows 플랫폼 지원 추가. 이제 플러그인을 Windows x86 및 ARM에서 사용할 수 있어요- Kubernetes 1.18과 deprecated API 버전 지원 중단
컨테이너 이미지:
- PostgreSQL 컨테이너에 Barman 2.18 포함
보안 수정:
- owner 및 superuser 시크릿 내 username 필드의 일관성 검사 추가. 이전에는 악의적인 사용자가 시크릿을 사용해 어떤 PostgreSQL 사용자의 비밀번호도 변경할 수 있었어요
수정:
- Postgres 파드에서 상태를 가져오는 코드의 메모리 누수 수정
- 크래시 후 PostgreSQL 자체 재시작 비활성화. 인스턴스 컨트롤러가 PostgreSQL 인스턴스의 수명 주기를 처리해요
- 검증 웹훅에서
.spec.postgresUID와.spec.postgresGID필드의 수정 방지. 클러스터 생성 후 이 필드를 변경하면 PostgreSQL이 시작할 수 없게 돼요 - 백업 및 WAL 아카이빙 처리 코드의 로그 상세도를 줄여요
- 초기화되지 않은 상태에서 클러스터가
Healthy로 표시되는 버그 수정 - WAL 생성률이 매우 높은 클러스터의 스탠바이 서버가 정렬되면 스트리밍으로 전환할 수 있게 허용해요
- PostgreSQL 파드 시작 중 드물게 크래시로 이어질 수 있는 레이스 컨디션 수정
- 클러스터의 첫 번째 PVC 초기화 실패로 이어질 수 있는 레이스 컨디션 수정
- 레플리카로 클러스터에 합류하기 전에 방금 강등된 primary 파드의 추가 재시작 제거
- 백업에서 복구할 때 리플리케이션에 민감한 PostgreSQL 구성 파라미터를 올바르게 처리해요
- 클러스터 생성 중 PostgreSQL 구성의 누락된 검증 수정
버전 1.12.0
릴리스 날짜: 2022년 1월 11일
기능:
- 지원되는 Kubernetes 배포판 목록에 Kubernetes 1.23 추가, 1.17에 대한 엔드투엔드 테스트 제거 (2020년 12월에 Kubernetes 프로젝트의 지원이 종료됨)
- 2초의 연결 타임아웃과 30초의 통신 타임아웃을 추가해 네트워크 문제 시 파드 상태 확인의 응답성을 개선해요. 이 변경은 오퍼레이터가 파드를 실패로 선언하기 전에 상태를 보고하기를 기다리는 시간에 제한을 두며, 페일오버 작업의 견고성과 예측 가능성을 향상시켜요
- 클러스터가 생성하는 모든 객체에 적용될 라벨과 어노테이션을 지정할 수 있는
.spec.inheritedMetadata필드를 Cluster에 도입해요 - 인스턴스 상태를 계산할 때 실행되는 쿼리 수를 줄여요
- PgBouncer용 readiness 프로브 추가
- Azure 프로토콜을 사용할 때 Barman의 백업 객체 스토어 엔드포인트의 커스텀 인증 기관 지원
수정:
- 페일오버 중에 모든 WAL 스트리밍 연결이 닫힐 때까지 새 primary 선택을 대기해요. 오퍼레이터는 이제 기본적으로
wal_sender_timeout과wal_receiver_timeout을 5초로 설정해 스탠바이 노드가 primary의 네트워크 문제를 빠르게 감지하도록 해요 - replica 클러스터의 모든 PostgreSQL 인스턴스에 대해 "archive_mode"를 "always"로 설정해 replica 클러스터의 WAL 아카이빙 전략을 변경해 롤링 업데이트를 수정해요. 그런 다음 현재 및 대상 지정 primary에서만 WAL 업로드를 제한해요. 스위치오버 중에 WAL이 두 번 업로드될 수 있지만 문제가 되지 않아요
- replica 클러스터 소스에서 Barman의 백업 객체 스토어 엔드포인트의 커스텀 인증 기관 지원 수정
- 클러스터 네임스페이스의 기본 모니터링 컨피그 맵에 고정 이름 사용
- 기본값 웹훅이 어떤 이유로든 작동하지 않으면 오퍼레이터는 이제 리컨실리에이션 주기 중에도 기본값으로 클러스터를 업데이트해요
- 리소스 요청과 제한 비교를 수정해 매 리컨실리에이션 주기마다 모든 파드를 업데이트하는 드문 문제를 수정해요
- 객체 네임스페이스도 포함하도록 웹훅의 로그 메시지 개선
- 모든 리컨실리에이션 루프 시작 시 "default" 메시지 로깅 중지
enablePodMonitor가 false일 때 리컨실리에이션 주기마다 PodMonitor 삭제를 로깅하지 않도록 중지- 파드에 도달할 수 없을 때 가능한 아키텍처 불일치에 대해 불평하지 않도록 수정
버전 1.11.0
릴리스 날짜: 2021년 12월 15일
기능:
- 병렬 WAL 아카이빙 및 복원:
backupObjectStore.maxParallel옵션을 도입해 WAL 아카이빙(PostgreSQL의archive_command)과 WAL 복원(restore_command) 중에 실행할 최대 병렬 잡 수를 설정함으로써 높은 쓰기 시스템에서 데이터베이스가 WAL 생성 속도를 따라잡을 수 있게 해요. 병렬 복원 옵션을 사용하면 새로 승격된 Standby가 재생할 WAL 파일을 순차적으로가 아니라 병렬로 가져와 준비 상태에 더 빨리 도달할 수 있어요 - 모니터링용 기본 메트릭 세트:
default-monitoring이라는 새ConfigMap이 오퍼레이터와 같은 네임스페이스에 자동으로 배포되고, 기본적으로 모든 기존 Postgres 클러스터에 추가돼요. 이 동작은 오퍼레이터 구성에서MONITORING_QUERIES_CONFIGMAP파라미터를 설정해 전역적으로, 또는.spec.monitoring.disableDefaultQueries옵션(기본값false)을 통해 클러스터 레벨에서 변경할 수 있어요 - 클러스터의 모니터링 섹션에
enablePodMonitor옵션을 도입해PodMonitor리소스를 자동으로 관리하고 Prometheus와 원활하게 통합해요 - 원하는
stopDelay시간의 전반부는 스마트 종료를, 나머지 반은 패스트 종료를 시도해 PostgreSQL 종료 프로시저를 개선한 다음 Kubernetes가 파드를 종료하기 전에 수행해요 - 새 primary를 승격하기 전에 이전 primary에게 정상적으로 종료하고 모든 WAL 파일을 아카이빙할 시간을 주도록 제어하는
switchoverDelay옵션 추가 (기본적으로 CloudNativePG는 데이터 지속성을 우선해 무기한 대기해요) - PostgreSQL
Cluster에 대한 리소스 요청과 제한 변경을 롤링 업데이트를 발행해 처리해요 kubectl용cnp플러그인의status명령에 스트리밍 리플리케이션 상태, 데이터베이스 총 크기, 클러스터에서의 인스턴스 역할 등 추가 정보를 개선해요- PostgreSQL의 공유 메모리 관리를 위해
dynamic_shared_memory_type과shared_memory_type파라미터 구성을 활성화해 많은 병렬 워커가 있는 워크로드를 지원 강화 - 파드를 포함한 관련 리소스에 클러스터 레벨에서 정의된 라벨과 어노테이션 전파 (삭제는 지원되지 않음)
- Kubelet이 축출한 파드를 자동으로 제거해요
ENABLE_AZURE_PVC_UPDATES오퍼레이터 구성 옵션을 통해 Azure에서 영구 볼륨의 자동 크기 조정을 관리해 필요 시 클러스터의 롤링 업데이트를 발행해요 (기본적으로 비활성화)cnpg.io/reconciliationLoop어노테이션 도입. 특정 Postgres 클러스터에disabled로 설정하면 리컨실리에이션 루프가 실행되지 않도록 방지해요initdb부트스트랩 방법의 일부로postInitApplicationSQL옵션을 도입해 클러스터 생성 직후 메인 애플리케이션 데이터베이스에서 슈퍼유저로 실행할 SQL 쿼리 목록을 지정할 수 있게 해요
수정:
- Liveness 프로브가 이제 PostgreSQL 서버의 시작 프로세스를 올바르게 처리해요. 이는 일부 고객이 보고한 문제를 수정하며, 일관된 상태에 도달하기 위해 WAL 파일을 복구해야 하는 재시작된 스탠바이 서버에 영향을 주지만 liveness 프로브 타임아웃이 발동하기 전에 이를 수행하지 못해 파드가
CrashLoopBackOff상태로 남는 문제를 해결해요. - Liveness 프로브가 이제 타임라인 분기 후 현재 primary와 재정렬하기 위해
pg_rewind를 사용해야 하는 이전 primary의 경우를 올바르게 처리해요. 이는 새 스탠바이 파드가 Kubernetes에 의해 반복적으로 종료되는 문제를 수정해요. - Postgres 파드의 클라이언트 측 스로틀링 줄임 (예:
Waited for 1.182388649s due to client-side throttling, not priority and fairness, request: GET) - 제공된 것을 사용해 OpenShift 및 OLM 설치에서 공개 키 인프라(PKI) 초기화 비활성화
- 재시작이 필요한 구성 파라미터를 변경할 때 항상 primary를 마지막으로 남겨두기
- 잡이 성공적으로 완료된 후에만 PVC를 준비 상태로 표시해 PVC 초기화의 레이스 컨디션 방지
- 만료된 webhook TLS 시크릿을 갱신할 때 올바른 공개 키 사용
- LSN 파싱 시 오버플로 수정
- 시작 시 오래된 PID 파일 제거
- 존재한다면
Pooler리소스가 오퍼레이터에 정의된imagePullSecret을 상속하도록 허용
버전 1.10.0
릴리스 날짜: 2021년 11월 11일
기능:
- PgBouncer를 통한 커넥션 풀링: 로컬 PostgreSQL
Cluster의 커넥션 풀러로 사용할 PgBouncer 배포를 자동으로 관리하는Pooler리소스와 컨트롤러 도입. 기능에는 TLS 클라이언트/서버 연결, 비밀번호 인증, 고가용성, 파드 템플릿 지원, 핵심 PgBouncer 파라미터 구성,PAUSE/RESUME, JSON 형식 로깅, stats/pools/lists용 Prometheus exporter가 포함돼요 - 백업 보존 정책: 백업용 복구 창 보존 정책 정의 지원 (예: 30일 복구 창을 보장하는 '30d')
- 오퍼레이터 인플레이스 업데이트: 인스턴스 매니저의 인플레이스 온라인 업데이트 도입으로, 오퍼레이터 업데이트 후 전체 클러스터의 롤링 업데이트 수행 필요성을 제거해요. 기본적으로 이 옵션은 비활성화돼요 (자세한 내용은 문서 참고)
initdb부트스트랩 방법에서 커스터마이즈할 수 있는 옵션 목록을dataChecksums,encoding,localeCollate,localeCType,walSegmentSize로 제한해요. 이는options배열을 사용하지 않게 하며 v2 API에서 제거될 예정이에요initdb부트스트랩 방법의 일부로postInitTemplateSQL옵션을 도입해 클러스터 생성 직후template1데이터베이스에서 슈퍼유저로 실행할 SQL 쿼리 목록을 지정할 수 있게 해요. 이 기능은 클러스터에 생성된 모든 애플리케이션 데이터베이스에 기본 객체를 포함할 수 있게 해줘요- 인스턴스 Prometheus exporter에 추가된 새 기본 메트릭: Postgres 버전, 클러스터 이름, 백업 카탈로그에 따른 첫 번째 복구 가능 지점
- 실패 후 백업 받기 재시도
- 자주 업데이트되지 않는 오퍼랜드 이미지에 없는 최근 도입 기능(예: 보존 정책 또는 Azure Blob Container 스토리지)을 오퍼레이터가 호출하지 못하도록 Barman Cloud 기능에 대한 인식 구축
cnp플러그인의status명령 출력을 백업 정보와 통합- PVC의 상태(초기화 중 또는 준비됨)를 보고하는 새 어노테이션 도입
Cluster에서 생성된 모든 객체(Backup객체 포함)의k8s.enterprisedb.io/cluster라벨에 클러스터 이름 설정Cluster,Backup,ScheduledBackup종류에 대한 deprecated API 버전postgresql.cnpg.io/v1alpha1지원 중단- 기본 오퍼랜드 이미지를 PostgreSQL 14.2로 설정
보안:
- 오퍼레이터 컨테이너 securityContext에 대해 allowPrivilegeEscalation을
false로 설정
수정:
- 단일 인스턴스 클러스터에서 유지보수 중 primary PodDisruptionBudget 비활성화
- 복구 작업 중 올바른 인증 기관(CA) 사용
- 백업 받기 전 WAL 아카이빙 상태 확인 시 Postgres 연결 누수 방지
- 그렇지 않으면 로그를 범람할 일시적 오류 후 WAL 아카이브/복원이 100ms 동안 대기하게 함
버전 1.9.2
릴리스 날짜: 2021년 10월 15일
기능:
- PostgreSQL의
archive_command용wal-archive와 스탠바이의restore_command용wal-restore두 개의 새 로거로 JSON 로그 강화
수정:
- 스탠바이 승격 중 WAL 아카이빙 활성화 (
.history파일이 아카이빙되지 않던 문제 방지) - Barman 2.13 이상을 사용할 때만 Barman Cloud 도구에
--cloud-provider옵션을 전달해 이전 오퍼랜드와의 오류 방지 - 백업을 트리거하기 전에 primary 파드가 준비될 때까지 대기
버전 1.9.1
릴리스 날짜: 2021년 9월 30일
이 릴리스는 PostgreSQL 14 출시를 기념하기 위한 것으로, 특정 이미지 이름을 정의하지 않고 새 Cluster를 만들 때 기본 메이저 버전으로 만들었어요.
수정:
- primary 파드의 로그에
Error while getting barman endpoint CA secret메시지가 나타나 백업이 올바르게 작동하지 못하게 하는 문제 수정 - 인스턴스 매니저와의 일시적 통신 문제 발생 시 새 백업 요청을 제대로 재시도
버전 1.9.0
릴리스 날짜: 2021년 9월 28일
버전 1.9.0은 릴리스 프로세스 지연과 이후 1.9.1 버전 릴리스 때문에 OpenShift에서 사용할 수 없어요.
기능:
- 지원되는 Kubernetes 배포판 목록에 Kubernetes 1.22 추가, 1.16 제거
- 필요한 경우 백업 아카이브에서 WAL 파일을 가져오기 위해
pg_rewind에서--restore-target-wal옵션 지원 도입 (PostgreSQL 13+에서만 사용 가능) - 각 데이터베이스의
pg_catalog.pg_largeobject테이블 페이지 수를 추정하는 Prometheus exporter용 기본 메트릭 노출 - 로컬 인메모리 캐시를 통해 WAL 아카이빙 및 가져오기 성능 향상
수정:
pg_isready호출 시 명시적으로postgres사용자 설정 - OpenShift의 제한된 SCC에 필요- 상태의
FirstRecoverabilityPoint를 제대로 업데이트 - 백업이 요청되면 지정된 primary에
archive_mode = always설정 - 사소한 버그 수정
버전 1.8.0
릴리스 날짜: 2021년 9월 13일
기능:
-
외부 클러스터 섹션에 정의된 객체 스토어에서 전체 또는 시점 복구를 통해 직접 새 클러스터를 부트스트랩해, Backup CR을 정의해야 했던 이전 요구사항을 제거해요
-
예약 백업에
immediate옵션을 도입해 첫 Postgres 인스턴스가 실행된 직후 백업을 요청하고, 시점 복구가 구성될 때 클러스터의 매우 시작 시점으로 되감을 수 있는 기능을 추가해요 -
백업 객체 스토어 콘텐츠에 기반해 복구를 요청할 가장 오래된 일관된 시점을 보고하도록 클러스터 상태에
firstRecoverabilityPoint추가 -
다음 새 메트릭을 노출해 PostgreSQL 인스턴스용 기본 Prometheus exporter 강화:
- WAL 파일 수와 계산된 디스크 총 크기
- 아카이브 상태 폴더의
.ready및.done파일 수 - replica 모드 플래그
- 요청된 최소/최대 동기 레플리카 수와 예상 및 실제 관찰된 값
-
Prometheus exporter에서 커스텀 메트릭을 정의할 때
runonserver옵션 지원을 추가해 PostgreSQL 버전 범위로 메트릭 수집을 제한해요 -
Barman 2.13에서 Barman Cloud용으로 도입된 기능을 활용해 백업과 복구를 위한 Azure Blob Storage 네이티브 지원해요
-
liveness 프로브에
pg_isready사용 -
복구 대상 시간의 타임스탬프 지정에 RFC3339 형식 지원
-
클러스터에 대해 생성된 모든 파드와 잡의 이미지 컨테이너 풀 정책을 제어하는
.spec.imagePullPolicy도입 -
OpenShift 4.5를 대체하는 OpenShift 4.8 지원
-
PostgreSQL 14 (베타) 지원
-
스트리밍 연결 없이 외부 클러스터 섹션에 정의된 객체 스토어에서 크로스-클러스터 리플리케이션으로 replica 클러스터 기능 강화 (실험적)
-
클러스터 스펙에
logLevel옵션 도입해 error, info, debug, trace 중 하나의 레벨 지정
보안 강화:
postgres사용자로 비밀번호 인증을 통한 네트워크 접근을 활성화/비활성화하는.spec.enableSuperuserAccess도입
수정:
- 클러스터가 복구 불가능한 상태에 들어가 인간의 개입이 필요할 때 사용자에게 제대로 알림
버전 1.7.1
릴리스 날짜: 2021년 8월 11일
기능:
- 동기 리플리케이션에 관해 구성보다 자가 치유를 선호해서, 자가 치유 작업 중 클러스터가 요구사항을 충족할 수 없을 때 오퍼레이터가
minSyncReplicas와maxSyncReplicas설정을 일시적으로 재정의할 수 있게 해요 initdb부트스트랩 방법의 일부로postInitSQL옵션을 도입해 클러스터 생성 직후 슈퍼유저로 실행할 SQL 쿼리 목록을 지정할 수 있게 해요
수정:
- primary가 준비되지 않았을 때 오퍼레이터가 페일오버할 수 있게 허용 (1.7.0에서 도입된 버그)
LOCAL동기 커밋 레벨을 사용해 관리 쿼리 실행- PGAudit에서 여러 줄 로그 항목을 올바르게 파싱
버전 1.7.0
릴리스 날짜: 2021년 7월 28일
기능:
-
JSON 출력에서 직접 사용할 수 있는
pgaudit라는 새logger유형으로 PGAudit 네이티브 지원 추가 -
다음을 통해 모니터링 및 관측성 기능 강화:
pg_stat_statements및auto_explain확장 네이티브 지원- 하나 이상의 데이터베이스에서 사용자 정의 메트릭 쿼리를 실행하는 Prometheus exporter의
target_databases옵션 (shell 유사 패턴 매칭을 통한 데이터베이스 자동 발견 포함) primaryUpdateStrategy가supervised로 설정된 클러스터가 수동 스위치오버를 요구하는지 신속히 보고하는manual_switchover_required메트릭 노출
-
pg_audit,auto_explain,pg_stat_statements에 대한shared_preload_libraries투명 처리pg_stat_statements,pgaudit또는auto_explain옵션이postgresql파라미터 섹션에 추가될 때 PostgreSQL용shared_preload_libraries자동 구성
-
cnpg.io/reload라벨을 지원해 Prometheus exporter의 커스텀 모니터링/알림 메트릭이나 인증서 저장에 사용되는 것들을 포함한 컨피그 맵과 시크릿의 자동 리로드를 세밀하게 제어해요 -
인스턴스에 리컨실리에이션 루프를 트리거하는
reload명령을kubectl용cnp플러그인에 추가 -
additionalPodAffinity와additionalPodAntiAffinity를 통해 파드 어피니티 및 안티-어피니티 구성 제어 개선 -
언제든 최소 하나의 primary 인스턴스가 실행되도록 요구하는 primary 인스턴스용 별도
PodDisruptionBudget도입
보안 강화:
- PostgreSQL 서버용 커스텀 클라이언트 인증 기관과 인증서를 정의하고, 클라이언트 인증서 인증과 PostgreSQL 노드 간 안전한 통신에 사용할
.spec.certificates.clientCASecret및.spec.certificates.replicationTLSSecret옵션 추가 - Barman의 백업 객체 스토어 엔드포인트의 커스텀 인증 기관 번들을 정의하는
.spec.backup.barmanObjectStore.endpointCA옵션 추가
수정:
- Prometheus exporter에서 히스토그램을 올바르게 파싱
- 클러스터에 대해 오퍼레이터가 생성한 서비스 리컨실리
버전 1.6.0
릴리스 날짜: 2021년 7월 12일
기능:
- Replica 모드 (EXPERIMENTAL): 클러스터를 소스 클러스터의 레플리카로 생성할 수 있게 허용. replica 클러스터는 designated primary와 임의 수의 스탠바이를 가져요.
- 인스턴스를 primary로 승격할 때 기다릴 최대 시간을 지정하는
.spec.postgresql.promotionTimeout파라미터 추가, 기본값 40,000,000초. .spec.affinity.podAntiAffinityType파라미터 추가.preferred(기본값)로 설정하면preferredDuringSchedulingIgnoredDuringExecution이 사용되고,required로 설정하면requiredDuringSchedulingIgnoredDuringExecution이 사용돼요.
변경:
- PVC와 파드를 삭제할 때 오퍼레이터가 새 파드를 생성하지 못하게 하는 레이스 컨디션 수정.
- 구성 변경 시 PostgreSQL 재시작 필요성을 매니저가 감지하지 못하게 하는 레이스 컨디션 수정.
- 어노테이션이 없는 클러스터에서
kubectl-cnp의 패닉 수정. - 일부 로그 메시지 레벨을
debug로 낮춤. - 서버 CA 및 TLS 주입에 대한 E2E 테스트.
버전 1.5.1
릴리스 날짜: 2021년 6월 17일
변경:
- Red Hat OpenShift에서 Operator Deployments로 자동 업데이트를 방해하는 CRD 검증 버그 수정
- Secret을 사용해 오퍼레이터 구성 전달 허용.
버전 1.5.0
릴리스 날짜: 2021년 6월 11일
기능:
- Kubernetes 외부에 있어도 같은 메이저 버전의 기존 PostgreSQL 인스턴스의 복사본으로 새 PostgreSQL 클러스터를 만들 수 있는
pg_basebackup부트스트랩 방법 도입 Cluster리소스의Affinity섹션에서 Kubernetes의 톨러레이션(tolerations) 지원 추가해, 사용자가 필요한 테인트가 있는 Kubernetes 노드에 PostgreSQL 인스턴스를 분산할 수 있게 해요- 더 결정적이고 반복 가능한 배포를 위해
<image>:<tag>@sha256:<digestValue>형식으로 이미지 이름에 다이제스트를 지정할 수 있게 허용
보안 강화:
- 서버 인증서와 이를 서명한 관련 인증 기관용 시크릿을 정의해 PostgreSQL 서버 인증용 TLS 인증서 커스터마이즈
- 내부 및 자동 관리되는 스트리밍 레플리카의 WAL 수신자 프로세스
sslmode를require에서verify-ca로 상향
변경:
kubectl용cnp플러그인의promote하위 명령을 향상시켜 파드 전체 이름이 아닌 노드 번호만 받도록 함- 클러스터 이름(서비스 이름이 상속되는)에 DNS-1035 검증 스킴 채택
- 스탠바이 인스턴스를 복제하거나
pg_basebackup방법으로 부트스트랩할 때 스트리밍 리플리케이션 연결 강제 - 물리적 베이스 백업에 관해
beginWal,endWal,beginLSN,endLSN,startedAt,stoppedAt로Backup리소스 통합 - 문서 개선:
- 오퍼레이터와 오퍼랜드 컨테이너가 노출하는 포트 목록 제공
- 스토리지와 PostgreSQL을 데이터베이스 워크로드용으로 벤치마킹하는
cnp-benchhelm 차트 및 지침 도입
- E2E 테스트 강화:
- Kubernetes 1.21 테스트
- 오퍼레이터 고가용성 테스트 추가
- 노드 드레이닝 테스트 추가
- 사소한 버그 수정, 포함:
- 복구 작업 중 pg_ctl 시작 타임아웃이 너무 짧음
- 오퍼레이터가 PVC에 대한 직접 이벤트를 감시하지 않음
barmanObjectStore백업에서immediateCheckpoint및jobs파라미터 처리 수정- 백업에서 복구할 때 빈 로그
버전 1.4.0
릴리스 날짜: 2021년 5월 18일
기능:
- PostgreSQL 오류 메시지의 표준 출력 JSON 로깅
- Prometheus exporter용 기본 PostgreSQL 메트릭 세트 제공
kubectl용cnp플러그인에restart명령 추가해 주어진 PostgreSQL 클러스터의 파드를 롤아웃 방식으로 재시작해요
보안 강화:
- 파드에
readOnlyRootFilesystem보안 컨텍스트 설정
변경:
- 중요: 이전에 YAML 매니페스트로 CloudNativePG 오퍼레이터를 배포했다면 새 버전 설치 전에 기존 오퍼레이터 배포를 삭제해야 해요. 이는 오퍼레이터가 직접 관리하는 라벨과 라벨 선택자 변경 때문에 다른 Kubernetes API와의 충돌을 피하기 위해 필요해요. 1.4.0으로 업그레이드에 대한 추가 세부 정보는 CloudNativePG 문서를 참고해 주세요
- 오퍼레이터가 자동으로 정의하는 라벨을
control-plane: controller-manager에서app.kubernetes.io/name: cloudnative-pg로 이름 변경해 수정 - Prometheus exporter용 TCP 포트에
metrics이름 할당 - PostgreSQL의 metrics exporter 연결에
cnp_metrics_exporter를application_name으로 설정 - 사용 가능할 때
postgres데이터베이스 대신 Prometheus exporter의 모니터링 쿼리에 애플리케이션 데이터베이스 사용 - 문서 개선:
- 모니터링 쿼리 커스터마이즈
- 오퍼레이터 업그레이드 지침
- E2E 테스트 강화
- 사소한 버그 수정, 포함:
pg_basebackup호출 시-R사용 방지- 상태를 얻을 때 오류 로그에서 스택 트레이스 제거
버전 1.3.0
릴리스 날짜: 2021년 4월 23일
기능:
- 라벨과 어노테이션 상속
- 모든 컨테이너에 리소스 제한 설정
보안 강화:
- Red Hat OpenShift의 제한된 보안 컨텍스트 제약 지원으로 파드 실행을 네임스페이스 할당 UID 및 SELinux 컨텍스트로 제한
- 오퍼레이터가 명시적으로 정의한 파드 보안 컨텍스트로 non-root, non-privileged, 권한 상승 없이 실행
변경:
- Prometheus exporter 엔드포인트가 포트 9187에서 수신 대기 (포트 8000은 이제 API 서버와의 인스턴스 조정용으로 예약)
- 문서 개선
- GKE 환경을 포함한 E2E 테스트 강화
- 사소한 버그 수정
버전 1.2.1
릴리스 날짜: 2021년 4월 6일
- ScheduledBackup은 더 이상 Backups의 소유자가 아니므로, ScheduledBackup 객체가 삭제되어도 백업은 제거되지 않아요
- RHSA-2021:1024(보안 권고: 중요) 해결을 위한 ubi8-minimal 이미지 업데이트
버전 1.2.0
릴리스 날짜: 2021년 3월 31일
- Prometheus용
postgres_exporter와 호환되는 구문으로 ConfigMap 및 Secret 객체로서 커스텀 모니터링 쿼리에 대한 실험적 지원 도입 - Operator Lifecycle Manager(OLM) 배포 지원과 그에 따른 OperatorHub.io 존재
- 미국 국방부(DoD)의 Defense Information Systems Agency(DISA)와 Center for Internet Security(CIS)의 가이드라인을 적용하고 이를 파이프라인에서 Dockle로 직접 검증해 컨테이너 보안 강화
- AKS에서 E2E 테스트 개선
- 사소한 버그 수정
버전 1.1.0
릴리스 날짜: 2021년 3월 3일
- JSON 및 YAML 출력을 포함해 클러스터 상태를 예쁘게 출력하는
kubectl cnp status추가 - 클라이언트 애플리케이션용 TLS 인증을 활성화하는
kubectl cnp certificate추가 - 사용 가능한 핫 스탠바이 레플리카에만 연결을 라우팅해 클러스터의 primary 인스턴스에서 읽기 전용 쿼리를 오프로드하는
-ro서비스 추가 - 클러스터를
maxSyncReplicas보다 낮은 값으로 스케일 다운하는 롤백 - 이전 primary를 강등하기 전에 체크포인트 요청
SIGTERM시 PostgreSQL 프로세스에SIGINT신호(패스트 종료) 전송- 사소한 버그 수정
버전 1.0.0
릴리스 날짜: 2021년 2월 4일
CloudNativePG의 첫 메이저 안정 릴리스는 API 그룹 postgresql.cnpg.io/v1에서 Cluster, Backup, ScheduledBackup을 구현해요.
이 리소스들을 사용해 Kubernetes 내부에서 PostgreSQL 클러스터를 다음의 주요 기능으로 생성하고 관리해요:
- 외부 도구 없이 고가용성을 위해 Kubernetes API 서버와 직접 통합
- 다음을 통한 자가 치유 기능:
- 가장 정렬된 레플리카를 승격해 primary 인스턴스 페일오버
- 레플리카 자동 재생성
- 선택된 레플리카를 승격해 primary 인스턴스의 계획된 스위치오버
- 스케일 업/다운 기능
- 임의 수의 인스턴스 정의 (최소 1 - primary 서버 하나)
- 애플리케이션을 클러스터의 유일한 primary 서버에 연결하는 read-write 서비스 정의
- 읽기 워크로드용으로 애플리케이션을 임의 인스턴스에 연결하는 read 서비스 정의
- PVC 템플릿을 사용한 로컬 영구 볼륨 지원
- 파드의 영구 볼륨 스토리지 재사용
- PostgreSQL 마이너 버전 및 오퍼레이터 업그레이드용 롤링 업데이트
- TLS 연결 및 클라이언트 인증서 인증
- S3 호환 객체 스토어로의 연속 백업
- S3 호환 객체 스토어 백업에서 전체 복구 및 시점 복구
- 동기 레플리카 지원
nodeSelector속성을 통한 노드 어피니티 지원- PostgreSQL 오류 메시지의 표준 출력 로깅