문서 목차
ORKESTRIX설치
PostgreSQL (Patroni)
Patroni (Zalando postgres operator) 기반의 고가용성 PostgreSQL 클러스터를 구성합니다. 마스터 장애 시 레플리카가 자동으로 마스터로 승격되며, 웹 UI(Patroni UI, pgAdmin)로 클러스터 상태와 데이터를 관리할 수 있습니다.
QUANTUM C&S
Patroni(Zalando postgres-operator) 기반의 고가용성 PostgreSQL 클러스터를 구성합니다. 마스터 장애 시 레플리카가 자동으로 마스터로 승격되며, 웹 UI(Patroni UI, pgAdmin)로 클러스터 상태와 데이터를 관리할 수 있습니다.
설정값
inventory/qks/group_vars/all/all-k8s.yaml:
qks_patroni_enabled: true
qks_patroni_version: "1.15.1"
qks_patroni_spilo_tag: "4.0-p3"
qks_patroni_cluster_instances: 3
qks_patroni_pg_version: "17"
qks_patroni_db_name: qks
qks_patroni_db_user: qks
qks_patroni_storage_size: 50Gi
qks_patroni_ui_fqdn: "patroni.{{ kube_default_domain }}"
qks_patroni_pgadmin_fqdn: "pg.{{ kube_default_domain }}"
실행
./install.sh ubuntu plays/qks-patroni.yaml
설치 흐름
./install.sh ubuntu plays/qks-patroni.yaml
├─ 1. Patroni UI/pgAdmin 접속 도메인을 각 노드 /etc/hosts에 등록
├─ 2. Helm 저장소 등록 ('zalando', 'zalando-ui', 'runix')
├─ 3. 네임스페이스 생성
├─ 4. Helm으로 Zalando postgres-operator 배포
├─ 5. Operator 준비 상태 확인
├─ 6. Helm으로 Patroni UI 배포
├─ 7. Patroni UI Ingress 매니페스트 템플릿 생성 · 적용
├─ 8. Helm으로 pgAdmin 배포
├─ 9. pgAdmin Ingress 매니페스트 템플릿 생성 · 적용
├─ 10. PostgreSQL 클러스터 매니페스트(CustomResource) 템플릿 생성
└─ 11. PostgreSQL 클러스터 매니페스트 적용 → Operator가 감지해 마스터+레플리카 파드 자동 구성
설치 확인
kubectl get postgresql -n <qks_patroni_cluster_namespace>
kubectl get pods -n <qks_patroni_cluster_namespace> -l application=spilo -L spilo-role
STATUS: Running, 파드 1개는 master, 나머지는 replica 역할로 표시되어야 합니다.
실제 동작 확인
데이터관리 + 복제 확인:
PGPASS=$(kubectl get secret -n <ns> <qks_patroni_db_user>.<qks_patroni_cluster_name>.credentials.postgresql.acid.zalan.do -o jsonpath='{.data.password}' | base64 -d)
# 마스터에 쓰기
kubectl exec -n <ns> <qks_patroni_cluster_name>-0 -- env PGPASSWORD="$PGPASS" psql -U <qks_patroni_db_user> -h <qks_patroni_cluster_name> -d <qks_patroni_db_name> -c "
CREATE TABLE IF NOT EXISTS gs_test (id INT PRIMARY KEY, msg VARCHAR(50));
INSERT INTO gs_test VALUES (1, 'hello');
"
# 레플리카 서비스로 읽기
kubectl exec -n <ns> <qks_patroni_cluster_name>-0 -- env PGPASSWORD="$PGPASS" psql -U <qks_patroni_db_user> -h <qks_patroni_cluster_name>-repl -d <qks_patroni_db_name> -c "SELECT * FROM gs_test;"
레플리카 조회 결과에 방금 쓴 값이 나오면 복제가 정상입니다.
자동 장애조치 확인:
kubectl delete pod -n <ns> <qks_patroni_cluster_name>-0 # 현재 마스터를 강제 종료
# 30~40초 후
kubectl get pods -n <ns> -l application=spilo -L spilo-role
다른 파드가 자동으로 master로 승격되고, 종료됐던 파드는 replica로 재기동되면 정상입니다. 연결 주소(<qks_patroni_cluster_name> 서비스)를 바꾸지 않아도 자동으로 새 마스터에 연결됩니다.
웹 UI 확인:
curl -k -s https://<qks_patroni_ui_fqdn>/ | grep -i title
curl -k -s -o /dev/null -w "%{http_code}\n" https://<qks_patroni_pgadmin_fqdn>/