Data Engineering/Data Infra & Process

[1편] Kubernetes에 Helm & ArgoCD를 사용한 PostgreSQL 설치

ygtoken 2025. 3. 7. 14:46
728x90

📝 개요

 

이 글에서는 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=postgresqlpostgres 사용자의 비밀번호 설정

auth.username=adminuseradminuser 사용자 생성

auth.password=admin1234adminuser의 비밀번호 설정

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을 실행하여 사용자가 정상적으로 생성되었는지 검증

 

 

728x90