Menerapkan Cluster Milvus di EKS
Topik ini menjelaskan cara menerapkan cluster Milvus di Amazon EKS.
Prasyarat
- Anda telah menginstal AWS CLI di PC lokal atau Amazon EC2, yang akan berfungsi sebagai titik akhir untuk melakukan operasi yang tercakup dalam dokumen ini. Untuk Amazon Linux 2 atau Amazon Linux 2023, alat AWS CLI sudah terinstal. Untuk menginstal AWS CLi di PC lokal Anda. Lihat Cara menginstal AWS CLI.
- Anda telah menginstal alat Kubernetes dan EKS yang diinstal di perangkat titik akhir yang diinginkan, termasuk:
- Izin AWS IAM telah diberikan dengan benar. Prinsipal keamanan IAM yang Anda gunakan harus memiliki izin untuk menggunakan peran Amazon EKS IAM, peran terkait layanan, AWS CloudFormation, VPC, dan sumber daya terkait lainnya. Anda dapat mengikuti salah satu cara berikut untuk memberikan izin yang tepat kepada prinsipal Anda.
- (Tidak disarankan) Cukup tetapkan kebijakan asosiasi pengguna/peran yang Anda gunakan ke kebijakan terkelola AWS
AdministratorAccess
. - (Sangat disarankan) Untuk menerapkan prinsip hak istimewa paling sedikit, lakukan hal berikut:
Untuk mengatur izin untuk
eksctl
, lihat Izin minimum untukeksctl
.Untuk mengatur izin untuk membuat/menghapus bucket AWS S3, lihat pengaturan izin berikut:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "S3BucketManagement", "Effect": "Allow", "Action": [ "s3:CreateBucket", "s3:PutBucketAcl", "s3:PutBucketOwnershipControls", "s3:DeleteBucket" ], "Resource": [ "arn:aws:s3:::milvus-bucket-*" ] } ] }
Untuk menyiapkan izin membuat/menghapus kebijakan IAM, lihat pengaturan izin berikut. Ganti
YOUR_ACCOUNT_ID
dengan milik Anda sendiri.{ "Version": "2012-10-17", "Statement": [ { "Sid": "IAMPolicyManagement", "Effect": "Allow", "Action": [ "iam:CreatePolicy", "iam:DeletePolicy" ], "Resource": "arn:aws:iam::YOUR_ACCOUNT_ID:policy/MilvusS3ReadWrite" } ] }
- (Tidak disarankan) Cukup tetapkan kebijakan asosiasi pengguna/peran yang Anda gunakan ke kebijakan terkelola AWS
Menyiapkan Sumber Daya AWS
Anda dapat menyiapkan sumber daya AWS yang diperlukan, termasuk bucket AWS S3 dan cluster EKS, menggunakan AWS Management Console, AWS CLI, atau alat bantu IaC, seperti Terraform. Dalam dokumen ini, AWS CLI lebih dipilih untuk mendemonstrasikan cara menyiapkan sumber daya AWS.
Membuat Bucket Amazon S3
Buat bucket AWS S3.
Baca Aturan Penamaan Bucket dan amati aturan penamaan saat menamai bucket AWS S3 Anda.
milvus_bucket_name="milvus-bucket-$(openssl rand -hex 12)" aws s3api create-bucket --bucket "$milvus_bucket_name" --region 'us-east-2' --acl private --object-ownership ObjectWriter --create-bucket-configuration LocationConstraint='us-east-2' # Output # # "Location": "http://milvus-bucket-039dd013c0712f085d60e21f.s3.amazonaws.com/"
Buat kebijakan IAM untuk membaca dan menulis objek di dalam bucket yang telah dibuat di atas. Ganti nama bucket dengan nama Anda sendiri.
echo '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:ListBucket", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::<bucket-name>", "arn:aws:s3:::<bucket-name>/*" ] } ] }' > milvus-s3-policy.json aws iam create-policy --policy-name MilvusS3ReadWrite --policy-document file://milvus-s3-policy.json # Get the ARN from the command output as follows: # { # "Policy": { # "PolicyName": "MilvusS3ReadWrite", # "PolicyId": "AN5QQVVPM1BVTFlBNkdZT", # "Arn": "arn:aws:iam::12345678901:policy/MilvusS3ReadWrite", # "Path": "/", # "DefaultVersionId": "v1", # "AttachmentCount": 0, # "PermissionsBoundaryUsageCount": 0, # "IsAttachable": true, # "CreateDate": "2023-11-16T06:00:01+00:00", # "UpdateDate": "2023-11-16T06:00:01+00:00" # } # }
Lampirkan kebijakan tersebut ke Pengguna AWS Anda.
aws iam attach-user-policy --user-name <your-user-name> --policy-arn "arn:aws:iam::<your-iam-account-id>:policy/MilvusS3ReadWrite"
Membuat Cluster Amazon EKS
Siapkan file konfigurasi cluster sebagai berikut dan beri nama
eks_cluster.yaml
.apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: 'milvus-eks-cluster' region: 'us-east-2' version: "1.27" iam: withOIDC: true serviceAccounts: - metadata: name: aws-load-balancer-controller namespace: kube-system wellKnownPolicies: awsLoadBalancerController: true managedNodeGroups: - name: milvus-node-group labels: { role: milvus } instanceType: m6i.4xlarge desiredCapacity: 3 privateNetworking: true addons: - name: vpc-cni version: latest attachPolicyARNs: - arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy - name: coredns version: latest - name: kube-proxy version: latest - name: aws-ebs-csi-driver version: latest wellKnownPolicies: ebsCSIController: true
Jalankan perintah berikut untuk membuat cluster EKS.
eksctl create cluster -f eks_cluster.yaml
Dapatkan file kubeconfig.
aws eks update-kubeconfig --region 'us-east-2' --name 'milvus-eks-cluster'
Verifikasi cluster EKS.
kubectl cluster-info kubectl get nodes -A -o wide
Membuat StorageClass
Milvus menggunakan etcd
sebagai meta storage dan perlu mengandalkan gp3
StorageClass untuk membuat dan mengelola PVC.
cat <<EOF | kubectl apply -f -
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ebs-gp3-sc
annotations:
storageclass.kubernetes.io/is-default-class: "true"
provisioner: ebs.csi.aws.com
volumeBindingMode: WaitForFirstConsumer
parameters:
type: gp3
EOF
Atur StorageClass gp2 asli ke non-default.
kubectl patch storageclass gp2 -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
Instal Pengontrol LoadBalancer AWS
Tambahkan repo karakter Helm.
helm repo add eks https://aws.github.io/eks-charts helm repo update
Instal Pengontrol Penyeimbang Beban AWS.
helm install aws-load-balancer-controller eks/aws-load-balancer-controller \ -n kube-system \ --set clusterName='milvus-eks-cluster' \ --set serviceAccount.create=false \ --set serviceAccount.name=aws-load-balancer-controller
Verifikasi penginstalan
kubectl get deployment -n kube-system aws-load-balancer-controller
Menerapkan Milvus
Dalam panduan ini, kita akan menggunakan Milvus Helm Charts untuk menerapkan cluster Milvus. Anda dapat menemukan bagan tersebut di sini.
Tambahkan repo Milvus Helm Chart.
helm repo add milvus https://zilliztech.github.io/milvus-helm/ helm repo update
Siapkan berkas konfigurasi Milvus
milvus.yaml
, dan ganti<bucket-name> <s3-access-key> <s3-secret-key>
dengan milik Anda.- Untuk mengonfigurasi HA untuk Milvus Anda, lihat kalkulator ini untuk informasi lebih lanjut. Anda dapat mengunduh konfigurasi terkait langsung dari kalkulator, dan Anda harus menghapus konfigurasi yang terkait dengan MinIO.
- Untuk mengimplementasikan penyebaran multi-replika koordinator, setel
xxCoordinator.activeStandby.enabled
ketrue
.
cluster: enabled: true service: type: LoadBalancer port: 19530 annotations: service.beta.kubernetes.io/aws-load-balancer-type: external service.beta.kubernetes.io/aws-load-balancer-name: milvus-service service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip minio: enabled: false externalS3: enabled: true host: "s3.us-east-2.amazonaws.com" port: "443" useSSL: true bucketName: "<bucket-name>" useIAM: false cloudProvider: "aws" iamEndpoint: "" accessKey: "<s3-access-key>" secretKey: "<s3-secret-key>" region: "us-east-2" # HA Configurations rootCoordinator: replicas: 2 activeStandby: enabled: true resources: limits: cpu: 1 memory: 2Gi indexCoordinator: replicas: 2 activeStandby: enabled: true resources: limits: cpu: "0.5" memory: 0.5Gi queryCoordinator: replicas: 2 activeStandby: enabled: true resources: limits: cpu: "0.5" memory: 0.5Gi dataCoordinator: replicas: 2 activeStandby: enabled: true resources: limits: cpu: "0.5" memory: 0.5Gi proxy: replicas: 2 resources: limits: cpu: 1 memory: 2Gi
Instal Milvus.
helm install milvus-demo milvus/milvus -n milvus -f milvus.yaml
Tunggu sampai semua pod
Running
.kubectl get pods -n milvus
Helm tidak mendukung penjadwalan urutan pembuatan layanan. Adalah normal jika pod bisnis memulai ulang selama satu atau dua kali sebelum
etcd
danpulsar
aktif pada tahap awal.Dapatkan alamat layanan Milvus.
kubectl get svc -n milvus
Verifikasi instalasi
Anda dapat mengikuti panduan sederhana di bawah ini untuk memverifikasi instalasi. Untuk lebih jelasnya, lihat contoh berikut.
Unduh kode contoh.
wget https://raw.githubusercontent.com/milvus-io/pymilvus/master/examples/hello_milvus.py
Ubah argumen
host
pada kode contoh ke alamat layanan Milvus di atas.
```python
...
connections.connect("default", host="milvus-service-06b515b1ce9ad10.elb.us-east-2.amazonaws.com", port="19530")
...
```
Jalankan kode contoh tersebut.
python3 hello_milvus.py
Hasilnya akan serupa dengan yang berikut ini:
=== 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 === === Start searching based on vector similarity === hit: id: 2998, distance: 0.0, entity: {'random': 0.9728033590489911}, random field: 0.9728033590489911 hit: id: 1262, distance: 0.08883658051490784, entity: {'random': 0.2978858685751561}, random field: 0.2978858685751561 hit: id: 1265, distance: 0.09590047597885132, entity: {'random': 0.3042039939240304}, random field: 0.3042039939240304 hit: id: 2999, distance: 0.0, entity: {'random': 0.02316334456872482}, random field: 0.02316334456872482 hit: id: 1580, distance: 0.05628091096878052, entity: {'random': 0.3855988746044062}, random field: 0.3855988746044062 hit: id: 2377, distance: 0.08096685260534286, entity: {'random': 0.8745922204004368}, random field: 0.8745922204004368 search latency = 0.4693s === Start querying with `random > 0.5` === query result: -{'embeddings': [0.20963514, 0.39746657, 0.12019053, 0.6947492, 0.9535575, 0.5454552, 0.82360446, 0.21096309], 'pk': '0', 'random': 0.6378742006852851} search latency = 0.9407s query pagination(limit=4): [{'random': 0.6378742006852851, 'pk': '0'}, {'random': 0.5763523024650556, 'pk': '100'}, {'random': 0.9425935891639464, 'pk': '1000'}, {'random': 0.7893211256191387, 'pk': '1001'}] query pagination(offset=1, limit=3): [{'random': 0.5763523024650556, 'pk': '100'}, {'random': 0.9425935891639464, 'pk': '1000'}, {'random': 0.7893211256191387, 'pk': '1001'}] === Start hybrid searching with `random > 0.5` === hit: id: 2998, distance: 0.0, entity: {'random': 0.9728033590489911}, random field: 0.9728033590489911 hit: id: 747, distance: 0.14606499671936035, entity: {'random': 0.5648774800635661}, random field: 0.5648774800635661 hit: id: 2527, distance: 0.1530652642250061, entity: {'random': 0.8928974315571507}, random field: 0.8928974315571507 hit: id: 2377, distance: 0.08096685260534286, entity: {'random': 0.8745922204004368}, random field: 0.8745922204004368 hit: id: 2034, distance: 0.20354536175727844, entity: {'random': 0.5526117606328499}, random field: 0.5526117606328499 hit: id: 958, distance: 0.21908017992973328, entity: {'random': 0.6647383716417955}, random field: 0.6647383716417955 search latency = 0.4652s === Start deleting with expr `pk in ["0" , "1"]` === query before delete by expr=`pk in ["0" , "1"]` -> result: -{'random': 0.6378742006852851, 'embeddings': [0.20963514, 0.39746657, 0.12019053, 0.6947492, 0.9535575, 0.5454552, 0.82360446, 0.21096309], 'pk': '0'} -{'random': 0.43925103574669633, 'embeddings': [0.52323616, 0.8035404, 0.77824664, 0.80369574, 0.4914803, 0.8265614, 0.6145269, 0.80234545], 'pk': '1'} query after delete by expr=`pk in ["0" , "1"]` -> result: [] === Drop collection `hello_milvus` ===
Pekerjaan pembersihan
Jika Anda perlu memulihkan lingkungan dengan mencopot pemasangan Milvus, menghancurkan cluster EKS, dan menghapus bucket AWS S3 dan kebijakan IAM terkait.
Copot pemasangan Milvus.
helm uninstall milvus-demo -n milvus
Hancurkan cluster EKS.
eksctl delete cluster --name milvus-eks-cluster --region us-east-2
Hapus bucket AWS S3 dan kebijakan IAM terkait.
Anda harus mengganti nama bucket dan ARN kebijakan dengan nama Anda sendiri.
aws s3 rm s3://milvus-bucket-039dd013c0712f085d60e21f --recursive aws s3api delete-bucket --bucket milvus-bucket-039dd013c0712f085d60e21f --region us-east-2 aws iam detach-user-policy --user-name <your-user-name> --policy-arn "arn:aws:iam::12345678901:policy/MilvusS3ReadWrite" aws iam delete-policy --policy-arn 'arn:aws:iam::12345678901:policy/MilvusS3ReadWrite'
Apa selanjutnya
Jika Anda ingin mempelajari cara menerapkan Milvus di cloud lain: