手把手系列丨在Kubernetes部署Milvus开源向量数据库

文摘   2024-10-28 18:30   上海  

Milvus 是一款高性能、高度可扩展的开源向量数据库,能够存储、索引和搜索由非结构化数据转化而来的高维 Embedding 向量。Milvus 适用于构建现代 AI 应用,如检索增强生成(RAG)、语义搜索、多模态搜索、推荐系统和其他 ML 任务。

但使 Milvus 更加强大的是其与 Kubernetes 的无缝集成。如果您是 Kubernetes 的爱好者,您就知道这个平台非常适合编排可扩展的分布式系统。Milvus 充分利用了 Kubernetes 的能力,让您能够轻松部署、扩展和管理分布式 Milvus 集群。本教程将为您提供清晰的分步骤讲解,介绍如何使用 Milvus Operator 在 Kubernetes 上部署 Milvus。

前提条件

在我们开始之前,请确保您已经具备以下先决条件:

  • 一个正在运行的 Kubernetes 集群。如果您在本地进行测试,可以选择 minikube

  • 已安装并配置好 kubectl,以便与您的 Kubernetes 集群交互。

  • 对 Kubernetes 的基本概念如 pod、服务(service)和部署(deployment)有一定的了解。

步骤 1: 安装 Minikube(用于本地测试)

如果您需要设置一个本地的 Kubernetes 环境,可以选择 minikube 工具。您可以在此 (https://minikube.sigs.k8s.io/docs/start/) 获取 minikube 的官方安装指南。

1. 安装 Minikube

前往 minikube 的 release 页面并根据您的操作系统下载适合的版本。对于 macOS/Linux,您可以使用以下命令:

$ curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
$ sudo install minikube-linux-amd64 /usr/local/bin/minikube && rm minikube-linux-amd64

2. 启动 Minikube

$ minikube start

3. 与集群进行交互

现在,您可以在 minikube 中使用 kubectl 与您的集群进行交互。如果您还没有安装 kubectl,minikube 将默认下载合适的版本。

$ minikube kubectl cluster-info

或者,您可以为 minikube 的 binary 文件创建一个名为 kubectl 的软链接,以便于使用。

$ sudo ln -s $(which minikube) /usr/local/bin/kubectl
$ kubectl cluster-info

步骤 2: 配置 StorageClass

在 Kubernetes 中,StorageClass 定义了工作负载的存储类型,提供了灵活管理不同存储的配置。您必须确保集群中有一个默认的 default StorageClass。以下内容展示了如何检查和配置 default StorageClass。

1. 检查已安装的 StorageClass

如需查看 Kubernetes 集群中可用的 StorageClass,请运行以下命令:

$ kubectl get sc

上述命令将显示在集群中已安装的 StorageClass 列表。如果已经配置了默认的 default StorageClass,它将被标记为 (default)

2. (可选)配置默认 default StorageClass

如果没有设置默认的 default StorageClass,您可以通过在 YAML 文件来创建一个。以下示例展示了如何创建一个默认的 default StorageClass:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
 name: default-storageclass
provisioner: k8s.io/minikube-hostpath

这个 YAML 配置文件定义了一个名为 default-storageclassStorageClass,它使用了通常在本地开发环境中使用的 minikube-hostpath

3. 应用 StorageClass

创建了 default-storageclass.yaml 文件后,使用以下命令将其应用到您的集群:

$ kubectl apply -f default-storageclass.yaml

上述命令将为您的集群设置默认的 StorageClass,确保您未来的存储需求得到妥善管理。

步骤 3:使用 Milvus Operator 安装 Milvus

Milvus Operator 简化了在 Kubernetes 上部署、扩展和更新 Milvus 的过程。在安装 Milvus Operator 之前,您需要安装 cert-manager,它为 Milvus Operator 使用的 webhook 服务器提供证书。

1. 安装 cert-manager

Milvus Operator 需要一个 cert-manager 来管理安全通信的证书。请确保您安装的是 cert-manager 版本为 1.1.3 或以上版本。请运行以下命令进行安装:

$ kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.5.3/cert-manager.yaml

安装完成后,通过执行以下命令验证 cert-manager pod 是否正在运行:

$ kubectl get pods -n cert-manager

2. 安装 Milvus Operator

cert-manager 启动并运行后,您可以安装 Milvus Operator。运行以下命令使用 kubectl 部署 Milvus Operator:

$ kubectl apply -f https://github.com/zilliztech/milvus-operator/releases/latest/download/deployment.yaml

您可以使用以下命令检查 Milvus Operator pod 是否正在运行:

$ kubectl get pods -n milvus-operator

3. 部署 Milvus 集群

Milvus Operator pod 运行后,您可以使用它来部署 Milvus 集群。以下命令使用默认配置,在单独的 pod 中分别部署 Milvus 集群组件和依赖组件:

$ kubectl apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/refs/heads/main/config/samples/cluster_demo.yaml

如需自定义 Milvus 设置,您需要将 YAML 文件替换为您自己的 YAML 配置文件。除了手动编辑或创建文件外,您可以使用 Milvus Sizing Tool 工具来调整配置,然后下载相应的 YAML 文件。Milvus Sizing Tool 工具允许您调整各种设置,如资源分配和存储选项,然后下载包含您所需配置的 YAML 文件。确保您的 Milvus 部署针对您的特定用例进行了优化。

图 1: Milvus sizing tool 工具

请耐心等待几分钟直至完成部署。您可以通过以下命令查看 Milvus 集群状态:

$ kubectl get milvus my-release

一旦您的 Milvus 集群准备就绪,Milvus 集群中的所有 pod 应该都在运行或已完成状态:

$ kubectl get pods

步骤 4:访问您的 Milvus 集群

部署好您的 Milvus 集群后,您需要通过将本地端口转发到 Milvus 服务端口来访问它。按照以下步骤获取服务端口并设置端口转发。

1. 获取服务端口

首先,使用以下命令确定服务端口。将 <YOUR_MILVUS_PROXY_POD> 替换为您的 Milvus proxy pod 的名称,通常以 my-release-milvus-proxy- 开头:

$ kubectl get pod <YOUR_MILVUS_PROXY_POD> --template ='{{(index (index .spec.containers 0).ports 0).containerPort}}{{"\n"}}'

这个命令将返回您的 Milvus 服务正在使用的端口号。

2. 转发端口

要本地访问 Milvus 集群,请使用以下命令将本地端口转发到服务端口。将 <YOUR_LOCAL_PORT> 替换为您想要使用的本地端口,本次以默认19530端口作为示例,将 <YOUR_SERVICE_PORT> 替换为上一步中检索到的服务端口:

$ kubectl port-forward --address 0.0.0.0 service/my-release-milvus 19530:<YOUR_SERVICE_PORT>

上述命令允许端口转发监听主机机器的所有 IP 地址。如果您只需要服务监听 localhost,可以省略 --address 0.0.0.0 选项。

设置好端口转发后,您就可以通过指定的本地端口访问您的 Milvus 集群,以进行进一步的操作。

步骤 5:使用 Python SDK 连接至 Milvus

启动并运行您的 Milvus 集群后,就可以使用任何 Milvus SDK 与之交互。在这个例子中,我们将使用 PyMilvus(即 Milvus 的 Python SDK)来连接集群并执行基本操作。

1. 安装 PyMilvus

如需通过 Python 与 Milvus 进行交互,请安装 pymilvus:

$ pip install pymilvus

2. 连接至 Milvus

以下是一个示例 Python 脚本,它连接到您的 Milvus 集群,并展示了如何执行创建 Collection 等基本操作。

from pymilvus import MilvusClient
# Connect to the Milvus server
client = MilvusClient(uri="http://localhost:19530")
# Create a collection
collection_name = "example_collection"
if client.has_collection(collection_name):
   client.drop_collection(collection_name)
client.create_collection(
   collection_name=collection_name,
   dimension=768,  # The vectors we will use in this demo has 768 dimensions
)

脚本解释:

  • 连接到 Milvus:脚本使用您在步骤 4 中设置的本地端口连接到运行在 localhost 上的 Milvus 服务器。

  • 创建 Collection:这个命令先检查是否存在名为 example_collection 的 Collection,如果存在,则删除这个 Collection,然后创建一个新的 Collection,向量维度设置为 768 维。

这个脚本先连接至 Milvus 集群并创建了一个 Collection,用于后续进行更复杂的操作(如插入向量和执行相似性搜索)。

总结

在 Kubernetes 上部署分布式 Milvus 可以解锁管理大规模向量数据的强大功能,实现无缝可扩展性和高性能的 AI 应用。阅读本教程后,您应该已经学会了如何使用 Milvus Operator 设置 Milvus,简化整个安装过程,使其变得更高效。

随着您继续探索 Milvus,可以考虑扩展您的集群以满足不断增长的需求,或者将其部署在如 Amazon EKS、Google Cloud 或 Microsoft Azure 等云平台上。为了增强管理和监控,Milvus Backup、Birdwatcher 和 Attu 等工具为维护您的部署健康和性能提供了宝贵的支持。

准备好在 Kubernetes 上部署 Milvus,充分发挥其潜力了嘛?欢迎立刻部署!🚀

作者介绍

顾梦佳

Zilliz 高级算法工程师

推荐阅读


Zilliz
Simply The Fastest Vector Database for AI. Period.
 最新文章