1.3 Quickstart: 5분 만에 첫 클러스터
로컬 Kubernetes에 CloudNativePG Operator를 설치하고, PostgreSQL Cluster를 하나 띄워 접속까지 해 본다. 여기서는 가벼운 로컬 클러스터인 kind를 기준으로 설명한다. minikube도 동일하게 쓸 수 있다.
준비물
kubectl(Kubernetes 공식 문서의 설치 안내를 따른다)- kind 또는 minikube 중 하나
- Docker 등 컨테이너 런타임 (kind가 내부적으로 사용)
kind(Kubernetes IN Docker)는 Docker 컨테이너를 node로 삼아 로컬에 Kubernetes 클러스터를 띄우는 도구다. 실제 서버 없이 노트북에서 CNPG를 실습하기에 적합하다. 프로덕션 용도는 아니다.
절차
### Step 1. 로컬 Kubernetes 클러스터 생성### Step 2. CloudNativePG Operator 설치
1.30 릴리스의 매니페스트를 `--server-side` 모드로 적용한다.
```bash
kubectl apply --server-side -f \
https://raw.githubusercontent.com/cloudnative-pg/cloudnative-pg/release-1.30/releases/cnpg-1.30.0.yaml
```
Operator가 정상적으로 떴는지는 rollout 상태로 확인한다.
```bash
kubectl rollout status deployment \
-n cnpg-system cnpg-controller-manager
```
`successfully rolled out` 메시지가 나오면 Operator가 `cnpg-system` namespace에서 동작 중이다.
### Step 3. Cluster 매니페스트 작성
`cluster-example.yaml` 파일을 만든다. primary 1개 + replica 2개, 총 3개 인스턴스 구성이다.
```yaml
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
name: cluster-example
spec:
instances: 3
storage:
size: 1Gi
```특정 PostgreSQL 버전이 필요하면 `spec`에 `imageName`을 추가한다.
```yaml
spec:
instances: 3
imageName: ghcr.io/cloudnative-pg/postgresql:13.6
storage:
size: 1Gi
```
### Step 4. Cluster 배포
```bash
kubectl apply -f cluster-example.yaml
```
### Step 5. 상태 확인
Pod가 뜨는 과정을 지켜본다.
```bash
kubectl get pods -l cnpg.io/cluster=cluster-example
```
인스턴스가 모두 준비되면 3개의 Pod가 `Running` 상태로 보인다. `cnpg` kubectl 플러그인을 설치했다면 사람이 읽기 좋은 요약도 볼 수 있다.
```bash
kubectl cnpg status cluster-example
```
여기에는 어느 Pod가 primary이고 어느 것이 replica인지, replication 지연은 얼마인지 등이 표시된다.
### Step 6. 접속
`cnpg` 플러그인으로 primary에 곧장 `psql` 세션을 연다.
```bash
kubectl cnpg psql cluster-example
```
애플리케이션 관점에서는 개별 Pod가 아니라 Operator가 만들어 준 service를 통해 접속한다. read-write 트래픽은 `cluster-example-rw` service가 항상 현재 primary를 가리킨다.
```bash
kubectl get svc -l cnpg.io/cluster=cluster-example
```
kind create cluster --name pginstances: 3은 primary 1개와 replica 2개를 뜻한다. Operator가 그중 하나를 primary로 선출하고 나머지를 streaming replication으로 붙인다. storage.size는 각 인스턴스의 PVC 크기다. 이미지를 지정하지 않았으므로 1.30 기본값인 PostgreSQL 18 계열 이미지가 쓰인다.배포 결과 한눈에 보기
flowchart TD
M[cluster-example.yaml] -->|kubectl apply| OP[CNPG Operator]
OP --> RW[cluster-example-rw Service]
OP --> PRI[Primary Pod]
OP --> R1[Replica Pod]
OP --> R2[Replica Pod]
RW --> PRI
PRI -.replication.-> R1
PRI -.replication.-> R2
이 구성은 실습용이다.
storage.size: 1Gi와 단일 node kind 클러스터는 프로덕션 기준을 충족하지 못한다. 실제 운영에서는 스토리지 용량·backup·리소스 요청/제한·node 분산(affinity)을 반드시 함께 설계한다. 이후 파트에서 다룬다.정리
Operator 매니페스트 하나를 적용하고, 인스턴스 수와 스토리지 크기만 담은 짧은 Cluster 매니페스트를 선언하면 high availability PostgreSQL 클러스터가 뜬다. failover·service 배선·replication 구성은 Operator가 알아서 처리한다. 다음 절에서는 이 Operator가 어느 수준까지 운영을 자동화하는지 성숙도 단계로 정리한다.