Kubernetes에서 PostgreSQL 배포 및 설정하기
Kubernetes에서 PostgreSQL 배포 및 설정하기
1. 개요
이 글에서는 Kubernetes 환경에서 PostgreSQL을 배포하고 설정하는 방법을 다룹니다. Mac Mini에서 Minikube를 활용하여 실행할 것이며, Helm을 이용한 PostgreSQL 설치 및 데이터 영속성(Persistent Volume) 설정 방법을 설명합니다.
2. Kubernetes에서 PostgreSQL 실행 아키텍처
Kubernetes 환경에서 PostgreSQL을 실행하는 기본적인 구성 요소는 다음과 같습니다:
- PostgreSQL Pod - 데이터베이스 컨테이너 실행
- Persistent Volume (PV) 및 Persistent Volume Claim (PVC) - 데이터 영속성 보장
- 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과 애플리케이션을 연결하는 방법
- 쿠버네티스에서 보안 및 성능 최적화