✏️ 作者介绍:Mia Li,Zilliz 数据工程师
本文将介绍如何使用 KubeSphere 容器平台可视化部署 Milvus 向量数据库以及 Milvus 在云原生场景下的基本使用。下面,让我们先来简单了解一下 Milvus 和 KubeSphere 吧!
Milvus 是一款开源的向量数据库,支持针对 TB 级向量的增删改操作和近实时查询,具有高度灵活、稳定可靠以及高速查询等特点。Milvus 集成 FAISS、NMSLIB、Annoy 等常见的向量索引库,提供一整套简单直观的 API,允许用户针对不同场景选择适合的索引类型。此外,Milvus 还支持标量数据过滤,进一步提高召回率,增强搜索的灵活性。
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/
为了在 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,实现在用户请求时自动提供存储。
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 集群来满足对如此大规模的向量数据的高性能检索需求。下面我们将介绍如何在 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 部署成功。
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 及其同类应用的成本。
Github @Milvus-io|CSDN @Zilliz Planet|Bilibili @Zilliz-Planet
Zilliz 以重新定义数据科学为愿景,致力于打造一家全球领先的开源技术创新公司,并通过开源和云原生解决方案为企业解锁非结构化数据的隐藏价值。
Zilliz 构建了 Milvus 向量数据库,以加快下一代数据平台的发展。Milvus 目前是 LF AI & Data 基金会的孵化阶段项目,能够管理大量非结构化数据集。我们的技术在新药发现、计算机视觉、推荐引擎、聊天机器人等方面具有广泛的应用。