PostgreSQL을 Helm 차트로 Kubernetes에 배포하기
Helm을 이용해 PostgreSQL을 Kubernetes에 안정적으로 배포하고 주요 values 설정, 영속성, 업그레이드, 백업 전략을 포함한 실무 중심의 기술자료
목차
개요
이 글은 Helm 차트를 사용해 Kubernetes에 PostgreSQL을 배포하는 과정을 처음 접하는 사람도 이해하기 쉽게 정리한 자료다. 기본 개념부터 values 설정 예시, 배포·업그레이드·백업 전략까지 실무에 바로 적용할 수 있는 내용을 중심으로 설명한다. 핵심 키워드는 helm postgres 차트 사용법, k8s postgres helm 배포, postgres helm values 설정이다.
사전 준비
요구사항
- Kubernetes 클러스터와 kubectl 설정
- Helm 3 설치
- 클러스터에 PersistentVolume을 지원하는 스토리지 클래스
Helm 차트 선택
공식적이고 커뮤니티에서 검증된 PostgreSQL 차트를 선택하는 것이 좋다. 예를 들어 Bitnami 또는 Helm Charts 저장소의 postgresql 차트가 널리 사용된다. 차트 선택 후 차트의 values 문서를 먼저 확인한다. values 파일에 어떤 값들을 덮어쓸 수 있는지 파악하면 배포가 수월해진다.
기본 배포 절차
아래 예시는 Bitnami PostgreSQL 차트를 사용하는 기본 설치 과정이다. 네임스페이스 생성, 차트 설치, values 적용 순으로 진행한다.
네임스페이스 생성
kubectl create namespace postgres
간단한 Helm 설치 명령
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
helm install my-postgres bitnami/postgresql -n postgres
postgres helm values 설정
실무에서는 values.yaml을 만들어 세부 설정을 관리한다. 주요 설정은 비밀번호, 영속성, 리소스, 서비스 타입, 포트 등이다. 예시 values 파일을 참고해 필요한 값만 변경한다.
postgresql:
postgresPassword: "securepassword"
replication:
enabled: false
persistence:
enabled: true
size: 8Gi
storageClass: "standard"
resources:
requests:
cpu: 250m
memory: 256Mi
limits:
cpu: 500m
memory: 512Mi
service:
type: ClusterIP
port: 5432
위 예시에서 postgres helm values 설정으로 비밀번호나 persistence 크기, storageClass를 지정한다. production 환경에서는 리소스와 영속성 설정을 더 엄격히 조정해야 한다.
Helm으로 values 적용하여 설치
helm install my-postgres bitnami/postgresql -n postgres -f values.yaml
설치 후에는 kubectl로 상태를 확인한다.
kubectl get pods -n postgres
kubectl get pvc -n postgres
업그레이드와 설정 변경
차트 버전이나 이미지 태그를 변경할 때는 helm upgrade를 사용한다. 변경된 values만 가지고 안전하게 업그레이드할 수 있다.
helm upgrade my-postgres bitnami/postgresql -n postgres -f values.yaml
업그레이드 전에 반드시 릴리스의 현재 상태와 차트 변경 로그를 검토한다. 롤백이 필요하면 helm rollback을 사용한다.
helm rollback my-postgres 1 -n postgres
백업과 복구
백업은 정기적으로 수행해야 한다. 간단한 방법으로는 pg_dump를 사용해 데이터를 덤프하고 외부 스토리지에 보관하는 방식이 있다.
# pod 이름 확인
kubectl get pods -n postgres
# 백업 수행
kubectl exec -n postgres -it my-postgres-0 -- pg_dumpall -U postgres > backup.sql
복구는 덤프 파일을 psql로 입력하면 된다. StatefulSet이나 볼륨 교체 시 데이터를 복구해야 할 경우가 있으므로 백업 절차를 문서화해 두는 것이 좋다.
영속성(Persistence) 고려사항
PersistentVolume과 StorageClass는 성능과 가용성에 큰 영향을 준다. SSD 기반 스토리지가 권장되며, 스토리지 크기와 IOPS 요구사항을 사전에 파악해 values에 반영한다. 또한 스냅샷 기능을 제공하는 스토리지라면 장애 복구가 수월하다.
모니터링과 로깅
PostgreSQL 인스턴스는 모니터링이 필수다. Prometheus, Grafana, 그리고 차트에서 제공하는 metrics 설정을 활용해 쿼리 지연, 디스크 사용량, 연결 수 등을 모니터링한다. 로그는 중앙 로깅 시스템으로 수집하여 장애 원인을 분석한다.
문제 해결 팁
- Pod CrashLoopBackOff: 로그 확인 및 init 스크립트 오류 점검
- PVC 바인딩 실패: storageClass와 용량 요청 확인
- 접속 불가: 서비스 타입, 포트, 인증 정보 확인
맺음말
Helm을 활용하면 PostgreSQL 배포와 운영이 훨씬 간편해진다. 특히 values.yaml으로 설정을 중앙에서 관리하면 환경별 차이를 체계적으로 관리할 수 있다. 본문에서 제시한 설치 절차와 values 설정 예시는 기본 틀을 제시하는 것이므로, 실제 환경에서는 보안, 리소스 요구량, 백업 정책을 반영해 조정해야 한다.