跳到主要内容

使用 Helm 在 Kubernetes 中运行 Milvus

本页介绍如何使用 Milvus Helm charts 在 Kubernetes 中启动 Milvus 实例。

概述

Helm 使用一种称为 charts 的打包格式。chart 是一组描述相关 Kubernetes 资源的文件。Milvus 提供了一组 charts 来帮助您部署 Milvus 的依赖组件。

前提条件

  • 安装 Helm CLI

  • 创建 K8s 集群

  • 安装 StorageClass。您可以按如下方式检查已安装的 StorageClass:

    $ kubectl get sc

    NAME PROVISIONER RECLAIMPOLICY VOLUMEBIINDINGMODE ALLOWVOLUMEEXPANSION AGE
    standard (default) k8s.io/minikube-hostpath Delete Immediate false
  • 安装前请检查硬件和软件要求

  • 在安装 Milvus 之前,建议使用 Milvus 规模估算工具 根据您的数据规模估算硬件需求。这有助于确保 Milvus 安装的最佳性能和资源分配。

如果您在拉取镜像时遇到任何问题,请发送邮件至 community@zilliz.com,说明问题详情,我们将为您提供必要的支持。

安装 Milvus Helm Chart

在安装 Milvus Helm Charts 之前,您需要添加 Milvus Helm 仓库。

$ helm repo add milvus https://zilliztech.github.io/milvus-helm/

位于 https://github.com/milvus-io/milvus-helm 的 Milvus Helm Charts 仓库已被归档,您可以从 https://github.com/zilliztech/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。对于更新的版本,请使用新仓库。

然后从仓库中获取 Milvus charts:

$ helm repo update

您可以随时运行此命令来获取最新的 Milvus Helm charts。

在线安装

1. 部署 Milvus 集群

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

$ helm install my-release milvus/milvus

在上述命令中,my-release 是发布名称,milvus/milvus 是本地安装的 chart 仓库。如果要使用不同的名称,请将 my-release 替换为您认为合适的名称。

上述命令使用默认配置部署 Milvus 集群及其组件和依赖项。要自定义这些设置,我们建议您使用 Milvus 规模估算工具 根据实际数据规模调整配置,然后下载相应的 YAML 文件。要了解更多配置参数,请参考 Milvus 系统配置清单

  • 发布名称只能包含字母、数字和破折号。不允许使用点号。
  • 使用 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 ChartHelm

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

您还可以访问 http://127.0.0.1:9091/webui/ 了解更多关于您的 Milvus 实例的信息。详情请参考 Milvus WebUI

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

访问 Milvus WebUI

Milvus 附带了一个名为 Milvus WebUI 的内置 GUI 工具,您可以通过浏览器访问它。Milvus Web UI 通过简单直观的界面增强了系统的可观察性。您可以使用 Milvus Web UI 观察 Milvus 组件和依赖项的统计信息和指标,检查数据库和集合详情,并列出详细的 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 集群。

1. 获取 Milvus 清单

运行以下命令获取 Milvus 清单。

$ helm template my-release milvus/milvus > milvus_manifest.yaml

上述命令为 Milvus 集群渲染 chart 模板,并将输出保存到名为 milvus_manifest.yaml 的清单文件中。使用此清单,您可以安装 Milvus 集群及其组件和依赖项,每个组件都在单独的 pod 中。

  • 要在单机模式下安装 Milvus 实例(所有 Milvus 组件都包含在单个 pod 中),您应该运行 helm template my-release --set cluster.enabled=false --set etcd.replicaCount=1 --set minio.mode=standalone --set pulsarv3.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

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

升级运行中的 Milvus 集群

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

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

卸载 Milvus

运行以下命令卸载 Milvus。

$ helm uninstall my-release

下一步

在 Docker 中安装 Milvus 后,您可以: