📝 개요
이 글에서는 Helm과 ArgoCD를 활용하여 PostgreSQL을 Kubernetes에 배포하는 방법을 설명합니다.
GitOps 기반의 배포 전략을 사용하여 PostgreSQL을 쉽게 관리할 수 있도록 ArgoCD를 활용합니다.
📌 1. Helm을 사용하여 PostgreSQL 설치
Helm은 Kubernetes 애플리케이션을 패키징하고 배포하는 도구입니다.
PostgreSQL의 경우, Bitnami Helm Chart를 사용하여 배포할 수 있습니다.
1️⃣ 네임스페이스 생성
먼저 database 네임스페이스를 생성합니다.
kubectl create namespace database
2️⃣ Helm Chart를 사용한 PostgreSQL 설치
다음 명령어를 실행하여 Bitnami PostgreSQL Chart를 database 네임스페이스에 배포합니다.
helm install postgresql bitnami/postgresql \
--namespace database \
--set auth.postgresPassword=postgresql \
--set auth.username=adminuser \
--set auth.password=admin1234 \
--set auth.database=ragdb \
--set primary.persistence.enabled=true \
--set primary.persistence.size=8Gi \
--set primary.service.type=LoadBalancer
✅ 설명
• auth.postgresPassword=postgresql → postgres 사용자의 비밀번호 설정
• auth.username=adminuser → adminuser 사용자 생성
• auth.password=admin1234 → adminuser의 비밀번호 설정
• auth.database=ragdb → 기본 데이터베이스를 ragdb로 설정
• primary.persistence.enabled=true → 데이터를 유지하도록 영속적 저장소 활성화
• primary.service.type=LoadBalancer → 외부에서 접근 가능하도록 서비스 타입 설정
3️⃣ PostgreSQL 설치 확인
설치가 완료되었는지 확인하려면 다음 명령어를 실행합니다.
kubectl get pods -n database
✅ postgresql-0과 같은 Pod이 정상적으로 실행 중이어야 합니다.
NAME READY STATUS RESTARTS AGE
postgresql-0 1/1 Running 0 1m
또한, 서비스가 정상적으로 배포되었는지 확인합니다.
kubectl get svc -n database
✅ LoadBalancer 타입의 서비스가 정상적으로 동작 중이어야 합니다.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
postgresql LoadBalancer 10.108.8.121 localhost 5432:32376/TCP
📌 2. ArgoCD를 사용한 PostgreSQL GitOps 배포
Helm을 수동으로 설치하는 대신, ArgoCD를 이용하여 GitOps 방식으로 PostgreSQL을 관리할 수 있습니다.
1️⃣ ArgoCD에서 PostgreSQL을 관리할 Git 저장소 구성
GitOps 방식으로 PostgreSQL을 배포하기 위해 gitops 저장소를 준비합니다.
mkdir -p ~/workspace/gitops/argocd/postgresql
cd ~/workspace/gitops/argocd/postgresql
1️⃣ values.yaml 파일 생성
GitOps 배포 시 사용할 values.yaml 파일을 작성합니다.
📌 ~/workspace/gitops/argocd/postgresql/values.yaml
primary:
persistence:
enabled: true
size: 8Gi
service:
type: LoadBalancer
auth:
postgresPassword: "postgresql"
username: "adminuser"
password: "admin1234"
database: "ragdb"
2️⃣ Application 리소스 정의
ArgoCD를 통해 PostgreSQL을 배포하기 위해 Application 리소스를 작성합니다.
📌 ~/workspace/gitops/argocd/postgresql/application.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: postgresql
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/your-org/gitops.git # Git 저장소 URL
targetRevision: HEAD
path: argocd/postgresql # values.yaml이 있는 경로
helm:
valueFiles:
- values.yaml
destination:
server: https://kubernetes.default.svc
namespace: database
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
3️⃣ Git 저장소에 values.yaml 및 application.yaml 푸시
GitOps 방식으로 관리하기 위해 작성한 파일을 Git 저장소에 올립니다.
cd ~/workspace/gitops
git add argocd/postgresql
git commit -m "Add PostgreSQL deployment with ArgoCD"
git push origin main
4️⃣ ArgoCD에 PostgreSQL 배포
Git 저장소에 파일을 올린 후, ArgoCD에서 PostgreSQL을 배포합니다.
kubectl apply -f ~/workspace/gitops/argocd/postgresql/application.yaml -n argocd
✅ ArgoCD에서 PostgreSQL 배포 상태를 확인하려면:
argocd app list
또는 ArgoCD UI에서 postgresql 애플리케이션이 정상적으로 배포되었는지 확인할 수 있습니다.
📌 3. PostgreSQL 접속 확인
배포가 완료되었으면, PostgreSQL에 접속하여 설정이 정상적으로 적용되었는지 확인할 수 있습니다.
1️⃣ adminuser 계정으로 PostgreSQL 접속
kubectl exec -it $(kubectl get pod -n database -l app.kubernetes.io/name=postgresql -o jsonpath="{.items[0].metadata.name}") -n database -- psql -U adminuser -d ragdb
✅ 정상적으로 접속되면 프롬프트가 출력됩니다.
psql (14.2)
Type "help" for help.
ragdb=>
📌 테이블 목록 조회
\dt
📌 현재 사용자의 권한 확인
SELECT rolname, rolpassword FROM pg_authid WHERE rolname='adminuser';
📌 연결 종료
\q
📌 4. 최종 정리
✅ Helm을 사용하여 PostgreSQL을 Kubernetes에 설치
✅ ArgoCD를 사용하여 PostgreSQL을 GitOps 방식으로 배포
✅ values.yaml을 통해 PostgreSQL 기본 설정 적용
✅ PostgreSQL이 정상적으로 실행되고 있는지 확인
✅ SQL을 실행하여 사용자가 정상적으로 생성되었는지 검증
'Data Engineering > Data Infra & Process' 카테고리의 다른 글
[4편] PostgreSQL을 Vector Database로 활용하기 (pgvector 설정 및 사용) (0) | 2025.03.07 |
---|---|
[3편] PostgreSQL 사용자(Role) 추가 및 수동 관리 (SQL 쿼리 방식) (0) | 2025.03.07 |
[2편] Helm values.yaml을 활용한 PostgreSQL 사용자(Role) 추가 및 관리 (0) | 2025.03.07 |
Kubernetes 환경에서 MySQL Helm Chart 설치하기 (0) | 2025.02.27 |
ETL(Extract, Transform, Load)이란? 데이터 처리의 핵심 개념 완벽 정리! (0) | 2025.02.23 |