使用 Helm Chart 在支持 GPU 的情况下运行 Milvus
本页说明如何使用 Helm Chart 启动支持 GPU 的 Milvus 实例。
概述
Helm 使用一种称为图表的打包格式。图表是描述一组相关 Kubernetes 资源的文件 Collection。Milvus 提供了一组图表来帮助你部署 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 图表
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 允许您为 Milvus 分配一个或多个 GPU 设备。
1.分配单个 GPU 设备
支持 GPU 的 Milvus 允许您分配一个或多个 GPU 设备。
Milvus 集群
cat <<EOF > custom-values.yaml indexNode: 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.yaml
独立的 Milvus
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 pulsar.enabled=false -f custom-values.yaml
2.分配多个 GPU 设备
除了单个 GPU 设备,您还可以为 Milvus 分配多个 GPU 设备。
Milvus 集群
cat <<EOF > custom-values.yaml indexNode: resources: requests: nvidia.com/gpu: "2" limits: nvidia.com/gpu: "2" queryNode: resources: requests: nvidia.com/gpu: "2" limits: nvidia.com/gpu: "2" EOF
在上述配置中,索引节点和查询节点共享两个 GPU。要为索引节点和查询节点分配不同的 GPU,可以通过在配置文件中设置
extraEnv
来相应修改配置,具体如下:cat <<EOF > custom-values.yaml indexNode: 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 时需要进一步设置。
- 根据Kuberenetes 的废弃 API 迁移指南,PodDisruptionBudget 的policy/v1beta1API 版本自 v1.25 起不再提供服务。建议您迁移清单和 API 客户端,改用policy/v1API 版本。
对于仍在 Kuberenetes 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 图表和Helm了解更多信息。
Milvus 单机版
cat <<EOF > custom-values.yaml indexNode: resources: requests: nvidia.com/gpu: "2" limits: nvidia.com/gpu: "2" queryNode: resources: requests: nvidia.com/gpu: "2" limits: nvidia.com/gpu: "2" EOF
在上述配置中,索引节点(indexNode)和查询节点(queryNode)共享两个 GPU。要为 indexNode 和 queryNode 分配不同的 GPU,可以通过在配置文件中设置 extraEnv 来相应修改配置,如下所示:
cat <<EOF > custom-values.yaml indexNode: 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 pulsar.enabled=false -f custom-values.yaml
2.检查 Milvus 状态
运行以下命令检查 Milvus 状态:
$ kubectl get pods
Milvus 启动后,READY
列会显示所有 pod 的1/1
。
Milvus 集群
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-datacoord-6fd4bd885c-gkzwx 1/1 Running 0 3m23s my-release-milvus-datanode-68cb87dcbd-4khpm 1/1 Running 0 3m23s my-release-milvus-indexcoord-5bfcf6bdd8-nmh5l 1/1 Running 0 3m23s my-release-milvus-indexnode-5c5f7b5bd9-l8hjg 1/1 Running 0 3m24s my-release-milvus-proxy-6bd7f5587-ds2xv 1/1 Running 0 3m24s my-release-milvus-querycoord-579cd79455-xht5n 1/1 Running 0 3m24s my-release-milvus-querynode-5cd8fff495-k6gtg 1/1 Running 0 3m24s my-release-milvus-rootcoord-7fb9488465-dmbbj 1/1 Running 0 3m23s 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 my-release-pulsar-autorecovery-86f5dbdf77-lchpc 1/1 Running 0 3m24s my-release-pulsar-bookkeeper-0 1/1 Running 0 3m23s my-release-pulsar-bookkeeper-1 1/1 Running 0 98s my-release-pulsar-broker-556ff89d4c-2m29m 1/1 Running 0 3m23s my-release-pulsar-proxy-6fbd75db75-nhg4v 1/1 Running 0 3m23s my-release-pulsar-zookeeper-0 1/1 Running 0 3m23s my-release-pulsar-zookeeper-metadata-98zbr 0/1 Completed 0 3m24s
Milvus 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 名称替换 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 Web UI 采用简单直观的界面,增强了系统的可观察性。你可以使用 Milvus Web UI 观察 Milvus 组件和依赖关系的统计和指标,检查数据库和 Collections 的详细信息,并列出详细的 Milvus 配置。有关 Milvus Web UI 的详细信息,请参阅Milvus WebUI。
要启用对 Milvus Web UI 的访问,需要将代理 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 Web UI。
卸载 Milvus
运行以下命令卸载 Milvus。
$ helm uninstall my-release
下一步
安装 Milvus 后,您可以
查看快速入门,了解 Milvus 的功能。
学习 Milvus 的基本操作:
在云上部署你的 Milvu 集群:
探索Milvus WebUI,一个用于 Milvus 可观察性和管理的直观 Web 界面。
探索Milvus 备份,一个用于 Milvus 数据备份的开源工具。
探索Birdwatcher,用于调试 Milvus 和动态配置更新的开源工具。
探索Attu,一个用于直观管理 Milvus 的开源图形用户界面工具。