使用 Helm Chart 运行支持 GPU 的 Milvus
本页面演示了如何使用 Helm 图表启动支持 GPU 的 Milvus 实例。
概述
Helm 使用一种名为“图表”(charts)的打包格式。 Chart 是一组文件的集合,用于描述一组相关的 Kubernetes 资源。Milvus 提供了一套 Chart,以帮助您部署 Milvus 的依赖项和组件。Milvus Helm Chart是一种解决方案,它利用 Helm 包管理器在 Kubernetes(K8s)集群上初始化 Milvus 的部署。
先决条件
安装一个StorageClass。您可以通过以下方式检查已安装的 StorageClass。
$ kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBIINDINGMODE ALLOWVOLUMEEXPANSION AGE standard (default) k8s.io/minikube-hostpath Delete Immediate false安装前请检查硬件和软件要求。
若在拉取镜像时遇到任何问题,请将问题详情发送至community@zilliz.com联系我们,我们将为您提供必要的支持。
安装 Milvus 的 Helm Chart
Helm 是一款 K8s 包管理器,可帮助您快速部署 Milvus。
- 添加 Milvus Helm 仓库。
$ helm repo add milvus https://zilliztech.github.io/milvus-helm/
位于https://milvus-io.github.io/milvus-helm/ 的 Milvus Helm Charts 仓库现已归档,您可以从https://zilliztech.github.io/milvus-helm/ 获取后续更新,具体操作如下:
helm repo add zilliztech https://zilliztech.github.io/milvus-helm
helm repo update
# upgrade existing helm release
helm upgrade my-release zilliztech/milvus
存档仓库仍可提供 4.0.31 及更早版本的图表。对于后续版本,请改用新仓库。
- 在本地更新图表。
$ helm repo update
启动 Milvus
安装 Helm 图表后,您即可在 Kubernetes 上启动 Milvus。本节将指导您完成启用 GPU 支持的 Milvus 启动步骤。
您应使用 Helm 启动 Milvus,并指定发布名称、图以及您计划修改的参数。在本指南中,我们使用my-release 作为发布名称。若要使用其他发布名称,请在以下命令中将my-release 替换为您实际使用的名称。
Milvus 允许您为其分配一个或多个 GPU 设备。
1. 分配单个 GPU 设备
支持 GPU 的 Milvus 允许您分配一个或多个 GPU 设备。
Milvus 集群
cat <<EOF > custom-values.yaml dataNode: resources: requests: nvidia.com/gpu: "1" limits: nvidia.com/gpu: "1" queryNode: resources: requests: nvidia.com/gpu: "1" limits: nvidia.com/gpu: "1" EOF$ helm install my-release milvus/milvus -f custom-values.yamlMilvus Standalone
cat <<EOF > custom-values.yaml standalone: resources: requests: nvidia.com/gpu: "1" limits: nvidia.com/gpu: "1" EOF$ helm install my-release milvus/milvus --set cluster.enabled=false --set etcd.replicaCount=1 --set minio.mode=standalone --set pulsarv3.enabled=false -f custom-values.yaml
2. 分配多个 GPU 设备
除了单个 GPU 设备外,您还可以向 Milvus 分配多个 GPU 设备。
Milvus 集群
cat <<EOF > custom-values.yaml dataNode: resources: requests: nvidia.com/gpu: "2" limits: nvidia.com/gpu: "2" queryNode: resources: requests: nvidia.com/gpu: "2" limits: nvidia.com/gpu: "2" EOF在上述配置中,共有四个 CPU 可用,每个 dataNode 和 queryNode 各使用两个 GPU。若要为 dataNode 和 queryNode 分配不同的 GPU,您可以通过在配置文件中按如下方式设置 `
extraEnv` 来相应修改配置:cat <<EOF > custom-values.yaml dataNode: resources: requests: nvidia.com/gpu: "1" limits: nvidia.com/gpu: "1" extraEnv: - name: CUDA_VISIBLE_DEVICES value: "0" queryNode: resources: requests: nvidia.com/gpu: "1" limits: nvidia.com/gpu: "1" extraEnv: - name: CUDA_VISIBLE_DEVICES value: "1" EOF$ helm install my-release milvus/milvus -f custom-values.yaml- 发布名称只能包含字母、数字和连字符。发布名称中不允许使用点号。
- 使用 Helm 安装 Milvus 时,默认命令行会安装 Milvus 集群版本。若安装 Milvus Standalone,则需要进行进一步设置。
- 根据Kubernetes 已弃用 API 迁移指南,自 v1.25 起,PodDisruptionBudget的 policy/v1beta1API 版本将不再提供服务。建议您将配置文件和 API 客户端迁移至policy/v1API 版本。
对于仍在 Kubernetes v1.25 及更高版本上使用 PodDisruptionBudget 的policy/v1beta1API 版本的用户,作为临时解决方案,您可以运行以下命令来安装 Milvus:
helm install my-release milvus/milvus --set pulsar.bookkeeper.pdb.usePolicy=false,pulsar.broker.pdb.usePolicy=false,pulsar.proxy.pdb.usePolicy=false,pulsar.zookeeper.pdb.usePolicy=false - 有关更多信息,请参阅Milvus Helm Chart和Helm。
Milvus Standalone
cat <<EOF > custom-values.yaml dataNode: resources: requests: nvidia.com/gpu: "2" limits: nvidia.com/gpu: "2" queryNode: resources: requests: nvidia.com/gpu: "2" limits: nvidia.com/gpu: "2" EOF在上述配置中,共有 4 个 CPU 可用,每个 dataNode 和 queryNode 各使用 2 个 GPU。若要为 dataNode 和 queryNode 分配不同的 GPU,可通过在配置文件中按如下方式设置 extraEnv 来相应修改配置:
cat <<EOF > custom-values.yaml dataNode: resources: requests: nvidia.com/gpu: "1" limits: nvidia.com/gpu: "1" extraEnv: - name: CUDA_VISIBLE_DEVICES value: "0" queryNode: resources: requests: nvidia.com/gpu: "1" limits: nvidia.com/gpu: "1" extraEnv: - name: CUDA_VISIBLE_DEVICES value: "1" EOF$ helm install my-release milvus/milvus --set cluster.enabled=false --set etcd.replicaCount=1 --set minio.mode=standalone --set pulsarv3.enabled=false -f custom-values.yaml
2. 检查 Milvus 状态
运行以下命令检查 Milvus 状态:
$ kubectl get pods
Milvus 启动后,所有 Pod 的“READY ”列将显示“1/1 ”。
Milvus 集群
NAME READY STATUS RESTARTS AGE my-release-etcd-0 1/1 Running 0 3m24s my-release-etcd-1 1/1 Running 0 3m24s my-release-etcd-2 1/1 Running 0 3m24s my-release-milvus-datanode-698dbf7d77-rjkkq 1/1 Running 0 3m24s my-release-milvus-mixcoord-856d666559-rpj8z 1/1 Running 0 3m24s my-release-milvus-proxy-7f7cf47689-pzltw 1/1 Running 0 3m24s my-release-milvus-querynode-7fb6d5b5f8-92phj 1/1 Running 0 3m24s my-release-milvus-streamingnode-5867bfbcbf-cg9xx 1/1 Running 0 3m24s my-release-minio-0 1/1 Running 0 3m24s my-release-minio-1 1/1 Running 0 3m24s my-release-minio-2 1/1 Running 0 3m24s my-release-minio-3 1/1 Running 0 3m24s my-release-pulsarv3-bookie-0 1/1 Running 0 3m24s my-release-pulsarv3-bookie-1 1/1 Running 0 3m24s my-release-pulsarv3-bookie-2 1/1 Running 0 3m24s my-release-pulsarv3-bookie-init-p8hcq 0/1 Completed 0 3m24s my-release-pulsarv3-broker-0 1/1 Running 0 3m24s my-release-pulsarv3-broker-1 1/1 Running 0 3m24s my-release-pulsarv3-proxy-0 1/1 Running 0 3m24s my-release-pulsarv3-proxy-1 1/1 Running 0 3m24s my-release-pulsarv3-pulsar-init-8kjsj 0/1 Completed 0 3m24s my-release-pulsarv3-recovery-0 1/1 Running 0 3m24s my-release-pulsarv3-zookeeper-0 1/1 Running 0 3m24s my-release-pulsarv3-zookeeper-1 1/1 Running 0 3m24s my-release-pulsarv3-zookeeper-2 1/1 Running 0 3m24sMilvus Standalone
NAME READY STATUS RESTARTS AGE my-release-etcd-0 1/1 Running 0 30s my-release-milvus-standalone-54c4f88cb9-f84pf 1/1 Running 0 30s my-release-minio-5564fbbddc-mz7f5 1/1 Running 0 30s
3. 将本地端口转发至 Milvus
确认 Milvus 服务器正在监听哪个本地端口。请将 pod 名称替换为您自己的。
$ kubectl get pod my-release-milvus-proxy-6bd7f5587-ds2xv --template
='{{(index (index .spec.containers 0).ports 0).containerPort}}{{"\n"}}'
19530
然后,运行以下命令将本地端口转发到 Milvus 提供服务的端口。
$ kubectl port-forward service/my-release-milvus 27017:19530
Forwarding from 127.0.0.1:27017 -> 19530
此外,您可以在上述命令中使用:19530 代替27017:19530 ,让kubectl 为您分配一个本地端口,从而无需手动处理端口冲突。
默认情况下,kubectl 的端口转发仅监听localhost 。若希望 Milvus 监听选定的或所有 IP 地址,请使用address 标志。以下命令将使端口转发监听主机上的所有 IP 地址。
$ kubectl port-forward --address 0.0.0.0 service/my-release-milvus 27017:19530
Forwarding from 0.0.0.0:27017 -> 19530
现在,您可以通过转发端口连接到 Milvus。
访问 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
运行以下命令以卸载 Milvus。
$ helm uninstall my-release
Storage V3 默认处于禁用状态。在使用依赖于它的功能之前,请先将其启用。有关要求和兼容性注意事项,请参阅Storage V3。
下一步
安装 Milvus 后,您可以:
查看《快速入门》了解 Milvus 的功能。
了解 Milvus 的基本操作:
在云端部署您的 Milvus 集群:
探索Milvus WebUI——一个用于 Milvus 可观测性和管理的直观 Web 界面。
探索Milvus Backup——一款用于 Milvus 数据备份的开源工具。
了解Birdwatcher——一款用于调试 Milvus 并更新动态配置的开源工具。
探索Attu——一款用于直观管理 Milvus 的开源图形界面工具。