🚀 Coba Zilliz Cloud, Milvus yang sepenuhnya terkelola, secara gratis—rasakan performa 10x lebih cepat! Coba Sekarang>>

milvus-logo
LFAI
Beranda
  • Panduan Administrasi
  • Home
  • Docs
  • Panduan Administrasi

  • Penyebaran

  • Di Atas Awan

  • Menerapkan di AWS

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 untuk eksctl.

      • 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"
            }
          ]
        }    
        

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 ke true.

    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 dan pulsar 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:

Coba Milvus yang Dikelola secara Gratis

Zilliz Cloud bebas masalah, didukung oleh Milvus dan 10x lebih cepat.

Mulai
Umpan balik

Apakah halaman ini bermanfaat?