milvus-logo

Deploy a Milvus Cluster on EKS

This topic describes how to deploy a Milvus cluster on Amazon EKS.

This topic assumes that you have a basic understanding of AWS access management. If you're not familiar with it, see AWS Identity and Access Management Documentation.

Prerequisites

Software requirements

Cloud security

  • Access to EKS, EC2, and S3
  • Access key ID
  • Security access key

Deploy a Milvus cluster

  1. Copy the code from below code block, and save it to a file in yaml format, name the file as milvus_cluster.yaml.
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
  name: my-eks-cluster
  region: us-west-2
  version: "1.23"

nodeGroups:
  - name: ng-1-workers
    labels: { role: workers }
    instanceType: m5.4xlarge
    desiredCapacity: 2
    volumeSize: 80
    iam:
      withAddonPolicies:
        ebs: true

addons:
- name: aws-ebs-csi-driver
  version: v1.13.0-eksbuild.1 # optional

  1. Run the following command to create an EKS cluster. The example in this topic uses my-cluster as the cluster name. You can replace it with your own value. See Getting started with Amazon EKS for more information.
eksctl create cluster -f milvus_cluster.yaml

You will see the following output if the EKS cluster is created.

...
[✓]  EKS cluster "my-cluster" in "region-code" region is ready
  1. After a Milvus cluster is provisioned, run the following command with a region and name for the cluster.

    aws eks --region ${aws-region} update-kubeconfig --name ${cluster-name}
    
  2. Create a kubeconfig file and run kubectl get svc. If successful, a cluster appears in the output.

    NAME          TYPE      CLUSTER-IP    EXTERNAL-IP                                PORT(S)             AGE
    kubernetes       ClusterIP   10.100.0.1    <none>                                  443/TCP             106m
    
  3. Add the Milvus Helm repository.

helm repo add milvus https://milvus-io.github.io/milvus-helm/
  1. Run the following command to start the Milvus cluster that you have provisioned. The access key and an S3 bucket are required to use S3 as storage.
helm upgrade --install --set cluster.enabled=true --set externalS3.enabled=true --set externalS3.host='s3.us-east-2.amazonaws.com' --set externalS3.port=80 --set externalS3.accessKey=${access-key} --set externalS3.secretKey=${secret-key} --set externalS3.bucketName=${bucket-name} --set minio.enabled=False --set service.type=LoadBalancer milvus milvus/milvus
  1. Run kubectl get svc again to retrieve the IP address of the load balancer and use it as the IP address of the Milvus cluster.
Run kubectl get pods to view the running pods on the cluster.

Scale the Milvus cluster

Currently, a Milvus cluster can only be scaled manually. Run the following command to modify the numbers of node instances with different types.

See Storage/Computing Disaggregation for more information about the data node, index node, query node, and proxy.
helm upgrade --install --set cluster.enabled=true --set dataNode.replicas=1 --set indexNode.replicas=1 --set queryNode.replicas=1 --set proxy.replicas=1 --set externalS3.enabled=true --set externalS3.host='s3.us-east-2.amazonaws.com' --set externalS3.port=80 --set externalS3.accessKey=${access-key} --set externalS3.secretKey=${secret-key} --set externalS3.bucketName=${bucket-name} --set minio.enabled=False --set service.type=LoadBalancer milvus milvus/milvus

After running the preceding command, you can run kubectl get pods to view the newly created node instances.

What's next

If you want to learn how to deploy Milvus on other clouds:

Is this page helpful?
On this page