基于Amazon EKS搭建开源向量数据库Milvus
Milvus是一款高性能的开源向量数据库,广泛应用于推荐系统、图像检索和自然语言处理等场景。Amazon EKS(Elastic Kubernetes Service)是亚马逊云科技提供的托管式Kubernetes服务,可简化容器化应用的部署与管理。本文将介绍如何在Amazon EKS上部署Milvus,构建高效向量检索基础设施。
前提准备
在开始部署前,需完成基础环境配置。
安装Amazon CLI
Amazon CLI是管理亚马逊云科技服务的核心命令行工具,支持资源创建、配置管理等操作。安装步骤如下:
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
aws configure
执行aws configure后,输入访问密钥ID、秘密访问密钥等信息以完成身份认证。
安装Amazon EKS相关工具
为高效管理EKS集群,需安装以下工具:
- eksctl:用于快速创建和管理EKS集群。安装命令:
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp sudo mv /tmp/eksctl /usr/local/bin - kubectl:Kubernetes命令行工具,用于与集群交互。安装方式:
curl -LO "https://dl.k8s.io/release/$(curl -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" chmod +x kubectl sudo mv kubectl /usr/local/bin/ - helm:Kubernetes包管理工具,用于部署和升级应用。安装命令:
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
创建Amazon S3存储桶
Amazon S3作为高可用对象存储服务,可用于保存Milvus数据。创建命令如下:
aws s3api create-bucket --bucket milvus-s3-bucket-eks --region us-west-2
请将milvus-s3-bucket-eks替换为全局唯一的存储桶名称。
创建Amazon MSK实例
Amazon MSK是兼容Apache Kafka的托管流数据服务,可作为Milvus的消息存储组件。建议通过控制台创建MSK实例并保留以下信息:
- Bootstrap servers:客户端连接集群的入口地址。
- 安全组ID:控制网络访问权限。
- 子网ID:标识实例所在网络区域。
创建Amazon EKS集群
使用eksctl创建EKS集群,命令如下:
eksctl create cluster \
--name milvus-cluster \
--version 1.28 \
--region us-west-2 \
--nodegroup-name milvus-nodes \
--node-type t3.large \
--nodes 3 \
--nodes-min 1 \
--nodes-max 4 \
--managed
该配置创建一个包含3个t3.large节点的托管集群,Kubernetes版本为1.28,支持自动扩缩容。
部署Milvus数据库
添加Milvus Helm仓库
执行以下命令添加Milvus Helm Chart源:
helm repo add milvus https://zilliztech.github.io/milvus-helm/
helm repo update
配置Amazon S3作为对象存储
在本地创建values.yaml文件,配置S3集成:
external:
etcd:
enabled: false
minio:
enabled: false
components:
standalone:
enabled: false
cluster:
enabled: true
s3:
enabled: true
bucketName: milvus-s3-bucket-eks
region: us-west-2
accessKey: <your-aws-access-key>
secretKey: <your-aws-secret-key>
配置Amazon MSK作为消息存储
在values.yaml中追加Kafka配置:
kafka:
brokerList: "<your-msk-bootstrap-server>"
enable: true
external: true
type: kafka
请将占位符替换为实际的AWS密钥和MSK引导服务器地址。
部署Milvus
使用Helm安装Milvus:
helm install milvus milvus/milvus -f values.yaml --namespace milvus --create-namespace
该命令将在milvus命名空间中部署Milvus集群。
优化Milvus配置
配置外部访问
默认情况下Milvus服务仅限集群内访问。如需从外部连接,修改Service类型为LoadBalancer:
kubectl edit svc milvus-cluster-standalone -n milvus
将type: ClusterIP更改为:
type: LoadBalancer
安装可视化管理工具Attu
Attu是Milvus的Web管理界面,便于数据查看与操作。部署命令如下:
kubectl apply -f https://raw.githubusercontent.com/zilliztech/attu/main/deploy/k8s/attu-deployment.yaml
部署完成后,可通过负载均衡器公网IP或绑定域名访问http://<IP>:3000进入Attu界面。
总结
通过上述步骤,可在Amazon EKS上成功部署并优化开源向量数据库Milvus。该方案结合了亚马逊云科技的弹性基础设施与Milvus的高性能向量检索能力,适用于大规模AI应用场景。用户可根据业务需求进一步调整资源配置、索引策略等参数以提升性能。同时建议在测试完成后及时释放资源,避免产生额外费用。

