跳到主要内容
版本:v2.4.x

使用 Helm 在 Kubernetes 中运行 Milvus

本页说明如何使用 Milvus Helm Chart 在 Kubernetes 中启动 Milvus 实例。

概述

Helm 使用名为 Chart 的打包格式。Chart 是一组用于描述相关 Kubernetes 资源的文件。Milvus 提供了一组 Helm Charts,可帮助您部署 Milvus 依赖项和组件。

前提条件

  • 安装 Helm CLI

  • 创建 K8s 集群

  • 安装 StorageClass。您可以按以下步骤检查已安装的 StorageClass。

    Text
    $ 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 仓库。

Shell
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 获取进一步更新,具体如下:

Shell
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,如下所示:

Shell
helm repo update

你可以随时运行此命令获取最新的 Milvus Helm Chart。

在线安装

1. 部署 Milvus 集群

安装好 Helm Chart 后,就可以在 Kubernetes 上启动 Milvus 了。本节将指导你完成启动 Milvus 的步骤。

Shell
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 ChartHelm

2. 检查 Milvus 集群状态

运行以下命令检查 Milvus 集群中所有 pod 的状态。

Shell
kubectl get pods

一旦所有 pod 都在运行,上述命令的输出应与下图类似:

Text
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 集群的服务端口。

Shell
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 服务的端口。

Shell
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 地址。

Shell
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 清单。

Shell
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 文件中列出的依赖项。

Shell
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. 拉取并保存镜像

运行以下命令拉取并保存所需镜像。

Shell
pip3 install -r requirements.txt
python3 save_image.py --manifest milvus_manifest.yaml

镜像会被拉取到当前目录下名为 images 的子目录中。

4. 加载镜像

现在,你可以按以下方式将镜像加载到网络受限环境中的主机:

Shell
for image in $(find . -type f -name "*.tar.gz") ; do gunzip -c $image | docker load; done

5. 部署 Milvus

Shell
kubectl apply -f milvus_manifest.yaml

到此为止,你可以按照在线安装的步骤 23 检查集群状态,并将本地端口转发给 Milvus。

升级运行中的 Milvus 集群

运行以下命令将正在运行的 Milvus 集群升级到最新版本:

Shell
helm repo update
helm upgrade my-release zilliztech/milvus

卸载 Milvus

运行以下命令卸载 Milvus。

Shell
helm uninstall my-release

下一步

在 Docker 中安装 Milvus 后,你可以