GKE에 Milvus 클러스터 배포하기
Milvus는 클라우드 네이티브 벡터 데이터베이스로서 다양한 클라우드 환경에 배포할 수 있습니다. 이 가이드에서는 Google Cloud Platform(GCP)에서 Milvus를 설정하는 방법에 대해 자세히 설명합니다.
GCP에 Milvus 클러스터 배포하기
시작하기 전에
GCP에 Milvus를 배포하려면 다음 사항을 확인하세요.
GCP 계정에 프로젝트가 이미 존재합니다.
프로젝트를 만들려면 프로젝트 만들기 및 관리를 참조하세요. 이 가이드에서 사용하는 프로젝트 이름은 milvus-testing-nonprod입니다.
로컬로 gcloud CLI, kubectl 및 Helm을 설치했거나 대신 브라우저 기반 Cloud Shell을 사용하기로 결정했습니다.
GCP 계정 자격 증명으로 gcloud CLI를 초기화했습니다.
네트워크 설정
Milvus 보안을 보장하려면 GCP 프로젝트에서 논리적으로 격리된 가상 네트워크를 만들어야 합니다. 다음 명령은 VPC를 생성합니다.
gcloud compute networks create milvus-network \
--project=milvus-testing-nonprod \
--subnet-mode=auto \
--mtu=1460 \
--bgp-routing-mode=regional
작업을 용이하게 하려면 VPC 내의 트래픽뿐만 아니라 ICMP, RDP 및 SSH를 통한 외부 트래픽을 허용하는 몇 가지 방화벽 규칙도 설정해야 합니다.
gcloud compute firewall-rules create milvus-network-allow-icmp \
--project=milvus-testing-nonprod \
--network=projects/milvus-testing-nonprod/global/networks/milvus-network \
--description="Allows ICMP connections from any source to any instance on the network." \
--direction=INGRESS \
--priority=65534 \
--source-ranges=0.0.0.0/0 \
--action=ALLOW \
--rules=icmp
gcloud compute firewall-rules create milvus-network-allow-internal \
--project=milvus-testing-nonprod \
--network=projects/milvus-testing-nonprod/global/networks/milvus-network \
--description="Allows connections from any source in the network IP range to any instance on the network using all protocols." \
--direction=INGRESS \
--priority=65534 \
--source-ranges=10.128.0.0/9 \
--action=ALLOW --rules=all
gcloud compute firewall-rules create milvus-network-allow-rdp \
--project=milvus-testing-nonprod \
--network=projects/milvus-testing-nonprod/global/networks/milvus-network \
--description="Allows RDP connections from any source to any instance on the network using port 3389." \
--direction=INGRESS \
--priority=65534 \
--source-ranges=0.0.0.0/0 \
--action=ALLOW \
--rules=tcp:3389
gcloud compute firewall-rules create milvus-network-allow-ssh \
--project=milvus-testing-nonprod \
--network=projects/milvus-testing-nonprod/global/networks/milvus-network \
--description="Allows TCP connections from any source to any instance on the network using port 22." \
--direction=INGRESS \
--priority=65534 \
--source-ranges=0.0.0.0/0 \
--action=ALLOW \
--rules=tcp:22
마지막으로, 포트 19530에서 나중에 생성할 Milvus 인스턴스로 들어오는 트래픽을 허용해야 합니다.
gcloud compute firewall-rules create allow-milvus-in \
--project=milvus-testing-nonprod \
--description="Allow ingress traffic for Milvus on port 19530" \
--direction=INGRESS \
--priority=1000 \
--network=projects/milvus-testing-nonprod/global/networks/milvus-network \
--action=ALLOW \
--rules=tcp:19530 \
--source-ranges=0.0.0.0/0
쿠버네티스 클러스터 프로비저닝하기
이 가이드에서는 GKE(구글 쿠버네티스 엔진) 서비스를 사용하여 us-west1-a 영역에 두 개의 노드가 있는 쿠버네티스 클러스터를 프로비저닝하겠습니다. 각 노드는 COS_CONTAINERD 이미지를 실행하는 e2-standard-4 컴퓨팅 엔진 가상 머신입니다.
서비스 안정성을 보장하기 위해 최소 16GB의 메모리를 제공하는 유형의 머신을 사용하는 것이 좋습니다.
gcloud container clusters create "milvus-cluster-1" \
--project "milvus-testing-nonprod" \
--zone "us-west1-a" \
--workload-pool "milvus-testing-nonprod.svc.id.goog" \
--no-enable-basic-auth \
--cluster-version "1.28.10-gke.1075001" \
--release-channel "regular" \
--machine-type "c2-standard-4" \
--image-type "COS_CONTAINERD" \
--disk-type "pd-standard" \
--disk-size "100" \
--max-pods-per-node "110" \
--num-nodes "3" \
--enable-ip-alias \
--network "projects/milvus-testing-nonprod/global/networks/milvus-network" \
--subnetwork "projects/milvus-testing-nonprod/regions/us-west1/subnetworks/milvus-network"
Kubernetes 클러스터가 올라가는 데 몇 분 정도 걸립니다. 클러스터가 준비되면 다음 명령을 사용하여 자격 증명을 가져와서 터미널에서 kubectl
명령을 실행하여 클러스터와 원격으로 통신할 수 있도록 합니다.
gcloud container clusters get-credentials milvus-cluster-1 --zone "us-west1-a"
Google 클라우드 스토리지(GCS)를 외부 객체 스토리지로 사용
- 버킷을 만듭니다.
gcloud storage buckets create gs://milvus-testing-nonprod --project=milvus-testing-nonprod --default-storage-class=STANDARD --location=us-west1 --uniform-bucket-level-access
- 사용자 액세스 키와 비밀 키를 생성한 후 프로젝트의 저장소 페이지로 이동합니다. 대시보드의 왼쪽 사이드바에서 Google 클라우드 스토리지를 클릭한 다음 설정을 클릭합니다. 상호운용성 탭을 선택합니다. 아직 활성화하지 않았다면 상호 운용 가능한 액세스를 클릭합니다. 그런 다음 키 만들기 버튼을 클릭하여 만듭니다.
사용자 계정의 GCP 액세스 키
- values.yaml 추가
cluster:
enabled: true
service:
type: LoadBalancer
minio:
enabled: false
externalS3:
enabled: true
host: storage.googleapis.com
port: 443
rootPath: milvus/my-release
bucketName: milvus-testing-nonprod
cloudProvider: gcp
useSSL: true
accessKey: "<access-key>"
secretKey: "<secret-key>"
Milvus 배포
이제 Kubernetes 클러스터가 준비되었습니다. 지금 바로 Milvus를 배포해 보겠습니다.
helm repo add milvus https://zilliztech.github.io/milvus-helm/
helm repo update
helm install -f values.yaml my-release milvus/milvus
앞의 명령에서 Milvus Helm 차트의 리포지토리를 로컬에 추가하고 최신 차트를 가져오도록 리포지토리를 업데이트합니다. 그런 다음 Milvus 인스턴스를 설치하고 이름을 my-release로 지정합니다.
구성 service.type
값에 주목하세요. 이는 Layer-4 로드 밸런서를 통해 Milvus 인스턴스를 노출하고 싶다는 것을 나타냅니다.
Layer-7 로드 밸런서를 통해 Milvus 인스턴스를 노출하려면 이 글을 읽어보세요.
배포 확인
모든 파드가 실행되면 다음 명령을 실행하여 외부 IP 주소를 가져옵니다.
kubectl get services|grep my-release-milvus|grep LoadBalancer|awk '{print $4}'
Hello Milvus
Hello Milvus를 참조하여 호스트 값을 외부 IP 주소로 변경한 다음 코드를 실행하세요.
다음 단계
다른 클라우드에 Milvus를 배포하는 방법을 알아보려면 다음과 같이 하세요: