Postgresql 데이터베이스를 Docker로 설치하는 방법과 Kubernetes에 HELM으로 간편하게 설치하는 방법을 설명합니다. 설치를 위해 필요한 스크립트도 제공할 예정이며, 제공한 스크립트를 자신의 환경에 맞게 수정하여 사용하면 됩니다.
사전 준비 사항:
- Docker 및 Docker-Compose가 설치된 환경
- Kubernetes 클러스터 접근 권한
- Helm이 설치된 환경
전체 내용:
- Docker Compose로 설치:
- Localhost에 Docker를 이용하여 설치.
- Kubernetes에 설치:
- Helm을 이용하여 설치.
* Local에 Docker Compose 이용
* 예제에서 데이터 파일을 저장할 로컬경로를 “/data/postgres”로 지정 했습니다. 이 경우 docker에서 사용하는 group id, user id와 데이터 경로의 소유자가 같아야 하기 때문에 데이터 경로 생성과 소유자 설정이 먼저 이루어 져야 합니다.
* bitnami postgresql 는 group id로 1001을 user id로 1001을 사용 합니다.
* bitnami postgresql 는 group id로 1001을 user id로 1001을 사용 합니다.
user:~$ sudo mkdir -p /data/postgres
user:~$ sudo chown 1001:1001 /data/postgres
docker-compose.yml
services:
# define postgresql container
postgresql:
image: docker.io/bitnami/postgresql:17
restart: unless-stopped
container_name: postgresql
ports:
- '5432:5432'
volumes:
- '/data/postgres:/bitnami/postgresql'
environment:
- POSTGRESQL_POSTGRES_PASSWORD=postgres
- POSTGRESQL_USERNAME=rsnet
- POSTGRESQL_PASSWORD=rsnet
- POSTGRESQL_DATABASE=rsnet
실행 & 제거
# start container
user:~$ docker compose up postgresql -d
# stop container
user:~$ docker container stop
# remove container
user:~$ docker container rm
* Local에 Docker Compose 이용 : vector extension 사용
* PostgreSQL에서 벡터 DB 기능을 사용하려면
pgvector 확장이 포함된 이미지를 사용해야 합니다. 만약 realstudy.net에서 제공하는 DockerHub 이미지를 활용하고 싶다면, 아래와 같이 image에 경로를 설정하면 됩니다.
services:
# define postgresql container
postgresql:
image: nockchun/postgresql_pgvector.rs:17.2.0_0.4.0
restart: unless-stopped
container_name: postgresql
ports:
- '5432:5432'
volumes:
- '/data/postgres:/bitnami/postgresql'
environment:
- POSTGRESQL_POSTGRES_PASSWORD=postgres
- POSTGRESQL_USERNAME=rsnet
- POSTGRESQL_PASSWORD=rsnet
- POSTGRESQL_DATABASE=rsnet
* PostgreSQL 컨테이너 Shell로 들어가서 벡터 DB 확장 기능을 등록(로딩)해야 합니다. 그리고 컨테이너를 다시 시작해 주면 됩니다.
# Run the container shell
user:~$ docker compose exec postgresql bash
# Loading vector extension
container:/$ psql -U postgres -c 'ALTER SYSTEM SET shared_preload_libraries = "vectors.so"'
container:/$ psql -U postgres -c 'ALTER SYSTEM SET search_path TO "$user", public, vectors'
# Restart container
user:~$ docker compose restart postgresql
* psql이나 dbeaver같은 query 툴에서 벡터 DB 확장 기능을 활성화 합니다.
# Enable the extension
psql:~$ CREATE EXTENSION vectors;
# Disable the extension
psql:/$ DROP EXTENSION IF EXISTS vectors;
* Kubernetes에 HELM 이용
Kubernetes 환경에서 PostgreSQL을 설치할 때 Helm을 활용하면 간단하고 효율적으로 설치 및 관리를 할 수 있습니다. 특히, 하나의 명령으로 주요 설정을 완료할 수 있어 초보자도 쉽게 따라 할 수 있습니다. 이번 글에서는 Bitnami의 Helm Chart와 Docker 이미지를 활용해 PostgreSQL을 설치하는 가장 간단한 방법을 소개합니다.
repository 등록
user:~$ helm repo add bitnami https://charts.bitnami.com/bitnami
user:~$ helm repo update
설정 옵션 확인
user:~$ helm show values bitnami/postgresql > postgresql-values.yaml
* Helm에 values에서 설정할 수 있는 옵션과 각 옵션들의 정확한 위치를 확인하기 위해 values.yaml 파일로 저장 합니다.
* 공식문서를 통해 확인할 수도 있습니다. : https://artifacthub.io/packages/helm/bitnami/postgresql
* 공식문서를 통해 확인할 수도 있습니다. : https://artifacthub.io/packages/helm/bitnami/postgresql
설치
user:~$ helm install postgresql bitnami/postgresql --namespace postgresql --create-namespace \
--set global.postgresql.auth.postgresPassword=postgres \
--set global.postgresql.auth.username=rsnet \
--set global.postgresql.auth.password=rsnet \
--set global.postgresql.auth.database=rsnet \
--set primary.persistence.storageClass=local-path \
--set primary.persistence.size=50Gi \
--set primary.resources.requests.memory=512Mi \
--set primary.resources.limits.memory=30000Mi \
--set primary.service.type=LoadBalancer \
--set primary.service.port=5432
* PostgreSQL에서 벡터 DB 기능을 사용하려면
pgvector 확장이 포함된 이미지를 사용해야 합니다. 만약 realstudy.net에서 제공하는 DockerHub 이미지를 활용하고 싶다면, 아래와 같이 image.repository와 image.tag를 설정하여 설치할 Docker 컨테이너 이미지를 지정할 수 있습니다.
user:~$ helm install postgresql bitnami/postgresql --namespace postgresql --create-namespace \
--set image.repository=nockchun/postgresql_pgvector.rs \
--set image.tag=17.2.0_0.4.0 \
--set global.postgresql.auth.postgresPassword=postgres \
--set global.postgresql.auth.username=rsnet \
--set global.postgresql.auth.password=rsnet \
--set global.postgresql.auth.database=rsnet \
--set primary.persistence.storageClass=local-path \
--set primary.persistence.size=50Gi \
--set primary.resources.requests.memory=512Mi \
--set primary.resources.limits.memory=30000Mi \
--set primary.service.type=LoadBalancer \
--set primary.service.port=5432
* pgvector 확장을 포함한 이미지를 사용하는 경우 위쪽 “Local에 Docker Compose 이용 : vector extension 사용”에서 설명한 방법대로 설치 이후에 벡터 DB 확장 기능을 등록(로딩)하고 query tool에서 활성화 하여야 합니다.
실행 & 제거
# Check if it is installed and running properly.
user:~$ kubectl get all -n postgresql