手把手教程:如何在 Kubernetes 上部署 Milvus
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)
。
storage_classes_installed_in_your_cluster_21d36d6ac8.png
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-storageclass
的 StorageClass
,它使用了通常在本地开发环境中使用的 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.png
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.png
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
4.png
如需自定义 Milvus 设置,您需要将 YAML 文件替换为您自己的 YAML 配置文件。除了手动编辑或创建文件外,您可以使用 Milvus Sizing Tool 工具来调整配置,然后下载相应的 YAML 文件。Milvus Sizing Tool 工具允许您调整各种设置,如资源分配和存储选项,然后下载包含您所需配置的 YAML 文件。确保您的 Milvus 部署针对您的特定用例进行了优化。
5.png
图 1: Milvus sizing tool 工具
请耐心等待几分钟直至完成部署。您可以通过以下命令查看 Milvus 集群状态:
$ kubectl get milvus my-release
6.png
一旦您的 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,充分发挥其潜力了嘛?欢迎立刻部署!🚀
技术干货
Milvus×Florence:一文读懂如何构建多任务视觉模型
Florence模型的结构、训练方法、能力,以及与Milvus的组合应用。
2024-12-04技术干货
套娃嵌入:如何优化向量搜索成本,并兼顾延迟与召回
允许开发人员在不牺牲语义完整性的情况下创建更精巧的嵌入。
2024-12-04技术干货
Elasticsearch vs 向量数据库:寻找最佳混合检索方案
如何实现语义检索?Embedding模型和向量数据库在其中的作用至关重要。前者主要完成原始信息的向量化,后者则提供对向量化信息的存储、检索等服务。目前,检索增强生成(RAG)与多模态搜索,是语义检索的核心应用场景之一。
2024-12-06