Press "Enter" to skip to content

Milvus x KubeSphere: 如何一键部署火爆全球的开源向量数据库

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

 

:pencil2: 作者介绍:Mia Li,Zilliz 数据工程师

 

本文将介绍如何使用 KubeSphere 容器平台可视化部署 Milvus 向量数据库以及 Milvus 在云原生场景下的基本使用。下面,让我们先来简单了解一下 Milvus 和 KubeSphere 吧!

 

Milvus 是什幺?

 

Milvus 是一款开源的向量数据库,支持针对 TB 级向量的增删改操作和近实时查询,具有高度灵活、稳定可靠以及高速查询等特点。Milvus 集成 FAISS、NMSLIB、Annoy 等常见的向量索引库,提供一整套简单直观的 API,允许用户针对不同场景选择适合的索引类型。此外,Milvus 还支持标量数据过滤,进一步提高召回率,增强搜索的灵活性。

 

 

KubeSphere 是什幺?

 

KubeSphere 是在 Kubernetes 之上构建的以应用为中心的多租户容器平台,完全开源,支持多云与多集群管理,提供全栈的 IT 自动化运维的能力,简化企业的 DevOps 工作流。KubeSphere 提供了运维友好的向导式操作界面,帮助企业快速构建一个强大和功能丰富的容器云平台。

 

 

环境准备

 

1. 创建新的 Workspace。

 

点击左上角平台管理
,选择访问控制
,创建名为milvus-workspace
的企业空间。

 

 

2. 创建项目。

 

点击左侧的项目管理
,创建一个名为milvus
的新项目。KubeSphere 中的项目等同于 Kubernetes 中的 Namespace。

 

 

3. 添加镜像仓库

 

进入创建好的milvus-workspace
,分别将milvus-helm
和helm-stable
仓库添加到 KubeSphere 容器平台。

 

 

仓库地址如下:

 

https://milvus-io.github.io/milvus-helm/
https://charts.helm.sh/stable/

 

 

部署 StorageClass

 

为了在 Kubernetes 集群中将一个存储卷(volume)同时挂载在多个 pod 上,允许多个 pod 对同一组数据作出修改,共享存储必不可少。目前常见的共享资源协议有 Network File System(NFS)、Common Internet File System(CIFS)等。手动运维持久卷(Persistent Volume,PV)十分繁琐,因此 KubeSphere 也支持动态卷供应(Dynamic Volume Provisioning)。这一功能基于存储类型(Storage Class)实现,为管理员提供了创建 PV 的模板。下文将以 NFS 为例,演示如何利用可用的 NFS server 和 nfs-client-provisioner 插件配置一个 NFS 类型的 StorageClass,实现在用户请求时自动提供存储。

 

在 AWS 上部署建议使用 Elastic File System (EFS).

 

在 Azure 上部署建议使用 Azure File Storage (AFS).

 

1. 在全部 worker 节点安装 nfs-common。

 

$ sudo apt-get update
$ sudo apt-get install nfs-common -y

 

2. 进入 Milvus 项目,部署新应用。

 

 

3. 选择helm-stable
仓库,搜索nfs-client-provisioner

 

 

4. 选择nfs-client-provisioner
,点击部署

 

 

5. 修改应用配置。

 

 

server:NFS server 的 IP 地址。

 

path:NFS server 所在的导出目录。

 

mountOptions:client 上挂载 NFS 挂载点时使用的参数。

 

6. 查看 StorageClass。

 

启动成功后,点击左上角进入集群管理
,点击存储管理
,查看存储类型

 

 

可以看到,此时 StorageClass 中存在一个名为 nfs-client 的类型。在后续修改 Milvus 集群的配置文件时,显式指定 Persistent Volume Claim(PVC)对应的 StorageClass 为 nfs-client,StorageClass 通过模板自动创建 PV 并与 PVC 绑定。

 

部署 Milvus 集群

 

Milvus 作为一款针对海量特征数据的向量数据库,其在单台服务器上的数据处理规模就可达到十亿级。而对于百亿甚至千亿级数据,则需要可横向扩展的 Milvus 集群来满足对如此大规模的向量数据的高性能检索需求。下面我们将介绍如何在 KubeSphere 上利用 chart 仓库一键部署 Milvus 集群。

 

1. 添加 Milvus 应用。

 

同上文的 nfs-client,点击应用负载部署新的应用。

 

 

2. 修改配置文件。

 

开启集群模式,并修改 StorageClass 参数,用于引用 NFS server 的持久存储。此外可以根据需要指定 Milvus 的 gRPC 服务端口。

 

 

 

A

 

 

B

 

 

Parameter

 

 

Value

 

 

cluster.enabled

 

 

TRUE

 

 

persistence.enabled

 

 

TRUE

 

 

persistence.persistentVolumeClaim.storageClass

 

 

nfs-client

 

 

service.port

 

 

19530(default)

 

 

3. 部署成功。

 

修改参数后点击部署,稍等片刻即可在 KubeSphere 应用列表中看到 Milvus 集群,表示 Milvus 部署成功。

 

 

访问 Milvus 集群

 

1. 查看外网访问类型。

 

 

由上图可见默认服务为 ClusterIP,即只有集群内的应用可以访问该服务,而不允许从集群外部访问。因此当我们从集群外部访问时,需要更换服务类型以暴露应用。Kubernetes 有两种暴露服务的访问方式:NodePort 和 LoadBalancer。下文将演示通过 KubeSphere 直接修改服务类型,允许从外网访问并使用 Milvus 集群。

 

2. 点击编辑外网访问,选择 NodePort。

 

 

 

修改后可以看到 gRPC 服务端口映射出了节点端口。此时,只需连接集群中任意一台服务器的 IP 地址和 Mishards 的节点端口即可在集群外部使用该 Milvus 集群。

 

 

3. 在集群外的服务器安装 Milvus Python SDK:

 

$ pip3 install pymilvus==1.1.0

 

4. 下载 Python 示例代码:

 

$ wget https://raw.githubusercontent.com/milvus-io/pymilvus/v1.1.0/examples/example.py

 

修改_HOST
为集群中任意一台服务器 IP 地址,_PORT
为暴露服务的静态端口。

 

5. 运行示例代码:

 

$ python3 example.py 
# You are expected to see the following output. 
CollectionSchema(collection_name='example_collection_', dimension=8, index_file_size=32, metric_type=<MetricType: L2>)
...

 

Milvus 支持使用多种 AI 模型将非结构化数据向量化,提供向量数据搜索服务,可广泛应用于图像处理、自然语言处理、推荐系统、新药发现等领域。如需处理海量特征向量,则可采取本文介绍的 Milvus 分布式集群方案来增强横向扩容能力。得益于其面向开发、测试和运维友好的图形用户界面,使用 KubeSphere 一键部署 Milvus 集群可以大大节省学习和部署 Kubernetes 以及 Milvus 及其同类应用的成本。

 

参考文章

 

 

https://kubesphere.io/zh/docs/reference/storage-system-installation/nfs-server/

 

https://www.myfreax.com/how-to-mount-an-nfs-share-in-linux/

 

Be First to Comment

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注