使用 Helm Chart 安装支持 GPU 的 Milvus
本页介绍如何使用 Helm Chart 启动支持 GPU 的 Milvus 实例。
概述
Helm 使用一种称为 charts 的打包格式。chart 是一组描述相关 Kubernetes 资源的文件。Milvus 提供了一组 charts 来帮助您部署 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
# 升级现有的 helm release
helm upgrade my-release zilliztech/milvus
归档的仓库仍然可用于 4.0.31 及之前的版本。对于之后的版本,请使用新的仓库。
- 更新本地 charts。
$ helm repo update
启动 Milvus
安装 Helm chart 后,您可以在 Kubernetes 上启动 Milvus。在本节中,我们将指导您完成启动支持 GPU 的 Milvus 的步骤。
您应该通过指定 release 名称、chart 和您期望更改的参数来使用 Helm 启动 Milvus。在本指南中,我们使用 my-release
作为 release 名称。要使用不同的 release 名称,请将以下命令中的 my-release
替换为您使用的名称。
Milvus 允许您为 Milvus 分配一个或多个 GPU 设备。
1. 分配单个 GPU 设备
Milvus 支持 GPU 允许您分配一个或多个 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 pulsarv3.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在上述配置中,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 -f custom-values.yaml
- release 名称只能包含字母、数字和破折号。不允许使用点号。
- 使用 Helm 安装 Milvus 时,默认命令行安装的是集群版 Milvus。安装 Milvus 单机版需要额外设置。
- 根据 Kubernetes 的 API 弃用指南,从 v1.25 版本开始,不再提供 policy/v1beta1 API 版本的 PodDisruptionBudget。建议将清单和 API 客户端迁移到使用 policy/v1 API 版本。
对于仍在 Kubernetes v1.25 及更高版本上使用 policy/v1beta1 API 版本的 PodDisruptionBudget 的用户,可以运行以下命令作为临时解决方案来安装 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 单机版
cat <<EOF > custom-values.yaml
standalone:
resources:
requests:
nvidia.com/gpu: "2"
limits:
nvidia.com/gpu: "2"
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
检查正在运行的 pod 的状态:
$ kubectl get pods
当所有 pod 都在运行时,READY
列显示 1/1
。
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
连接到 Milvus
验证 Milvus 服务器正在监听哪个本地端口。用您自己的 pod 名称替换。
$ kubectl get pod my-release-milvus-standalone-54c4f88cb9-f84pf --template='{{(index (index .spec.containers 0).ports 0).containerPort}}{{"\n"}}'
19530
打开一个新的终端并运行以下命令,将本地端口转发到 Milvus 使用的端口。您也可以省略指定的端口,使用 :19530
让 kubectl
为您分配一个本地端口,这样您就不必管理端口冲突。
$ kubectl port-forward service/my-release-milvus 27017:19530
Forwarding from 127.0.0.1:27017 -> 19530
默认情况下,由 kubectl 转发的端口只监听 localhost。如果您希望 Milvus 服务器监听选定的 IP 或所有地址,请使用 address
标志。
$ kubectl port-forward --address 0.0.0.0 service/my-release-milvus 27017:19530
Forwarding from 0.0.0.0:27017 -> 19530
卸载 Milvus
运行以下命令卸载 Milvus。
$ helm uninstall my-release
停止 K8s 集群
停止集群和 minikube VM,但不删除您创建的资源。
$ minikube stop
运行 minikube start
重启集群。
删除 K8s 集群
在删除集群和所有资源之前,运行 $ kubectl logs
获取 pod 的 pod_name
stderr
日志。
删除集群、minikube VM 和您创建的所有资源,包括持久卷。
$ minikube delete
下一步
安装 Milvus 后,您可以:
-
查看 Hello Milvus 了解 Milvus 的功能。
-
学习 Milvus 的基本操作:
-
在云上部署 Milvus 集群:
-
探索 Milvus WebUI,一个用于 Milvus 可观察性和管理的直观 Web 界面。
-
探索 Milvus Backup,一个用于 Milvus 数据备份的开源工具。
-
探索 Birdwatcher,一个用于调试 Milvus 和动态配置更新的开源工具。
-
探索 Attu,一个用于直观管理 Milvus 的开源 GUI 工具。