이 튜토리얼에서는 Google Kubernetes Engine(GKE)에 PostgreSQL 벡터 데이터베이스 클러스터를 배포하는 방법을 보여줍니다.
PostgreSQL에는 데이터베이스의 기능을 확장하는 다양한 모듈과 확장 프로그램이 함께 제공됩니다. 이 튜토리얼에서는 GKE에 배포된 기존 PostgreSQL 클러스터에 pgvector 확장 프로그램을 설치합니다. Pgvector 확장 프로그램을 사용하면 PostgreSQL에 벡터 유형을 추가하여 데이터베이스 테이블에 벡터를 저장할 수 있습니다. Pgvector는 일반적인 SQL 쿼리를 실행하여 유사성 검색도 제공합니다.
연산자가 확장 프로그램의 번들 버전을 제공하므로 먼저 CloudnativePG 연산자를 배포하여 PGvector 확장 프로그램 배포를 단순화합니다.
이 튜토리얼은 GKE에서 PostgreSQL 데이터베이스 클러스터를 배포하는 데 관심이 있는 클라우드 플랫폼 관리자 및 설계자, ML 엔지니어, MLOps(DevOps) 전문가를 대상으로 합니다.
목표
이 튜토리얼에서는 다음을 수행하는 방법을 알아봅니다.
- PostgreSQL용 GKE 인프라 배포
- GKE에 배포된 PostgreSQL 클러스터에 pgvector 확장 프로그램 설치
- Helm을 사용하여 CloudNativePG PostgreSQL 연산자 배포 및 구성
- Jupyter 노트북으로 데모 데이터 세트 업로드 및 검색어 실행
환경 설정
Cloud Shell로 환경을 설정하려면 다음 단계를 따르세요.
- 프로젝트, 리전, Kubernetes 클러스터 리소스 프리픽스의 환경 변수를 설정합니다. - export PROJECT_ID=PROJECT_ID export KUBERNETES_CLUSTER_PREFIX=postgres export REGION=us-central1- PROJECT_ID를 Google Cloud프로젝트 ID로 바꿉니다.
 - 이 튜토리얼에서는 - us-central1리전을 사용합니다.
- GitHub에서 샘플 코드 저장소를 클론합니다. - git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
- postgres-pgvector디렉터리로 이동합니다.- cd kubernetes-engine-samples/databases/postgres-pgvector
클러스터 인프라 만들기
이 섹션에서는 Terraform 스크립트를 실행하여 가용성이 높은 비공개 리전 GKE 클러스터를 만들어 PostgreSQL 데이터베이스를 배포합니다.
Standard 또는 Autopilot 클러스터를 사용하여 PostgreSQL을 배포할 수 있습니다. 각 유형은 고유한 장점이 있으며 서로 다른 가격 책정 모델을 제공합니다.
Autopilot
Autopilot 클러스터 인프라를 배포하려면 Cloud Shell에서 다음 명령어를 실행합니다.
export GOOGLE_OAUTH_ACCESS_TOKEN=$(gcloud auth print-access-token)
terraform -chdir=../postgresql-cloudnativepg/terraform/gke-autopilot init
terraform -chdir=../postgresql-cloudnativepg/terraform/gke-autopilot apply \
-var project_id=${PROJECT_ID} \
-var region=${REGION} \
-var cluster_prefix=${KUBERNETES_CLUSTER_PREFIX}
GKE는 런타임 시 다음 변수를 바꿉니다.
- GOOGLE_OAUTH_ACCESS_TOKEN은- gcloud auth print-access-token명령어를 사용하여 다양한 Google Cloud API와의 상호작용을 인증하는 액세스 토큰을 검색합니다.
- PROJECT_ID,- REGION,- KUBERNETES_CLUSTER_PREFIX는 환경 설정 섹션에 정의된 환경 변수이며 생성 중인 Autopilot 클러스터의 새 관련 변수에 할당됩니다.
메시지가 표시되면 yes를 입력합니다.
Terraform에서 다음 리소스를 만듭니다.
- Kubernetes 노드의 커스텀 VPC 네트워크 및 비공개 서브넷
- 네트워크 주소 변환(NAT)을 통해 인터넷에 액세스하는 Cloud Router
- us-central1리전의 비공개 GKE 클러스터
- 클러스터에 대한 로깅 및 모니터링 권한이 있는 ServiceAccount
- 클러스터 모니터링 및 알림을 위한 Google Cloud Managed Service for Prometheus 구성
출력은 다음과 비슷합니다.
...
Apply complete! Resources: 11 added, 0 changed, 0 destroyed.
...
표준
Standard 클러스터 인프라를 배포하려면 Cloud Shell에서 다음 명령어를 실행합니다.
export GOOGLE_OAUTH_ACCESS_TOKEN=$(gcloud auth print-access-token)
terraform -chdir=../postgresql-cloudnativepg/terraform/gke-standard init
terraform -chdir=../postgresql-cloudnativepg/terraform/gke-standard apply \
-var project_id=${PROJECT_ID} \
-var region=${REGION} \
-var cluster_prefix=${KUBERNETES_CLUSTER_PREFIX}
GKE는 런타임 시 다음 변수를 바꿉니다.
- GOOGLE_OAUTH_ACCESS_TOKEN은- gcloud auth print-access-token명령어를 사용하여 다양한 Google Cloud API와의 상호작용을 인증하는 액세스 토큰을 검색합니다.
- PROJECT_ID,- REGION,- KUBERNETES_CLUSTER_PREFIX는 환경 설정 섹션에 정의된 환경 변수이며 만든 Standard 클러스터의 새 관련 변수에 할당됩니다.
메시지가 표시되면 yes를 입력합니다. 이러한 명령어가 완료되고 클러스터에 준비 상태가 표시되는 데 몇 분 정도 걸릴 수 있습니다.
Terraform에서 다음 리소스를 만듭니다.
- Kubernetes 노드의 커스텀 VPC 네트워크 및 비공개 서브넷
- 네트워크 주소 변환(NAT)을 통해 인터넷에 액세스하는 Cloud Router
- 자동 확장이 사용 설정된 us-central1리전의 비공개 GKE 클러스터(영역당 노드 1~2개)
- 클러스터에 대한 로깅 및 모니터링 권한이 있는 ServiceAccount
- 클러스터 모니터링 및 알림을 위한 Google Cloud Managed Service for Prometheus 구성
출력은 다음과 비슷합니다.
...
Apply complete! Resources: 14 added, 0 changed, 0 destroyed.
...
클러스터에 연결
사용자 인증 정보를 가져오고 새 GKE 클러스터와 통신하도록 kubectl을 구성합니다.
gcloud container clusters get-credentials \
    ${KUBERNETES_CLUSTER_PREFIX}-cluster --location ${REGION} --project ${PROJECT_ID}
CloudNativePG 연산자 배포
Helm 차트를 사용하여 Kubernetes 클러스터에 CloudNativePG를 배포합니다.
- Helm의 버전을 확인합니다. - helm version- 3.13 이전인 경우 버전을 업데이트합니다. - curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
- CloudNativePG 연산자 Helm 차트 저장소를 추가합니다. - helm repo add cnpg https://cloudnative-pg.github.io/charts
- Helm 명령줄 도구를 사용하여 CloudNativePG 연산자를 배포합니다. - helm upgrade --install cnpg \ --namespace cnpg-system \ --create-namespace \ cnpg/cloudnative-pg- 출력은 다음과 비슷합니다. - Release "cnpg" does not exist. Installing it now. NAME: cnpg LAST DEPLOYED: Fri Oct 13 13:52:36 2023 NAMESPACE: cnpg-system STATUS: deployed REVISION: 1 TEST SUITE: None ...
PostgreSQL 벡터 데이터베이스 배포
이 섹션에서는 PostgreSQL 벡터 데이터베이스를 배포합니다.
- 데이터베이스의 네임스페이스 - pg-ns를 만듭니다.- kubectl create ns pg-ns
- 매니페스트를 적용하여 PostgreSQL 클러스터를 배포합니다. 클러스터 매니페스트는 pgvector 확장 프로그램을 사용 설정합니다. - kubectl apply -n pg-ns -f manifests/01-basic-cluster/postgreSQL_cluster.yaml- postgreSQL_cluster.yaml매니페스트는 배포를 설명합니다.
- 클러스터의 상태를 확인합니다. - kubectl get cluster -n pg-ns --watch- 다음 단계로 이동하기 전에 출력에 - Cluster in healthy state상태가 표시될 때까지 기다립니다.
Vertex AI Colab Enterprise 노트북으로 쿼리 실행
이 섹션에서는 PostgreSQL 테이블에 벡터를 업로드하고 SQL 구문을 사용하여 시맨틱 검색어를 실행합니다.
Colab Enterprise를 사용하여 PostgreSQL 데이터베이스에 연결합니다.
전용 런타임 템플릿을 사용하여 postgres-vpc에 배포하면 노트북이 GKE 클러스터의 리소스와 통신할 수 있습니다.
Vertex AI Colab Enterprise에 대한 자세한 내용은 Colab Enterprise 문서를 참조하세요.
런타임 템플릿 만들기
Colab Enterprise 런타임 템플릿을 만들려면 다음 안내를 따르세요.
- Google Cloud 콘솔에서 Colab Enterprise 런타임 템플릿 페이지로 이동하여 프로젝트가 선택되어 있는지 확인합니다. 
- add_box 새 템플릿을 클릭합니다. 새 런타임 템플릿 만들기 페이지가 표시됩니다. 
- 런타임 기본사항 섹션에서 다음을 수행합니다. - 표시 이름 필드에 pgvector-connect을 입력합니다.
- 리전 드롭다운 목록에서 us-central1을 선택합니다. GKE 클러스터와 동일한 리전입니다.
 
- 표시 이름 필드에 
- 컴퓨팅 구성 섹션에서 다음을 수행합니다. - 머신 유형 드롭다운 목록에서 e2-standard-2를 선택합니다.
- 디스크 크기 필드에 30을 입력합니다.
 
- 머신 유형 드롭다운 목록에서 
- 네트워킹 및 보안 섹션에서 다음을 수행합니다. - 네트워크 드롭다운 목록에서 GKE 클러스터가 있는 네트워크를 선택합니다.
- 서브네트워크 드롭다운 목록에서 해당 서브네트워크를 선택합니다.
- 공개 인터넷 액세스 사용 설정 체크박스를 선택 취소합니다.
 
- 런타임 템플릿 만들기를 완료하려면 만들기를 클릭합니다. 런타임 템플릿이 런타임 템플릿 탭의 목록에 나타납니다. 
런타임 만들기
Colab Enterprise 런타임을 만들려면 다음 안내를 따르세요.
- 방금 만든 템플릿의 런타임 템플릿 목록에서 작업 열에 있는 more_vert를 클릭한 후 런타임 만들기를 클릭합니다. Vertex AI 런타임 만들기 창이 표시됩니다. 
- 템플릿을 기반으로 런타임을 만들려면 만들기를 클릭합니다. 
- 런타임 탭이 열리면 상태가 정상으로 전환될 때까지 기다립니다. 
노트북 가져오기
Colab Enterprise에서 노트북을 가져오려면 다음 안내를 따르세요.
- 내 노트북 탭으로 이동하여 가져오기를 클릭합니다. 노트북 가져오기 창이 표시됩니다. 
- 가져오기 소스에서 URL을 선택합니다. 
- 노트북 URL 아래에 다음 링크를 입력합니다. - https://raw.githubusercontent.com/epam/kubernetes-engine-samples/internal_lb/databases/postgres-pgvector/manifests/02-notebook/vector-database.ipynb
- 가져오기를 클릭합니다. 
런타임에 연결 및 쿼리 실행
런타임에 연결하고 쿼리를 실행하려면 다음 안내를 따르세요.
- 노트북에서 연결 버튼 옆에 있는 arrow_drop_down 추가 연결 옵션을 클릭합니다. Vertex AI 런타임에 연결 창이 표시됩니다. 
- 런타임에 연결을 선택한 후 기존 런타임에 연결을 선택합니다. 
- 시작한 런타임을 선택하고 연결을 클릭합니다. 
- 노트북 셀을 실행하려면 각 코드 셀 옆에 있는 셀 실행 버튼을 클릭합니다. 
노트북에는 코드 셀과 각 코드 블록을 설명하는 텍스트 모두 포함되어 있습니다. 코드 셀을 실행하면 명령어가 실행되고 출력이 표시됩니다. 셀을 순서대로 실행하거나 필요에 따라 개별 셀을 실행할 수 있습니다.
 셀 실행 버튼을 클릭합니다.
 셀 실행 버튼을 클릭합니다.