study/백엔드

Kubernetes에서 PostgreSQL 배포 및 설정하기

octo54 2025. 3. 20. 01:07
반응형

Kubernetes에서 PostgreSQL 배포 및 설정하기

1. 개요

이 글에서는 Kubernetes 환경에서 PostgreSQL을 배포하고 설정하는 방법을 다룹니다. Mac Mini에서 Minikube를 활용하여 실행할 것이며, Helm을 이용한 PostgreSQL 설치데이터 영속성(Persistent Volume) 설정 방법을 설명합니다.


2. Kubernetes에서 PostgreSQL 실행 아키텍처

Kubernetes 환경에서 PostgreSQL을 실행하는 기본적인 구성 요소는 다음과 같습니다:

  1. PostgreSQL Pod - 데이터베이스 컨테이너 실행
  2. Persistent Volume (PV) 및 Persistent Volume Claim (PVC) - 데이터 영속성 보장
  3. Service - PostgreSQL을 외부 서비스 및 다른 Pod와 연결

이러한 구성을 통해 PostgreSQL을 안전하게 실행하고 데이터 손실 없이 운영할 수 있습니다.


3. Helm을 이용한 PostgreSQL 설치

반응형

3.1 Helm 설치 (필요한 경우)

Helm은 Kubernetes에서 패키지 관리를 쉽게 할 수 있도록 도와주는 도구입니다. PostgreSQL 배포를 위해 먼저 Helm을 설치합니다.

# Helm 설치
brew install helm

# Helm 저장소 추가
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update

3.2 PostgreSQL 배포

이제 Helm을 사용하여 PostgreSQL을 Kubernetes에 배포합니다.

# PostgreSQL 배포
helm install my-postgres bitnami/postgresql \
  --set global.postgresql.auth.username=admin \
  --set global.postgresql.auth.password=securepassword \
  --set global.postgresql.auth.database=mydatabase

3.3 PostgreSQL 배포 상태 확인

배포가 완료되었는지 확인하려면 다음 명령어를 실행합니다.

# PostgreSQL Pod 확인
kubectl get pods

# PostgreSQL 서비스 확인
kubectl get svc

4. 데이터 영속성을 위한 Persistent Volume 설정

PostgreSQL 데이터는 기본적으로 휘발성 데이터로 저장되기 때문에 **Persistent Volume (PV) 및 Persistent Volume Claim (PVC)**을 설정해야 합니다.

4.1 Persistent Volume 정의

아래 postgres-pv.yaml 파일을 생성합니다.

apiVersion: v1
kind: PersistentVolume
metadata:
  name: postgres-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data/postgres"

적용:

kubectl apply -f postgres-pv.yaml

4.2 Persistent Volume Claim 정의

아래 postgres-pvc.yaml 파일을 생성합니다.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: postgres-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi

적용:

kubectl apply -f postgres-pvc.yaml

Persistent Volume이 정상적으로 연결되었는지 확인하려면 다음 명령어를 실행합니다.

kubectl get pv,pvc

5. PostgreSQL 접근 및 네트워크 설정

5.1 PostgreSQL Pod 내부 접근

Kubernetes 내부에서 PostgreSQL에 접근하려면 다음 명령어를 사용합니다.

# PostgreSQL에 접속
kubectl run postgres-client --rm -it --image=postgres -- bash

# PostgreSQL 내부 접속
psql -h my-postgres-postgresql -U admin -d mydatabase

5.2 외부 접근을 위한 서비스 설정

PostgreSQL을 외부에서 접근 가능하도록 NodePort 또는 LoadBalancer 서비스를 설정할 수 있습니다.

아래 postgres-service.yaml 파일을 생성합니다.

apiVersion: v1
kind: Service
metadata:
  name: postgres-service
spec:
  type: NodePort
  ports:
    - port: 5432
      targetPort: 5432
      nodePort: 30007
  selector:
    app.kubernetes.io/name: postgresql

적용:

kubectl apply -f postgres-service.yaml

이제 Mac Mini의 IP:30007 포트로 PostgreSQL에 접근할 수 있습니다.

psql -h $(minikube ip) -p 30007 -U admin -d mydatabase

다음 글에서 다룰 내용

  • Nginx Reverse Proxy를 Kubernetes에서 배포하는 방법
  • PostgreSQL과 애플리케이션을 연결하는 방법
  • 쿠버네티스에서 보안 및 성능 최적화