Amazon EKS에서 Milvus 설정하기
Milvus는 Kubernetes를 지원하도록 처음부터 설계되었으며 AWS에 쉽게 배포할 수 있습니다. 신뢰할 수 있고 탄력적인 Milvus 벡터 데이터베이스 클러스터를 구축하기 위해 관리형 Kubernetes로 Amazon Elastic Kubernetes Service(Amazon EKS), Object Storage로 Amazon S3, Message Storage로 Amazon Managed Streaming for Apache Kafka(Amazon MSK), Load Balancer로 Amazon Elastic Load Balancing(Amazon ELB)을 사용할 수 있습니다.
Milvus Architecture Overview
Milvus 아키텍처
EKS는 EC2에서 실행되거나 Fargate에서 서버리스로 실행되는 Amazon의 관리형 Kubernetes 서비스입니다. 이미 온프레미스에서 Kubernetes를 사용 중인 조직에 이상적이며, 최소한의 변경으로 배포를 AWS로 마이그레이션할 수 있습니다.
이 블로그에서는 배포에 EC2를 사용합니다. Fargate는 etcd와 같은 Milvus 종속성에 필요한 persistent volume claims(PVCs)를 처리할 수 없기 때문입니다.
EKS 및 기타 서비스를 사용하여 Milvus 클러스터를 배포하는 단계별 지침을 제공하겠습니다. 이 블로그의 더 자세한 버전은 여기에서 확인할 수 있습니다.
사전 요구 사항
AWS CLI
이 문서에서 다루는 작업의 엔드포인트 역할을 할 로컬 PC/Mac 또는 Amazon EC2 인스턴스에 AWS CLI를 설치합니다. Amazon Linux 2 또는 Amazon Linux 2023을 사용하는 경우 AWS CLI 도구가 기본적으로 설치되어 있습니다. AWS CLI 설치 방법을 참조하세요.
아래는 AWS CLI가 설치되어 있음을 확인하는 스크린샷입니다.
% which aws
/usr/local/bin/aws
% aws --version
aws-cli/2.15.34 Python/3.11.8 Darwin/23.5.0 exe/x86_64 prompt/off
EKS 도구: Kubectl, eksctl, helm
선호하는 엔드포인트 장치에 다음을 포함한 EKS 도구를 설치합니다.
자세한 설치 단계는 EKS 시작하기를 참조하세요. 아래는 z shell을 사용하는 Mac M2 노트북에서 설치 및 버전을 확인하는 스크린샷입니다.
% kubectl version
Client Version: v1.30.2
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3
# Download eksctl
ARCH=arm64
PLATFORM=$(uname -s)_$ARCH
curl -sLO "https://github.com/eksctl-io/eksctl/releases/latest/download/eksctl_$PLATFORM.tar.gz"
tar -xzf eksctl_$PLATFORM.tar.gz -C /tmp && rm eksctl_$PLATFORM.tar.gz
sudo mv /tmp/eksctl /usr/local/bin
% eksctl version
0.185.0
% helm list --all-namespaces
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
my-milvus default 1 2024-07-09 16:00:14.117945 -0700 PDT deployed milvus-4.1.34 2.4.5
Amazon S3 Bucket 생성
Bucket Naming Rules를 읽고 AWS console을 사용하여 AWS S3 bucket 이름을 지정할 때 이를 준수하세요.
Create an Amazon S3 Bucket
KMS, Customer managed key 생성.
KMS key는 AWS-managed key일 수 없습니다. 반드시 Customer-managed key여야 합니다. 생성한 후 AWS Secrets Manager에서 사용하기 전에 키가 활성화될 때까지 약 10분을 기다려야 합니다. AWS console을 사용하여 KMS > Customer managed keys로 이동하세요.
Create a KMS, Customer managed key. .png
AWS Secrets Manager에서 custom secret 생성.
KMS Customer managed key를 생성한 후 약 10분을 기다렸는지 확인하세요. 이제 새 AWS Secrets Manager secret을 생성합니다. AWS console을 사용합니다.
secret type으로 다른 유형의 secret을 선택합니다.
Key/value pairs 편집기를 Plaintext로 전환합니다. “username” 및 “password”와 정확히 일치하는 키로 JSON을 입력합니다.
시크릿의 이름은 AmazonMSK_로 시작해야 합니다.
암호화 키는 AWS 관리형 키가 아니라 KMS 고객 관리형 키여야 합니다.
AWS Secrets Manager에서 사용자 지정 시크릿 생성. .png
MSK 인스턴스 생성
다음으로 AWS console을 사용하여 Kafka autoCreateTopics 기능과 SASL/SCRAM 보안이 활성화된 Amazon MSK 클러스터를 생성합니다.
MSK 생성 시 고려 사항:
Milvus의 최신 안정 버전(v2.4.x)은 Kafka의 autoCreateTopics 기능에 의존하므로, MSK를 생성할 때 사용자 지정 구성을 사용해야 하며 auto.create.topics.enable 속성을 기본값 false에서 true로 변경해야 합니다.
또한 MSK의 메시지 처리량을 늘리려면 message.max.bytes 및 replica.fetch.max.bytes 값을 늘리는 것이 좋습니다.
auto.create.topics.enable=true
message.max.bytes=10485880
replica.fetch.max.bytes=20971760
자세한 내용은 Custom MSK configurations를 참조하세요.
MSK 인스턴스 생성.png
Milvus는 MSK에 대한 IAM 역할 기반 인증을 지원하지 않으므로, MSK를 생성할 때 보안 구성에서 SASL/SCRAM 인증 옵션을 활성화하고 AWS Secrets Manager에서 사용자 이름과 비밀번호를 구성합니다. 자세한 내용은 Sign-in credentials authentication with AWS Secrets Manager를 참조하세요.
MSK의 보안 그룹은 EKS 클러스터의 보안 그룹 또는 IP 주소 범위에서의 액세스를 허용해야 합니다.
보안 설정
MSK 인스턴스가 프로비저닝될 때까지 약 15분 기다립니다. 준비되면 해당 인스턴스를 클릭하여 앞서 생성한 AWS Secrets Manager 사용자 지정 시크릿을 연결할 수 있습니다.
AWS Secrets Manager
Amazon EKS 클러스터 생성
EKS 클러스터를 생성하는 방법은 콘솔, CloudFormation 또는 eksctl을 통한 방법 등 여러 가지가 있습니다. Set up to use Amazon EKS 문서를 참조하세요.
이 게시물에서는 eksctl을 사용합니다. eksctl은 Amazon EKS에서 Kubernetes 클러스터를 생성하고 관리하기 위한 간단한 명령줄 도구입니다. eksctl은 Amazon EKS용 노드가 있는 새 클러스터를 생성하는 가장 빠르고 쉬운 방법을 제공합니다. 자세한 내용은 eksctl의 공식 문서를 참조하세요.
1단계: eks_cluster.yaml 파일을 생성합니다.
예시 .yaml 파일은 Milvus 문서를 참조하세요.
클러스터 이름을 사용자의 클러스터 이름으로 교체합니다,
region-code를 클러스터를 생성하려는 AWS 리전으로 교체합니다.
private-subnet-idx를 사용자의 프라이빗 서브넷으로 교체합니다. 참고: 이 구성 파일은 프라이빗 서브넷을 지정하여 기존 VPC에 EKS 클러스터를 생성합니다. VPC 및 서브넷 구성을 제거하여 eksctl이 새 VPC를 자동으로 생성하도록 할 수도 있습니다.
**2단계: eksctl create cluster -f eks_cluster.yaml 명령을 실행하여 EKS 클러스터를 생성합니다. **
create cluster -f eks_cluster.yaml
Amazon EKS Quickstart를 참조하세요. 이 명령은 다음 리소스를 생성합니다:
지정된 버전의 EKS 클러스터.
3개의 m6i.2xlarge EC2 인스턴스가 있는 관리형 노드 그룹.
IAM OIDC identity provider와 aws-load-balancer-controller라는 ServiceAccount는 나중에 AWS Load Balancer Controller를 설치할 때 사용됩니다.
네임스페이스 milvus 및 이 네임스페이스 내의 ServiceAccount milvus-s3-access-sa. 이는 나중에 Milvus의 객체 스토리지로 S3를 구성할 때 사용됩니다.
참고: 간소화를 위해 milvus-s3-access-sa에는 전체 S3 액세스 권한이 부여됩니다. 프로덕션 배포에서는 최소 권한 원칙을 따르고 Milvus에 사용되는 특정 S3 버킷에 대한 액세스 권한만 부여하는 것이 권장됩니다.
- 여러 애드온이 있으며, vpc-cni, coredns, kube-proxy는 EKS에 필요한 핵심 애드온입니다. aws-ebs-csi-driver는 EKS 클러스터가 Amazon EBS 볼륨의 수명 주기를 관리할 수 있도록 하는 AWS EBS CSI 드라이버입니다.
% eksctl create cluster -f eks_cluster.yaml
2024-07-10 17:45:32 [ℹ] eksctl version 0.185.0
2024-07-10 17:45:32 [ℹ] using region us-west-2
2024-07-10 17:45:32 [✔] using existing VPC (vpc-84c5b3fc) and
…
2024-07-10 17:45:32 [ℹ] building cluster stack "eksctl-MilvusEKSTest-cluster"
2024-07-10 17:45:33 [ℹ] deploying stack
…
클러스터 생성이 완료될 때까지 기다립니다. 완료되면 다음 출력과 같은 응답이 표시됩니다.
% EKS cluster "MilvusEKSTest" in "us-west-2" region is ready
클러스터가 생성되면 다음을 실행하여 노드를 볼 수 있습니다.
% kubectl get nodes -A -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
ip-172-31-22-240.us-west-2.compute.internal Ready <none> 11m v1.28.8-eks-ae9a62a 172.31.22.240 52.40.226.172 Amazon Linux 2 5.10.219-208.866.amzn2.x86_64 containerd://1.7.11
ip-172-31-31-71.us-west-2.compute.internal Ready <none> 11m v1.28.8-eks-ae9a62a 172.31.31.71 35.165.133.62 Amazon Linux 2 5.10.219-208.866.amzn2.x86_64 containerd://1.7.11
ip-172-31-33-44.us-west-2.compute.internal Ready <none> 11m v1.28.8-eks-ae9a62a 172.31.33.44 35.91.5.162 Amazon Linux 2 5.10.219-208.866.amzn2.x86_64 containerd://1.7.11
3단계: GP3를 스토리지 유형으로 구성한 ebs-sc StorageClass를 생성하고 기본 StorageClass로 설정합니다.
Milvus는 Meta Storage로 etcd를 사용하며, PVC를 생성하고 관리하려면 이 StorageClass가 필요합니다.
- 이 cat 명령을 실행합니다.
% cat <<EOF | kubectl apply -f -
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ebs-sc
provisioner: ebs.csi.aws.com
volumeBindingMode: WaitForFirstConsumer
parameters:
type: gp3
EOF
storageclass.storage.k8s.io/ebs-sc created
- 생성 후 patch 명령을 실행하여 이 StorageClass를 기본값으로 만듭니다.
% kubectl patch storageclass gp2 -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
storageclass.storage.k8s.io/gp2 patched
- 스토리지 클래스가 올바르게 구성되었는지 확인합니다.
% kubectl get storageclass
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
ebs-sc ebs.csi.aws.com Delete WaitForFirstConsumer false 6m39s
gp2 kubernetes.io/aws-ebs Delete WaitForFirstConsumer false 44m
4단계: AWS Load Balancer Controller 설치
이는 나중에 Milvus Service 및 Attu Ingress에 사용됩니다. 공식 EKS Load Balancer Controller 지침을 참조하세요.
eks-charts repo를 추가하고 업데이트합니다.
% helm repo add eks https://aws.github.io/eks-charts
"eks" has been added to your repositories
% helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "eks" chart repository
...Successfully got an update from the "zilliztech" chart repository
...Successfully got an update from the "milvus" chart repository
Update Complete. ⎈Happy Helming!⎈
AWS Load Balancer Controller를 설치합니다. cluster-name을 클러스터 이름으로 바꾸세요. aws-load-balancer-controller라는 이름의 ServiceAccount는 EKS 클러스터가 생성될 때 이미 생성되었습니다.
% helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
-n kube-system \
--set clusterName=MilvusEKSTest \
--set serviceAccount.create=false \
--set serviceAccount.name=aws-load-balancer-controller
NAME: aws-load-balancer-controller
LAST DEPLOYED: Wed Jul 10 19:00:34 2024
NAMESPACE: kube-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
AWS Load Balancer controller installed!
컨트롤러가 성공적으로 설치되었는지 확인합니다. 출력은 다음과 같아야 합니다.
% kubectl get deployment -n kube-system aws-load-balancer-controller
NAME READY UP-TO-DATE AVAILABLE AGE
aws-load-balancer-controller 2/2 2 2 88s
Amazon EKS에 Milvus Cluster 배포
Milvus는 Operator 및 Helm과 같은 여러 배포 방법을 지원합니다. Operator를 사용하는 것이 더 간단하지만, Helm은 더 직접적이고 유연합니다. 따라서 배포에는 Helm을 사용합니다.
milvus_helm.yaml 파일로 Milvus를 배포할 때 값을 통해 구성을 사용자 지정할 수 있습니다.
기본적으로 Milvus는 Object Storage와 Message Storage로 각각 클러스터 내 minio와 pulsar를 생성합니다. 프로덕션에 더 적합하도록 몇 가지 구성을 변경하겠습니다.
1단계: Milvus Helm repo를 추가하고 업데이트합니다.
% helm repo add milvus https://zilliztech.github.io/milvus-helm/
helm repo update
"milvus" already exists with the same configuration, skipping
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "eks" chart repository
...Successfully got an update from the "zilliztech" chart repository
...Successfully got an update from the "milvus" chart repository
Update Complete. ⎈Happy Helming!⎈
2단계: milvus_cluster.yaml 파일을 생성합니다.
다음 코드는 Amazon S3를 object storage로, Amazon MSK를 message queue로 구성하는 등 Milvus 설치를 사용자 지정합니다. 코드 블록 뒤에 자세한 설명과 구성 지침을 제공하겠습니다.
#####################################
# Section 1
#
# Configure S3 as the Object Storage
#####################################
# Service account
# - this service account are used by External S3 access
serviceAccount:
create: false
name: milvus-s3-access-sa
# Close in-cluster minio
minio:
enabled: false
# External S3
# - these configs are only used when `externalS3.enabled` is true
externalS3:
enabled: true
host: "s3.<region-code>.amazonaws.com"
port: "443"
useSSL: true
bucketName: "<bucket-name>"
rootPath: "<root-path>"
useIAM: true
cloudProvider: "aws"
iamEndpoint: ""
#####################################
# Section 2
#
# Configure MSK as the Message Storage
#####################################
# Close in-cluster pulsar
pulsar:
enabled: false
# 외부 kafka
# - 이 구성은 `externalKafka.enabled`가 true일 때만 사용됩니다
externalKafka:
enabled: true
brokerList: "<broker-list>"
securityProtocol: SASL_SSL
sasl:
mechanisms: SCRAM-SHA-512
username: "<username>"
password: "<password>"
#####################################
# 섹션 3
#
# 클러스터 외부에서 접근할 수 있도록 Milvus 서비스를 노출합니다(LoadBalancer 서비스).
# 또는 클러스터 내부에서 접근합니다(ClusterIP 서비스). 서비스 유형과 서비스를 제공할 포트를 설정합니다.
#####################################
service:
type: LoadBalancer
port: 19530
annotations:
service.beta.kubernetes.io/aws-load-balancer-type: external #AWS Load Balancer Controller는 이 주석이 있는 서비스를 처리합니다
service.beta.kubernetes.io/aws-load-balancer-name : milvus-service #AWS Network Load Balancer에 부여되는 사용자 정의 이름
#service.beta.kubernetes.io/aws-load-balancer-scheme: internal # internal 또는 internet-facing, 나중에 인터넷을 통한 공개 액세스를 허용
service.beta.kubernetes.io/aws-load-balancer-scheme: "internet-facing" #로드 밸런서를 퍼블릭 서브넷에 배치합니다
service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip #Pod IP가 대상 IP로 사용되어야 합니다(노드 IP가 아님)
#####################################
# 섹션 4
#
# Milvus 관리 GUI인 Attu 설치
#####################################
attu:
enabled: true
name: attu
service:
annotations:
service.beta.kubernetes.io/aws-load-balancer-type: external
service.beta.kubernetes.io/aws-load-balancer-name : milvus-attu-service
service.beta.kubernetes.io/aws-load-balancer-scheme: "internet-facing"
service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip
labels: {}
type: LoadBalancer
port: 3000
ingress:
enabled: false
#####################################
# 섹션 5
#
# Milvus Core Components의 HA 배포
#####################################
rootCoordinator:
replicas: 2
activeStandby:
enabled: true # root coordinator에 여러 복제본을 설정할 때 active-standby를 활성화합니다
resources:
limits:
cpu: 1
memory: 2Gi
indexCoordinator:
replicas: 2
activeStandby:
enabled: true # index coordinator에 여러 복제본을 설정할 때 active-standby를 활성화합니다
resources:
limits:
cpu: "0.5"
memory: 0.5Gi
queryCoordinator:
replicas: 2
activeStandby:
enabled: true # query coordinator에 여러 복제본을 설정할 때 active-standby를 활성화합니다
resources:
limits:
cpu: "0.5"
memory: 0.5Gi
dataCoordinator:
replicas: 2
activeStandby:
enabled: true # data coordinator에 여러 복제본을 설정할 때 active-standby를 활성화합니다
resources:
limits:
cpu: "0.5"
memory: 0.5Gi
proxy:
replicas: 2
resources:
limits:
cpu: 1
memory: 4Gi
#####################################
# 섹션 6
#
# Milvus 리소스 할당
#####################################
queryNode:
replicas: 1
resources:
limits:
cpu: 2
memory: 8Gi
dataNode:
replicas: 1
resources:
limits:
cpu: 1
memory: 4Gi
indexNode:
replicas: 1
resources:
limits:
cpu: 4
memory: 8Gi
코드는 여섯 개의 섹션으로 나뉩니다. 해당 구성을 변경하려면 다음 지침을 따르세요.
섹션 1: S3를 Object Storage로 구성합니다. serviceAccount는 Milvus에 S3에 대한 액세스 권한을 부여합니다(여기서는 milvus-s3-access-sa이며, EKS 클러스터를 생성할 때 이미 생성되었습니다).
<region-code>를 클러스터를 생성한 AWS 리전으로 바꿉니다.
<bucket-name>을 S3 버킷의 이름으로, <root-path>를 S3 버킷의 접두사로 바꿉니다(비워 둘 수 있음).
섹션 2: MSK를 Message Storage로 구성합니다.
- <broker-list>를 SASL/SCRAM 인증 유형용 MSK 엔드포인트로,
및 를 MSK 사용자 이름과 비밀번호로 바꾸세요. 이미지에 표시된 것처럼 MSK 클라이언트 정보에서 <broker-list>를 가져올 수 있습니다.
- <broker-list>를 SASL/SCRAM 인증 유형용 MSK 엔드포인트로,
클라이언트 정보 보기.jpg
섹션 3: 이 섹션은 클러스터 외부에서 액세스할 수 있도록 Milvus 서비스 엔드포인트를 노출합니다. 기본적으로 Milvus 엔드포인트는 ClusterIP 유형 서비스를 사용하며, 이는 EKS 클러스터 내에서만 액세스할 수 있습니다. 필요한 경우 EKS 클러스터 외부에서 액세스할 수 있도록 LoadBalancer 유형으로 변경할 수 있습니다. LoadBalancer 유형 Service는 Amazon NLB를 로드 밸런서로 사용합니다.
보안 모범 사례에 따라 aws-load-balancer-scheme은 여기에서 기본적으로 internal 모드로 구성되어 있으며, 이는 Milvus에 대한 인트라넷 액세스만 허용됨을 의미합니다. Milvus에 대한 Internet 액세스가 정말 필요한 경우 internal을 internet-facing으로 변경해야 합니다. NLB 구성 지침 보기를 클릭하세요.
- 해당 줄을 다음으로 변경하세요:
aws-load-balancer-scheme: internet-facing
- 해당 줄을 다음으로 변경하세요:
# service.beta.kubernetes.io/aws-load-balancer-scheme: internal
service.beta.kubernetes.io/aws-load-balancer-scheme: "internet-facing"
섹션 4: 오픈 소스 Milvus 관리 도구인 Attu를 설치하고 구성합니다. 직관적인 GUI를 제공하여 데이터베이스와 쉽게 상호작용할 수 있습니다. Attu를 활성화하고, AWS ALB를 사용하여 ingress를 구성하며, Attu가 Internet을 통해 액세스될 수 있도록 internet-facing 유형으로 설정합니다.
- ALB 구성 가이드는 여기를 클릭하세요.
섹션 5: Milvus Core Components의 HA 배포를 활성화합니다. 아키텍처에 따르면, Milvus에는 여러 독립적이고 분리된 컴포넌트가 포함되어 있음을 이미 알고 있습니다. 예를 들어 coordinator 서비스는 제어 계층으로 작동하여 Root, Query, Data 및 Index 컴포넌트의 조정을 처리합니다. 액세스 계층의 Proxy는 데이터베이스 액세스 엔드포인트 역할을 합니다. 이러한 컴포넌트는 기본적으로 pod replica가 1개뿐입니다. Milvus 가용성을 개선하려면 이러한 서비스 컴포넌트의 여러 replica를 배포하는 것이 특히 필요합니다.
- Root, Query, Data 및 Index coordinator 컴포넌트는 activeStandby 옵션을 활성화한 상태에서 다중 replica로 배포해야 합니다.
섹션 6: 워크로드 요구 사항을 충족하도록 Milvus 컴포넌트의 리소스 할당을 조정합니다. Milvus 웹사이트는 데이터 볼륨, 벡터 차원, 인덱스 유형 등을 기반으로 구성 제안을 생성하는 sizing tool도 제공합니다. 또한 한 번의 클릭으로 Helm 구성 파일을 생성할 수 있습니다.
- 다음 구성은 100만 개의 1024차원 벡터와 HNSW 인덱스 유형에 대해 도구가 제공한 제안입니다.
Helm을 사용하여 Milvus를 생성합니다(namespace milvus에 배포됨).
- demo-milvus를 사용자 지정 이름으로 바꿀 수 있습니다.
% helm install demo-milvus milvus/milvus -n milvus -f milvus_cluster.yaml
W0710 19:35:08.789610 64030 warnings.go:70] annotation "kubernetes.io/ingress.class" is deprecated, please use 'spec.ingressClassName' instead
NAME: demo-milvus
LAST DEPLOYED: Wed Jul 10 19:35:06 2024
NAMESPACE: milvus
STATUS: deployed
REVISION: 1
TEST SUITE: None
다음 명령을 실행하여 배포 상태를 확인합니다.
% kubectl get deployment -n milvus
NAME READY UP-TO-DATE AVAILABLE AGE
demo-milvus-attu 1/1 1 1 5m27s
demo-milvus-datacoord 2/2 2 2 5m27s
demo-milvus-datanode 1/1 1 1 5m27s
demo-milvus-indexcoord 2/2 2 2 5m27s
demo-milvus-indexnode 1/1 1 1 5m27s
demo-milvus-proxy 2/2 2 2 5m27s
demo-milvus-querycoord 2/2 2 2 5m27s
demo-milvus-querynode 1/1 1 1 5m27s
demo-milvus-rootcoord 2/2 2 2 5m27s
위 출력은 Milvus 컴포넌트가 모두 AVAILABLE 상태이며, 조정 컴포넌트에 여러 복제본이 활성화되어 있음을 보여줍니다.
Milvus 엔드포인트 액세스 및 관리
지금까지 Milvus 데이터베이스를 성공적으로 배포했습니다. 이제 엔드포인트를 통해 Milvus에 액세스할 수 있습니다. Milvus는 Kubernetes 서비스를 통해 엔드포인트를 노출합니다. Attu는 Kubernetes Ingress를 통해 엔드포인트를 노출합니다.
Kubernetes 서비스를 사용하여 Milvus 엔드포인트 액세스
서비스 엔드포인트를 가져오려면 다음 명령을 실행하세요:
% kubectl get svc -n milvus
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
demo-etcd ClusterIP 172.20.103.138 <none> 2379/TCP,2380/TCP 62m
demo-etcd-headless ClusterIP None <none> 2379/TCP,2380/TCP 62m
demo-milvus LoadBalancer 172.20.219.33 milvus-nlb-xxxx.elb.us-west-2.amazonaws.com 19530:31201/TCP,9091:31088/TCP 62m
demo-milvus-datacoord ClusterIP 172.20.214.106 <none> 13333/TCP,9091/TCP 62m
demo-milvus-datanode ClusterIP None <none> 9091/TCP 62m
demo-milvus-indexcoord ClusterIP 172.20.106.51 <none> 31000/TCP,9091/TCP 62m
demo-milvus-indexnode ClusterIP None <none> 9091/TCP 62m
demo-milvus-querycoord ClusterIP 172.20.136.213 <none> 19531/TCP,9091/TCP 62m
demo-milvus-querynode ClusterIP None <none> 9091/TCP 62m
demo-milvus-rootcoord ClusterIP 172.20.173.98 <none> 53100/TCP,9091/TCP 62m
여러 서비스를 볼 수 있습니다. Milvus는 포트 19530과 포트 9091, 두 개의 포트를 지원합니다:
포트 19530은 gRPC 및 RESTful API용입니다. 다양한 Milvus SDK 또는 HTTP 클라이언트로 Milvus 서버에 연결할 때 기본 포트입니다.
포트 9091은 Kubernetes 내에서 메트릭 수집, pprof 프로파일링 및 상태 프로브를 위한 관리 포트입니다.
그중 demo-milvus 서비스는 클라이언트와의 연결을 설정하는 데 사용되는 데이터베이스 액세스 엔드포인트를 제공합니다. 데이터베이스 엔드포인트는 서비스 로드 밸런서로 NLB를 통해 액세스됩니다. EXTERNAL-IP 열에서 NLB 서비스 엔드포인트를 가져올 수 있습니다.
이 경우 다음과 같은 NLB EXTERNAL-IP 열을 기록해 두세요:
milvus-nlb-xxxx.elb.us-west-2.amazonaws.com 19530:31201/TCP,9091:31088/TCP
Attu를 사용하여 Milvus 엔드포인트 액세스
Milvus를 설치할 때 Milvus를 관리하기 위한 Admin 도구인 Attu도 설치했습니다. 엔드포인트를 가져오려면 다음 명령을 실행하세요:
% kubectl get ingress -n milvus
NAME CLASS HOSTS ADDRESS PORTS AGE
demo-milvus-attu <none> * k8s-attu-xxxx.us-west-2.elb.amazonaws.com 80 27s
demo-milvus-attu라는 ingress가 표시되며, 여기서 ADDRESS 열은 외부 URL입니다.
브라우저에서 Ingress 주소를 열고 다음 페이지를 확인합니다.
로그인하려면 Connect를 클릭합니다.
attu 인터페이스
로그인한 후에는 다음을 통해 Milvus 데이터베이스를 관리할 수 있습니다:
Attu를 사용하여 Milvus 관리
Milvus 벡터 데이터베이스 테스트
Milvus 공식 예제 코드를 사용하여 Milvus 데이터베이스가 제대로 작동하는지 테스트할 수 있습니다.
- 1단계: hello_milvus.py 예제 코드를 직접 다운로드합니다.
% wget https://raw.githubusercontent.com/milvus-io/pymilvus/master/examples/hello_milvus.py
- 2단계: 예제 코드에서 host를 앞서 얻은 Milvus Kubernetes 엔드포인트로 수정합니다.
print(fmt.format("start connecting to Milvus"))
connections.connect(
"default",
host="milvus-nlb-xxx.elb.us-west-2.amazonaws.com",
port="19530")
- 3단계: 코드를 실행합니다. 다음 결과가 반환되면 Milvus가 정상적으로 실행 중입니다.
% python3 hello_milvus.py
=== start connecting to Milvus ===
Does collection hello_milvus exist in Milvus: False
=== Create collection `hello_milvus` ===
=== Start inserting entities ===
Number of entities in Milvus: 3000
=== Start Creating index IVF_FLAT ===
=== Start loading ===
이제 EKS에서 Milvus 설정을 성공적으로 완료했습니다! 축하합니다!!!
결론
이 게시물에서는 오픈 소스 벡터 데이터베이스 Milvus를 소개하고, Amazon EKS, S3, MSK, ELB와 같은 관리형 서비스를 사용하여 AWS에 배포함으로써 더 높은 탄력성과 안정성을 달성하는 방법을 설명했습니다.
리소스
AWS Milvus EKS 블로그: https://aws.amazon.com/cn/blogs/china/build-open-source-vector-database-milvus-based-on-amazon-eks/
Milvus EKS 가이드: https://milvus.io/docs/eks.md
Amazon EKS 설정 가이드: https://docs.aws.amazon.com/eks/latest/userguide/setting-up.html
Amazon EKS 사용자 가이드: https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html
Milvus 공식 웹사이트: https://milvus.io/
Milvus Github: https://github.com/milvus-io/milvus
eksctl 공식 웹사이트: https://eksctl.io/
설치에 필요한 YAML 파일:
eks_cluster.yaml 파일: https://aws.amazon.com/cn/blogs/china/build-open-source-vector-database-milvus-based-on-amazon-eks/
milvus_helm.yaml 파일: https://raw.githubusercontent.com/milvus-io/milvus-helm/master/charts/milvus/values.yaml
milvus_cluster.yaml 파일: 이 블로그 내부에서 복사/붙여넣기합니다.
계속 읽기

Notion's Vector Search Is Excellent. Their Next Problem Is Harder.
Notion solved vector search scaling in two years. The next bottleneck — offline context engineering, unified data, and the real-time/offline gap — is harder.

Introducing Business Critical Plan: Enterprise-Grade Security and Compliance for Mission-Critical AI Applications
Discover Zilliz Cloud’s Business Critical Plan—offering advanced security, compliance, and uptime for mission-critical AI and vector database workloads.

Optimizing Embedding Model Selection with TDA Clustering: A Strategic Guide for Vector Databases
Discover how Topological Data Analysis (TDA) reveals hidden embedding model weaknesses and helps optimize vector database performance.



