시작하기 전에
CloudNativePG를 다루기 전에 Kubernetes와 PostgreSQL 특유의 용어 몇 가지를 먼저 짚고 넘어갈게요. 이 용어들을 알아두면 뒤에 나오는 문서들을 이해하는 데 훨씬 수월해져요.
출처: 문서
본문
시작하기 전에 Kubernetes와 PostgreSQL에 특화된 몇 가지 용어를 먼저 정리하는 것이 필수적이에요.
Kubernetes 용어
Node : *노드(node)*는 Kubernetes의 작업자 머신(워커 머신)으로, 가상 또는 물리 머신이며, 파드를 실행하는 데 필요한 모든 서비스는 컨트롤 플레인 노드들이 관리해요.
Postgres Node
: Postgres 노드는 PostgreSQL 워크로드를 실행하는 데 전용으로 사용되는 Kubernetes 워커 노드예요. CloudNativePG가 제안하는 대로 node-role.kubernetes.io 레이블과 테인트(taint)를 적용해서 만들 수 있어요. postgres 노드라고도 불러요.
Pod : *파드(pod)*는 Kubernetes 클러스터에 배포할 수 있는 가장 작은 컴퓨팅 단위로, 네트워크와 스토리지를 공유하는 한 개 이상의 컨테이너로 구성돼요.
Service : *서비스(service)*는 파드 그룹에서 실행되는 애플리케이션을 네트워크 서비스로 노출시키고, 애플리케이션 간 서비스 디스커버리, 로드 밸런싱, 페일오버 등 중요한 기능을 표준화하는 추상화 개념이에요.
Secret : *시크릿(secret)*은 패스워드, 액세스 키, 토큰 같은 소량의 민감한 데이터를 저장하고 파드에서 사용하도록 설계된 오브젝트예요.
Storage Class : 스토리지 클래스는 관리자가 클러스터의 스토리지 종류를 정의할 수 있게 해줘요. 프로비저너(AWS EBS 같은), 회수 정책, 마운트 옵션, 볼륨 확장 등을 포함해요.
Persistent Volume : *퍼시스턴트 볼륨(PV)*은 관리자가 수동으로 프로비저닝하거나 스토리지 클래스 컨트롤러가 동적으로 프로비저닝한 스토리지를 나타내는 Kubernetes 클러스터의 리소스예요. PV는 퍼시스턴트 볼륨 클레임을 통해 파드와 연결되며, 그 수명 주기는 사용하는 파드와 무관해요. 일반적으로 PV는 특히 퍼블릭 클라우드에서 네트워크 볼륨이에요. 로컬 퍼시스턴트 볼륨(LPV)은 그 볼륨을 사용하는 파드가 실행되는 특정 노드에만 존재하는 퍼시스턴트 볼륨이에요.
Persistent Volume Claim : *퍼시스턴트 볼륨 클레임(PVC)*은 스토리지에 대한 요청을 나타내며, 크기, 접근 모드, 특정 스토리지 클래스를 포함할 수 있어요. 파드가 노드 리소스를 소비하듯이, PVC는 PV의 리소스를 소비해요.
Namespace : 네임스페이스는 Kubernetes 클러스터의 논리적이고 격리된 부분집합으로, 더 넓은 물리 클러스터 안의 가상 클러스터로 볼 수 있어요. 네임스페이스는 관리자가 프로젝트, 부서, 팀 등에 따라 분리된 환경을 만들 수 있게 해줘요.
RBAC : *역할 기반 접근 제어(RBAC)*는 컴퓨터 시스템 보안에서 네트워크와 시스템 리소스에 대한 접근을 인가된 사용자로 제한하는 데 사용되는 방법이에요. Kubernetes는 네임스페이스와 클러스터 수준에서 역할을 제어하고 이를 특정 리소스와 개인에게 연결하는 네이티브 API를 갖고 있어요.
CRD : *커스텀 리소스 정의(CRD)*는 Kubernetes API의 확장으로, 개발자가 커스텀 리소스라 불리는 새로운 데이터 타입과 오브젝트를 만들 수 있게 해줘요.
Operator : 오퍼레이터는 하나 이상의 애플리케이션 또는 특정 서비스를 관리할 때 보통 사람이 수행하는 단계를 자동화하는 커스텀 리소스예요. 오퍼레이터는 리소스의 정의된 상태가 관찰된 상태와 항상 일치하도록 Kubernetes를 도와줘요.
kubectl
: kubectl은 Kubernetes 클러스터를 관리하는 데 사용되는 커맨드라인 도구예요.
CloudNativePG는 커뮤니티가 지원하는 Kubernetes 버전을 요구해요. 자세한 내용은 "Supported releases" 페이지를 참고해 주세요.
PostgreSQL 용어
인스턴스(Instance) : "IP 주소(들)"와 "TCP 포트"(보통 5432)의 쌍으로 수신 대기하며 실행 중인 Postgres 서버 프로세스예요.
프라이머리(Primary) : 읽기와 쓰기 연산을 모두 받아들일 수 있는 PostgreSQL 인스턴스예요.
복제본(Replica) : 클러스터의 유일한 프라이머리 인스턴스에서 복제하며, WAL(Write-Ahead Log) 레코드 스트림을 읽어 최신 상태로 유지되는 PostgreSQL 인스턴스예요. 복제본은 스탠바이(standby) 또는 세컨더리(secondary) 서버라고도 불러요. PostgreSQL은 물리적 스트리밍 복제(동기/비동기)와 파일 기반 로그 시핑(비동기)에 의존해요.
핫 스탠바이(Hot Standby) : 복제본이 읽기 전용 워크로드를 받아들일 수 있게 하는 PostgreSQL 기능이에요.
클러스터(Cluster) : 고가용성(HA) 클러스터로 이해하면 돼요. 단일 프라이머리와 선택적인 임의 개수의 복제본으로 구성된 PostgreSQL 인스턴스의 집합이에요.
복제 클러스터(Replica Cluster)
: 선택한 PostgreSQL 클러스터(보통 Kubernetes 클러스터 외부에 존재)로부터 지속적인 복구 모드에 있는 CloudNativePG Cluster예요. 프라이빗, 퍼블릭, 하이브리드, 멀티 클라우드 환경에서 멀티 클러스터 배포를 가능하게 하는 기능이에요.
지정 프라이머리(Designated Primary) : 복제 클러스터에서 다른 PostgreSQL 클러스터로부터 지속적으로 복구 중이며, 복제 클러스터가 프라이머리가 될 경우 프라이머리가 되도록 지정된 PostgreSQL 스탠바이 인스턴스예요.
수퍼유저(Superuser)
: PostgreSQL에서 수퍼유저는 LOGIN과 SUPERUSER 권한을 모두 가진 모든 역할을 말해요. 보안상의 이유로 CloudNativePG는 로컬 Unix Domain Socket을 통한 peer 인증으로 postgres 사용자로서 postgres 데이터베이스에 연결해 관리 작업을 수행해요.
WAL : Write-Ahead Logging(WAL)은 데이터베이스 관리 시스템에서 데이터 무결성을 보장하는 표준 방법이에요.
PVC 그룹
: CloudNativePG 용어에서 PVC 그룹은 같은 PostgreSQL 인스턴스에 속하는 관련 PVC들의 그룹이에요. 즉 PGDATA를 담는 메인 볼륨(storage)과 WAL용 볼륨(walStorage)을 말해요.
RTO : "recovery time objective(복구 시간 목표)"의 약어로, 애플리케이션에 악영향을 주지 않으면서 시스템이 사용 불가능해질 수 있는 시간의 양이에요.
RPO : "recovery point objective(복구 시점 목표)"의 약어로, 재해 복구 시나리오 이후 허용 가능한 데이터 손실 수준을 계산한 값이에요.
클라우드 용어
리전(Region) : 클라우드의 리전은 *가용 영역(availability zone)*으로 구성된 격리되고 독립적인 지리적 영역이에요. 리전 내의 영역들은 네트워크 왕복 지연 시간이 매우 짧아요.
영역(Zone) : 클라우드의 *가용 영역(zone)*은 리전 안에서 리소스를 배포할 수 있는 영역이에요. 보통 가용 영역은 데이터 센터 또는 같은 데이터 센터의 격리된 건물에 해당해요.
다음에 할 일
이제 용어에 익숙해졌으니, 선택한 클라우드 환경에 오퍼레이터를 배포하기 전에 로컬 클러스터를 사용해 노트북에서 CloudNativePG를 테스트해 볼 수 있어요.