使用 Helm 在 Kubernetes 中运行 Milvus
本页说明如何使用 Milvus Helm Chart 在 Kubernetes 中启动 Milvus 实例。
概述
Helm 使用名为 Chart 的打包格式。Chart 是一组用于描述相关 Kubernetes 资源的文件。Milvus 提供了一组 Helm Charts,可帮助您部署 Milvus 依赖项和组件。
前提条件
-
安装 StorageClass。您可以按以下步骤检查已安装的 StorageClass。
$ kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBIINDINGMODE ALLOWVOLUMEEXPANSION AGE
standard (default) k8s.io/minikube-hostpath Delete Immediate false -
安装前检查 硬件和软件要求。
-
安装 Milvus 之前,建议使用 Milvus Sizing Tool,根据数据大小估算硬件需求。这有助于确保 Milvus 安装的最佳性能和资源分配。
如果在拉取镜像时遇到问题,请通过 community@zilliz.com 联系我们并提供问题详情,我们将为你提供支持。
安装 Milvus Helm Chart
在安装 Milvus Helm Chart 之前,您需要添加 Milvus Helm Chart 仓库。
helm repo add milvus https://zilliztech.github.io/milvus-helm/
位于 https://github.com/milvus-io/milvus-helm 的 Milvus Helm Chart 仓库已经存档,您可以从 https://github.com/zilliztech/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 Chart。对于以后的版本,请使用新仓库。
然后从仓库获取 Milvus Helm Chart,如下所示:
helm repo update
你可以随时运行此命令获取最新的 Milvus Helm Chart。
在线安装
1. 部署 Milvus 集群
安装好 Helm Chart 后,就可以在 Kubernetes 上启动 Milvus 了。本节将指导你完成启动 Milvus 的步骤。
helm install my-release milvus/milvus
在上述命令中,my-release 是 release name,milvus/milvus 是本地安装的 Helm Chart 仓库。要使用其他名称,请将 my-release 替换为您认为合适的名称。
上述命令使用默认配置部署 Milvus 集群及其组件和依赖项。要自定义这些设置,我们建议你使用 Milvus Sizing Tool,根据实际数据大小调整配置,然后下载相应的 YAML 文件。要了解有关配置参数的更多信息,请参阅 Milvus 系统配置检查表。
- release name 只能包含字母、数字和破折号。release name 中不允许使用点。
- 在使用 Helm 安装 Milvus 时,默认命令行会安装集群版本的 Milvus。独立安装 Milvus 时需要进一步设置。
- 根据 Kubernetes 过时的 API 迁移指南,自 v1.25 起,PodDisruptionBudget 的 policy/v1beta1 API 版本不再提供服务。建议迁移清单和 API 客户端,改用 policy/v1 API 版本。
对于仍在 Kubernetes v1.25 及更高版本上使用 PodDisruptionBudget 的 policy/v1beta1 API 版本的用户,作为一种变通方法,您可以运行以下命令来安装 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。
2. 检查 Milvus 集群状态
运行以下命令检查 Milvus 集群中所有 pod 的状态。
kubectl get pods
一旦所有 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-indexnode-5c5f7b5bd9-l8hjg 1/1 Running 0 3m24s
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-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
3. 将本地端口转发给 Milvus
运行以下命令获取 Milvus 集群的服务端口。
kubectl get pod my-release-milvus-proxy-6bd7f5587-ds2xv --template
='{{(index (index .spec.containers 0).ports 0).containerPort}}{{"\n"}}'
19530
输出结果显示,Milvus 实例的默认端口为 19530。
如果以独立模式部署了 Milvus,请将 pod 名称从 my-release-milvus-proxy-xxxxxxxxxx-xxxxx 更改为 my-release-milvus-xxxxxxxxxx-xxxxx。
然后,运行以下命令将本地端口转发到 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 集群。
1. 获取 Milvus 清单
运行以下命令获取 Milvus 清单。
helm template my-release milvus/milvus > milvus_manifest.yaml
上述命令会渲染 Milvus 集群的 Chart 模板,并将输出保存到名为 milvus_manifest.yaml 的清单文件中。使用此清单,你可以在单独的 pod 中安装 Milvus 集群及其组件和依赖项。
- 要在独立模式下安装 Milvus 实例(所有 Milvus 组件都包含在一个 pod 中),应改成运行
helm template my-release --set cluster.enabled=false --set etcd.replicaCount=1 --set minio.mode=standalone --set pulsar.enabled=false milvus/milvus > milvus_manifest.yaml,为独立模式下的 Milvus 实例渲染 Chart 模板。 - 要更改 Milvus 配置,请下载
value.yaml模板,将所需设置放入其中,然后使用helm template -f values.yaml my-release milvus/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
卸载 Milvus
运行以下命令卸载 Milvus。
helm uninstall my-release
下一步
在 Docker 中安装 Milvus 后,你可以
-
查看 Hello Milvus,了解 Milvus 的功能。
-
了解 Milvus 的基本操作:
-
在云上部署你的 Milvus 集群:
-
探索 Milvus 备份,一个用于 Milvus 数据备份的开源工具。
-
探索 Birdwatcher,用于调试 Milvus 和动态配置更新的开源工具。
-
探索 Attu,一款用于直观管理 Milvus 的开源图形用户界面工具。