Computer >> 컴퓨터 >  >> 프로그래밍 >> SQL

쿠버네티스에 PostgreSQL 배포하기: 안정적이고 확장 가능한 데이터베이스 구축 완벽 가이드

PostgreSQL은 복잡한 대용량 데이터 세트를 안정적으로 처리하는 데 특화된 오픈소스 관계형 데이터베이스(RDBMS)입니다. Kubernetes는 컨테이너화된 애플리케이션의 배포, 스케일링, 운영을 자동화하는 오케스트레이션 플랫폼으로, 두 기술을 결합하면 자동 스케일링, 무중단 롤링 업데이트, 그리고 복제본(Replica)과 장애 조치(Failover)를 통한 향상된 신뢰성이라는 강력한 시너지를 얻을 수 있습니다.

배포 전체 흐름 한눈에 보기

PostgreSQL을 쿠버네티스에 배포하는 전체 과정은 다음과 같습니다.

① 클러스터 구성 → ② 이미지 준비 → ③ 매니페스트 작성 → ④ 배포 → ⑤ 모니터링

1단계: 쿠버네티스 클러스터 구성

AWS EKS, GCP GKE, Azure AKS 같은 관리형 클라우드 서비스를 이용하거나, 로컬 테스트 환경에서는 Minikube로 손쉽게 클러스터를 구성할 수 있습니다. 클러스터가 준비되면 필수 CLI 도구인 kubectl을 설치하고, 필요하다면 패키지 관리 도구인 Helm도 함께 설치해 두면 이후 관리가 훨씬 편리합니다.

2단계: 배포 매니페스트(Manifest) 작성

YAML 파일에 환경 변수, 영구 볼륨(Persistent Volume), 포트 정보를 정의하여 PostgreSQL 배포를 선언합니다. 아래 예시는 Deployment와 Service를 하나의 파일에 담은 매니페스트입니다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres
spec:
  replicas: 1
  selector:
    matchLabels:
      app: postgres
  template:
    metadata:
      labels:
        app: postgres
    spec:
      containers:
      - name: postgres
        image: postgres:16
        ports:
        - containerPort: 5432
        env:
        - name: POSTGRES_USER
          value: "admin"
        - name: POSTGRES_PASSWORD
          value: "secretpass"
        - name: POSTGRES_DB
          value: "mydb"
        volumeMounts:
        - mountPath: /var/lib/postgresql/data
          name: postgres-storage
      volumes:
      - name: postgres-storage
        persistentVolumeClaim:
          claimName: postgres-pvc
---
apiVersion: v1
kind: Service
metadata:
  name: postgres-svc
spec:
  selector:
    app: postgres
  ports:
  - port: 5432
    targetPort: 5432
  type: ClusterIP

참고: 실제 운영 환경에서는 위처럼 비밀번호를 평문으로 노출하지 말고, 반드시 Kubernetes Secret 오브젝트를 사용해 민감 정보를 안전하게 관리하는 것이 좋습니다.

3단계: 배포 및 모니터링

매니페스트 작성이 끝나면 kubectl apply로 배포를 진행하고, 아래 명령어들로 상태를 확인합니다.

# 배포 실행
kubectl apply -f postgres-manifest.yaml

# 파드 상태 확인
kubectl get pods

# 로그 조회
kubectl logs <pod-name>

# 리소스 사용량 모니터링
kubectl top pods

kubectl get pods로 파드가 정상적으로 Running 상태인지 확인하고, 로그와 리소스 사용량을 지속적으로 점검하여 문제를 조기에 발견하는 것이 중요합니다.

4단계: 스케일링과 백업

운영 중 트래픽이 증가하면 레플리카 수를 늘려 손쉽게 확장할 수 있으며, pg_dump를 활용한 주기적인 백업으로 데이터를 안전하게 보호하세요.

# 레플리카 수 확장
kubectl scale deployment postgres --replicas=3

# pg_dump를 사용한 백업
kubectl exec <pod-name> -- pg_dump -U admin mydb > backup.sql

마무리

쿠버네티스에 PostgreSQL을 배포하면 견고한 데이터베이스 관리와 컨테이너 오케스트레이션의 장점, 즉 자동 스케일링, 롤링 업데이트, 영구 스토리지, 장애 조치까지 한 번에 누릴 수 있습니다. 핵심은 YAML 매니페스트로 배포를 선언하고, kubectl apply로 적용한 뒤, 표준 쿠버네티스 명령어로 꾸준히 모니터링하는 것입니다. 이 가이드를 따라 하면 안정적이고 확장 가능한 데이터베이스 환경을 빠르게 구축할 수 있습니다.