Postgres Operator를 사용한 로컬 Kubernetes 환경에서의 빠른 시작

사전 준비 조건

Postgres Operator는 컨테이너 기반 클러스터 관리 도구로, Kubernetes(K8s) 환경에서 작동하도록 설계되었습니다. 로컬 테스트를 위해 다음 중 하나를 선택하여 환경을 구성하세요:

  • minikube: VM 내부에 단일 노드 K8s 클러스터를 생성 (KVM 또는 VirtualBox 필요)
  • kind 또는 k3d: Docker 기반으로 다중 노드 클러스터 생성 (Docker 설치 필요)

K8s 인프라와 상호작용하기 위해 kubectl CLI 도구를 설치해야 합니다.

Operator 배포 방법

Postgres Operator는 수동 배포, Kustomization, Helm 차트 세 가지 방식으로 설치할 수 있습니다.

수동 배포 (Kubernetes 기준)

다음 명령어를 순차적으로 실행하여 기본 리소스를 적용합니다:

git clone https://github.com/zalando/postgres-operator.git
cd postgres-operator

kubectl create -f manifests/configmap.yaml
kubectl create -f manifests/operator-service-account-rbac.yaml
kubectl create -f manifests/postgres-operator.yaml
kubectl create -f manifests/api-service.yaml

또는 kustomize를 사용해 전체 매니페스트를 한 번에 적용할 수 있습니다 (v1.14 이상 필요):

kubectl apply -k github.com/zalando/postgres-operator/manifests

편의상 제공되는 스크립트를 통해 minikube 환경에서 자동으로 오퍼레이터를 시작하고 최소 크기의 포스트그레스 클러스터를 생성할 수 있습니다:

./run_operator_locally.sh

OpenShift 환경에서의 수동 배포

OpenShift에서는 기본 설정이 호환되지 않으므로, kubernetes_use_configmaps 파라미터를 "true"로 설정해야 합니다. 또한 서비스 계정과 롤 정책이 약간 다르게 구성되어야 합니다:

oc create -f manifests/operator-service-account-rbac-openshift.yaml

Helm 차트를 통한 배포

Helm v3을 사용하면 간단한 명령어로 모든 리소스를 설치할 수 있습니다:

helm install postgres-operator ./charts/postgres-operator

이 차트는 Helm 2 및 3 모두 호환되며, v3에서는 crd-install 후크가 생략되며 경고 메시지가 표시됩니다. Helm 2 사용 시 문서는 별도로 제공됩니다.

오퍼레이터 상태 확인

배포 후 오퍼레이터가 정상적으로 동작하는지 확인하세요:

# YAML 기반 배포 시
kubectl get pod -l name=postgres-operator

# Helm 기반 배포 시
kubectl get pod -l app.kubernetes.io/name=postgres-operator

실행 중이지 않다면, 이벤트나 로그를 확인하세요:

kubectl logs "$(kubectl get pod -l name=postgres-operator --output='name')"

UI 컴포넌트 배포

웹 기반 관리 인터페이스인 UI를 사용하려면 오퍼레이터가 실행 중이고, REST API에 접근 가능한 상태여야 합니다. 다음 명령어로 UI를 배포할 수 있습니다:

# 수동 배포
kubectl apply -f ui/manifests/

# Kustomization 사용
kubectl apply -k github.com/zalando/postgres-operator/ui/manifests

# Helm 차트 사용
helm install postgres-operator-ui ./charts/postgres-operator-ui

UI Pod가 실행 중인지 확인 후, 포트 포워딩을 통해 브라우저에서 접근 가능합니다:

kubectl port-forward svc/postgres-operator-ui 8081:80

브라우저에서 localhost:8081로 접속하면 관리 인터페이스를 확인할 수 있습니다.

포스트그레스 클러스터 생성

오퍼레이터가 실행 중이라면, 새로운 postgresql 커스텀 리소스를 생성하여 클러스터를 시작할 수 있습니다:

kubectl create -f manifests/minimal-postgres-manifest.yaml

클러스터 생성 후, 다음과 같은 리소스들이 생성되었는지 확인하세요:

  • StatefulSet: 데이터베이스 인스턴스를 관리
  • Pods: 각각 -0, -1 등으로 이름 지어짐
  • Services: 마스터용, 복제용으로 구분됨
kubectl get postgresql
kubectl get pods -l application=spilo -L spilo-role
kubectl get svc -l application=spilo -L spilo-role

psql로 연결하기

마스터 노드에 연결하기 위해 포트 포워딩을 사용하거나, minikube의 서비스 정보를 활용할 수 있습니다:

export HOST_PORT=$(minikube service acid-minimal-cluster --url | sed 's,.*/,,')
export PGHOST=$(echo $HOST_PORT | cut -d: -f 1)
export PGPORT=$(echo $HOST_PORT | cut -d: -f 2)

export PGPASSWORD=$(kubectl get secret postgres.acid-minimal-cluster.credentials -o 'jsonpath={.data.password}' | base64 -d)
export PGSSLMODE=require
psql -U postgres

클러스터 삭제

클러스터를 제거하려면 커스텀 리소스를 삭제하면 됩니다:

kubectl delete postgresql acid-minimal-cluster

이 작업은 관련된 StatefulSet, Pods, Services, Endpoints, PV 등을 제거하지만, Secret과 백업 데이터는 유지됩니다. 만약 클러스터가 초기화 중에 삭제되면 일부 리소스가 남아 있을 수 있으므로, 새로 시작하려면 minikube 또는 kind 클러스터를 재생성하는 것이 좋습니다.

태그: Postgres Operator kubernetes helm Spilo Patroni

7월 3일 04:34에 게시됨