使用 Helm 在 Kubernetes 中运行 Milvus
本页面介绍了如何使用Milvus Helm 图表在 Kubernetes 中启动 Milvus 实例。
概述
Helm 使用一种名为“图表”(charts)的打包格式。图表是一组文件的集合,用于描述一组相关的 Kubernetes 资源。Milvus 提供了一组图表,以帮助您部署 Milvus 的依赖项和组件。
先决条件
安装StorageClass。您可以通过以下方式查看已安装的 StorageClass。
$ kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBIINDINGMODE ALLOWVOLUMEEXPANSION AGE standard (default) k8s.io/minikube-hostpath Delete Immediate false安装前请检查硬件和软件要求。
在安装 Milvus 之前,建议使用Milvus 规格规划工具,根据您的数据规模估算硬件需求。这有助于确保您的 Milvus 安装获得最佳性能和资源分配。
如果拉取镜像时遇到任何问题,请将问题详情发送至community@zilliz.com联系我们,我们将为您提供必要的支持。
安装 Milvus Helm 图表
在安装 Milvus Helm 图表之前,您需要添加 Milvus Helm 存储库。
helm repo add zilliztech https://zilliztech.github.io/milvus-helm/
位于https://github.com/milvus-io/milvus-helm 的 Milvus Helm Charts 仓库现已归档。我们现在使用新仓库https://github.com/zilliztech/milvus-helm 。归档的仓库仍可提供 4.0.31 及更早版本的图表,但后续版本请使用新仓库。
然后按以下方式从仓库获取 Milvus Helm Charts:
$ helm repo update
您可以随时运行以下命令来获取最新的 Milvus Helm 图表。
在线安装
1. 部署 Milvus 集群
安装 Helm 图表后,您即可在 Kubernetes 上启动 Milvus。本节将指导您部署 Milvus 集群。
需要独立部署吗?
如果您希望以独立模式(单节点)部署 Milvus 用于开发或测试,请使用以下命令:
helm install my-release zilliztech/milvus \
--set image.all.tag=v3.0.3 \
--set cluster.enabled=false \
--set pulsarv3.enabled=false \
--set standalone.messageQueue=woodpecker \
--set woodpecker.enabled=true \
--set streaming.enabled=true
注意:独立模式默认使用 Woodpecker 作为消息队列,并启用流式处理节点(Streaming Node)组件。独立部署中,Woodpecker嵌入在Milvus Pod 中运行;而专用 Woodpecker服务(独立 Pod)仅用于分布式/集群部署。详情请参阅《架构概述》和《Woodpecker》。
部署 Milvus 集群:
对于 Woodpecker 服务模式,建议使用 Milvus 3.0.3 或更高版本,并搭配 Woodpecker v0.1.46 或更高版本。
以下命令将部署一个针对 v3.0.3 进行过优化设置的 Milvus 集群,并使用 Woodpecker 作为推荐的消息队列:
helm install my-release zilliztech/milvus \
--set image.all.tag=v3.0.3 \
--set woodpecker.enabled=true \
--set woodpecker.image.tag=v0.1.46 \
--set streaming.enabled=true \
--set streaming.woodpecker.embedded=false \
--set indexNode.enabled=false
该命令的作用:
- 使用Woodpecker作为消息队列(推荐使用,可减少维护工作)
- 将Woodpecker 作为专用服务(独立的 StatefulSet)运行,而非嵌入流处理节点中
- 启用新的流式处理节点组件以提升性能
- 禁用旧版索引节点(其功能现由数据节点处理)
Milvus 2.6.x 中的架构变更:
- 消息队列:现推荐使用Woodpecker(与 Pulsar 相比可减少基础设施维护工作)
- 新组件:引入流式处理节点(Streaming Node),并默认启用
- 组件合并:索引节点和数据节点合并为单一的数据节点
有关完整的架构详情,请参阅《架构概述》。
替代消息队列:若要使用 Pulsar、Kafka 或 RocksMQ 代替 Woodpecker 进行部署,请参阅“可选依赖项”。
后续步骤: 上述命令将使用推荐配置部署 Milvus。若用于生产环境:
- 请使用Milvus 容量规划工具,根据您的数据规模优化设置
- 请查阅《Milvus 系统配置检查清单》以了解高级配置选项
2. 检查 Milvus 集群状态
通过检查 Pod 状态来验证部署是否成功:
kubectl get pods
等待所有 Pod 显示“Running”状态。采用 v3.0.3 配置时,您应看到类似以下的 Pod:
NAME READY STATUS RESTARTS AGE
my-release-etcd-0 1/1 Running 0 3m23s
my-release-etcd-1 1/1 Running 0 3m23s
my-release-etcd-2 1/1 Running 0 3m23s
my-release-milvus-datanode-68cb87dcbd-4khpm 1/1 Running 0 3m23s
my-release-milvus-mixcoord-7fb9488465-dmbbj 1/1 Running 0 3m23s
my-release-milvus-proxy-6bd7f5587-ds2xv 1/1 Running 0 3m24s
my-release-milvus-querynode-5cd8fff495-k6gtg 1/1 Running 0 3m24s
my-release-milvus-streamingnode-7b8cfc769c-mqmsm 1/1 Running 0 3m24s
my-release-milvus-woodpecker-0 1/1 Running 0 3m24s
my-release-milvus-woodpecker-1 1/1 Running 0 3m24s
my-release-milvus-woodpecker-2 1/1 Running 0 3m24s
my-release-milvus-woodpecker-3 1/1 Running 0 3m24s
my-release-minio-0 1/1 Running 0 3m23s
my-release-minio-1 1/1 Running 0 3m23s
my-release-minio-2 1/1 Running 0 3m23s
my-release-minio-3 1/1 Running 0 3m23s
需验证的关键组件:
- Milvus 组件:
mixcoord、datanode、querynode、proxy、streamingnode - 依赖项:
etcd(元数据)、minio(对象存储)、woodpecker(消息队列)
使用streaming.woodpecker.embedded=false 时,Woodpecker作为专用的 StatefulSet运行(my-release-milvus-woodpecker ,默认 4 个副本——3 个节点的法定多数加上一个备用节点以实现容错; 请勿将woodpecker.replicaCount 设置为低于 3)运行,由一个无头服务作为前端,并使用 MinIO 作为存储后端——因此该集群拥有一个独立的woodpecker Pod 集,与流式处理节点相互独立。
设置好端口转发后(参见下一步),您还可以通过http://127.0.0.1:9091/webui/ 访问Milvus WebUI。详情请参阅Milvus WebUI。
3. 连接到 Milvus
若要在 Kubernetes 外部连接到您的 Milvus 集群,您需要设置端口转发。
设置端口转发:
kubectl port-forward service/my-release-milvus 27017:19530
此命令将本地端口27017 转发至 Milvus 端口19530 。您应看到:
Forwarding from 127.0.0.1:27017 -> 19530
连接详情:
- 本地连接:
localhost:27017 - Milvus 默认端口:
19530
端口转发选项:
- 自动分配本地端口:使用
:19530代替27017:19530,让 kubectl 选择一个可用端口 - 监听所有接口:添加
--address 0.0.0.0以允许其他机器建立连接:kubectl port-forward --address 0.0.0.0 service/my-release-milvus 27017:19530 - 独立部署:若使用独立模式,服务名称保持不变
使用 Milvus 时请保持此终端窗口打开。现在,您可以使用任何 Milvus SDK 通过localhost:27017 连接到 Milvus。
(可选)更新 Milvus 配置
您可以通过编辑values.yaml 文件并重新应用,来更新 Milvus 集群的配置。
创建一个包含所需配置的
values.yaml文件。以下内容假设您希望启用
proxy.http。extraConfigFiles: user.yaml: |+ proxy: http: enabled: true有关适用的配置项,请参阅“系统配置”。
应用
values.yaml文件。
helm upgrade my-release zilliztech/milvus --namespace my-namespace -f values.yaml
检查更新后的配置。
helm get values my-release输出应显示已更新的配置。
访问 Milvus WebUI
Milvus 随附了一个名为 Milvus WebUI 的内置图形化用户界面工具,您可以通过浏览器访问该工具。Milvus WebUI 通过简单直观的界面增强了系统的可观察性。您可以使用 Milvus WebUI 观察 Milvus 组件和依赖项的统计数据与指标,查看数据库和 Collection 的详细信息,并列出详细的 Milvus 配置。 有关 Milvus WebUI 的详细信息,请参阅Milvus WebUI
要启用对 Milvus WebUI 的访问,您需要将代理 Pod 进行端口转发至本地端口。
$ kubectl port-forward --address 0.0.0.0 service/my-release-milvus 27018:9091
Forwarding from 0.0.0.0:27018 -> 9091
现在,您可以通过http://localhost:27018 访问 Milvus WebUI。
离线安装
如果您处于网络受限的环境中,请按照本节中的步骤启动 Milvus 集群。
1. 获取 Milvus 清单
运行以下命令获取 Milvus 配置文件。
$ helm template my-release zilliztech/milvus > milvus_manifest.yaml
上述命令会为 Milvus 集群生成图表模板,并将输出保存到名为milvus_manifest.yaml 的清单文件中。使用此清单,您可以安装一个 Milvus 集群,其组件和依赖项将分别位于不同的 Pod 中。
- 若要在独立模式下安装 Milvus 实例(即所有 Milvus 组件均包含在单个 Pod 中),则应运行
helm template my-release --set cluster.enabled=false --set etcd.replicaCount=1 --set minio.mode=standalone --set pulsarv3.enabled=false --set standalone.messageQueue=woodpecker --set woodpecker.enabled=true --set streaming.enabled=true zilliztech/milvus > milvus_manifest.yaml,以生成独立模式下 Milvus 实例的图表模板。 - 若要修改 Milvus 配置,请下载
value.yaml模板,在其中填写所需设置,然后使用helm template -f values.yaml my-release zilliztech/milvus > milvus_manifest.yaml据此生成相应的清单。
2. 下载镜像拉取脚本
镜像拉取脚本采用 Python 编写。您应将该脚本及其依赖项一并下载到requirement.txt 文件中。
$ wget https://raw.githubusercontent.com/milvus-io/milvus/master/deployments/offline/requirements.txt
$ wget https://raw.githubusercontent.com/milvus-io/milvus/master/deployments/offline/save_image.py
3. 拉取并保存镜像
运行以下命令以拉取并保存所需的镜像。
$ pip3 install -r requirements.txt
$ python3 save_image.py --manifest milvus_manifest.yaml
图片将被拉取到当前目录下名为images 的子文件夹中。
4. 加载图像
现在,您可以按照以下步骤将图像加载到网络受限环境中的主机上:
$ for image in $(find . -type f -name "*.tar.gz") ; do gunzip -c $image | docker load; done
5. 部署 Milvus
$ kubectl apply -f milvus_manifest.yaml
至此,您可以按照在线安装指南中的步骤2和3检查集群状态,并将本地端口转发至 Milvus。
升级正在运行的 Milvus 集群
运行以下命令,将正在运行的 Milvus 集群升级至最新版本:
$ helm repo update
$ helm upgrade my-release zilliztech/milvus --reset-then-reuse-values
卸载 Milvus
运行以下命令以卸载 Milvus。
$ helm uninstall my-release
可选依赖项
此部署使用Woodpecker作为消息队列,etcd作为元数据存储,MinIO作为对象存储。若要使用其他消息队列或连接外部对象存储/元数据存储,请参阅:
- 消息队列:Woodpecker(默认)·Pulsar·Kafka·RocksMQ
- 对象存储:MinIO(默认)·AWS S3·Azure Blob·GCP Cloud Storage·阿里云 OSS·腾讯 COS·华为 OBS·兼容 S3
- 元数据:etcd
Storage V3 默认处于禁用状态。在使用依赖于它的功能之前,请先启用它。有关要求和兼容性注意事项,请参阅Storage V3。
下一步
在 Docker 中安装 Milvus 后,您可以:
查看“Hello Milvus”以了解 Milvus 的功能。
学习 Milvus 的基本操作:
在云端部署您的 Milvus 集群:
探索Milvus WebUI——一个用于 Milvus 可观测性和管理的直观 Web 界面。
探索Milvus Backup,一款用于 Milvus 数据备份的开源工具。
了解Birdwatcher——一款用于调试 Milvus 并进行动态配置更新的开源工具。
探索Attu——一款用于直观管理 Milvus 的开源图形用户界面工具。