쿠버네티스

Kubernetes에 Bitnami PostgreSQL 배포 가이드

황동리 2025. 11. 10. 10:08
반응형

이번엔 Bitnami PostgreSQL-HA 설치를 해보겠습니다.


사전 준비

  1. k8s 클러스터
  2. Helm 설치

HA(PostgreSQL High Availability)란 무엇인가?

PostgreSQL은 기본적으로 단일 노드로 동작하지만, 운영 환경에서는 장애 발생 시 서비스 중단이 발생할 수 있습니다.


이를 방지하기 위해 Primary(주 서버)Replica(보조 서버)를 구성하여, 장애 시 자동으로 Replica가 Primary로 승격되는 고가용성(High Availability, HA) 구성이 필요합니다.


Bitnami의 postgresql-ha 차트는 이러한 HA 구성을 손쉽게 구현할 수 있도록 도와주는 Helm Chart입니다.

설치

이제부터 설치해보도록 하겠습니다.


https://artifacthub.io/packages/helm/bitnami/postgresql-ha


먼저 위 주소에가서 DEFAULT VAULE 파일을 받아줍니다.


그리고 설치에 필요한 부분을 수정해줍니다.


여기서 중요한 부분이 있습니다.

Bitnami에서는 기존의 docker.io/bitnami/ 형태로 제공되던 버전 태그 이미지들을 더 이상 일반 공개 카탈로그에서 유지하지 않는다고 발표했습니다.

따라서 repository 주소를 bitnamilegacy 로 변경해주어야 합니다.

  • vaules.yaml 파일 내용 수정
 postgresql:
   image:
     registry: docker.io
     repository: bitnamilegacy/postgresql-repmgr
     tag: 17.6.0-debian-12-r2
   username: dbuser # 일반 사용자
   password: "원하는 패스워드" # 일반 사용자의 패스워드
   database: "원파는 데이터베이스 이름" # 초기에 사용할 데이터베이스 
   postgresPassword: "원하는 패스워드" # 슈퍼 유저의 패스워드 입력

pgpool:  
  image:  
    registry: docker.io  
    repository: bitnamilegacy/pgpool  
    tag: 4.6.3-debian-12-r0  
  adminUsername: admin  
  adminPassword: "원하는 패스워드"  
  srCheckUsername: "sr_check_user"  
  srCheckPassword: "원하는 패스워드"  
  srCheckDatabase: postgres

persistence:  
  enabled: true  
    storageClass: "스토리지 클래스 이름" # 저 같은 경우 먼저 k8s 클러스터에 storageClass를 정의 해두어서 해당 스토리지 클래스를 사용하여 PV를 붙였습니다.  
    accessModes:  
      - ReadWriteOnce  
        size: 20Gi

values.yaml 파일의 내용 수정 완료하고 아래 명령어를 통해 설치를 해줍니다.

helm repo add bitnami https://charts.bitnami.com/bitnami
helm pull oci://registry-1.docker.io/bitnamicharts/postgresql-ha --version 16.3.2

그리고 정상적으로 설치가 되면 아래와 같이 결과가 나옵니다.

k get pods

kNAME                                               READY   STATUS    RESTARTS   AGE
bifrost-deployment-76864b985-gh6vz                 1/1     Running   0          23h
postgresql-postgresql-ha-pgpool-5b486f96f8-d5lxv   1/1     Running   0          24h
postgresql-postgresql-ha-postgresql-0              1/1     Running   0          24h
postgresql-postgresql-ha-postgresql-1              1/1     Running   0          24h
postgresql-postgresql-ha-postgresql-2              1/1     Running   0          24h

k get pvc

NAME                                         STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
bifrost-volume-claim                         Bound    pvc-8d7c2a4c-9ab2-46e8-9632-7db310cf569f   20Gi       RWO            ebs-gp3-sc     <unset>                 23h
data-postgresql-postgresql-ha-postgresql-0   Bound    pvc-24b35757-afae-4091-8360-2ee83f11ba73   20Gi       RWO            ebs-gp3-sc     <unset>                 25h
data-postgresql-postgresql-ha-postgresql-1   Bound    pvc-3cf62ce7-2990-4969-b11f-1c8436dc338d   20Gi       RWO            ebs-gp3-sc     <unset>                 25h
data-postgresql-postgresql-ha-postgresql-2   Bound    pvc-112bf1b0-e59a-497e-99e5-3cd361da4a03   20Gi       RWO            ebs-gp3-sc     <unset>                 25h

이상 입니다.

반응형