milvus-logo
LFAI
首页
  • 开始

使用 Helm 在 Kubernetes 中运行 Milvus

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

概述

Helm 使用一种称为图表的打包格式。图表是描述一组相关 Kubernetes 资源的文件集合。Milvus 提供了一组图表,可帮助您部署 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 舵手图

在安装 Milvus Helm 图表之前,您需要添加 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 之前的图表。对于以后的版本,请使用新版本库。

然后从软件源中获取 Milvus 图表,如下所示:

$ helm repo update

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

在线安装

1.部署 Milvus 集群

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

$ helm install my-release milvus/milvus

在上述命令中,my-release 是版本名称,milvus/milvus 是本地安装的图表版本库。要使用其他名称,请将my-release 替换为您认为合适的名称。

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

  • 版本名称只能包含字母、数字和破折号。版本名称中不允许使用点。
  • 使用 Helm 安装 Milvus 时,默认命令行安装群集版本的 Milvus。独立安装 Milvus 时需要进一步设置。
  • 根据Kubernetes 过时的 API 迁移指南,PodDisruptionBudget 的policy/v1beta1API 版本自 v1.25 起不再提供服务。建议您迁移清单和 API 客户端,改用policy/v1API 版本。
    对于仍在 Kubernetes 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 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

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 群集的图表模板,并将输出保存到名为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 实例渲染图表模板。
  • 要更改 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 后,你可以