使用 Helm 图表升级 Milvus 群集
本指南介绍如何使用 Milvus Helm 图表升级 Milvus 集群。
前提条件
- Helm 版本 >= 3.14.0
- Kubernetes 版本 >= 1.20.0
自 Milvus Helm 图表 4.2.21 版起,我们引入了 pulsar-v3.x 图表作为依赖。为了向后兼容,请将 Helm 升级到 v3.14 或更高版本,并确保在使用helm upgrade 时添加--reset-then-reuse-values 选项。
检查 Milvus Helm 图表
运行以下命令检查新的 Milvus 版本。
$ helm repo update zilliztech
$ helm search repo zilliztech/milvus --versions
https://milvus-io.github.io/milvus-helm/ 上的 Milvus Helm Charts repo 已归档,您可以从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 --reset-then-reuse-values
归档软件源仍可用于 4.0.31 之前的图表。对于后续版本,请使用新版本库。
NAME CHART VERSION APP VERSION DESCRIPTION
zilliztech/milvus 4.1.34 2.4.5 Milvus is an open-source vector database built ...
zilliztech/milvus 4.1.33 2.4.4 Milvus is an open-source vector database built ...
zilliztech/milvus 4.1.32 2.4.3 Milvus is an open-source vector database built ...
zilliztech/milvus 4.1.31 2.4.1 Milvus is an open-source vector database built ...
zilliztech/milvus 4.1.30 2.4.1 Milvus is an open-source vector database built ...
zilliztech/milvus 4.1.29 2.4.0 Milvus is an open-source vector database built ...
zilliztech/milvus 4.1.24 2.3.11 Milvus is an open-source vector database built ...
zilliztech/milvus 4.1.23 2.3.10 Milvus is an open-source vector database built ...
zilliztech/milvus 4.1.22 2.3.10 Milvus is an open-source vector database built ...
zilliztech/milvus 4.1.21 2.3.10 Milvus is an open-source vector database built ...
zilliztech/milvus 4.1.20 2.3.10 Milvus is an open-source vector database built ...
zilliztech/milvus 4.1.18 2.3.10 Milvus is an open-source vector database built ...
zilliztech/milvus 4.1.18 2.3.9 Milvus is an open-source vector database built ...
zilliztech/milvus 4.1.17 2.3.8 Milvus is an open-source vector database built ...
zilliztech/milvus 4.1.16 2.3.7 Milvus is an open-source vector database built ...
zilliztech/milvus 4.1.15 2.3.5 Milvus is an open-source vector database built ...
zilliztech/milvus 4.1.14 2.3.6 Milvus is an open-source vector database built ...
zilliztech/milvus 4.1.13 2.3.5 Milvus is an open-source vector database built ...
zilliztech/milvus 4.1.12 2.3.5 Milvus is an open-source vector database built ...
zilliztech/milvus 4.1.11 2.3.4 Milvus is an open-source vector database built ...
zilliztech/milvus 4.1.10 2.3.3 Milvus is an open-source vector database built ...
zilliztech/milvus 4.1.9 2.3.3 Milvus is an open-source vector database built ...
zilliztech/milvus 4.1.8 2.3.2 Milvus is an open-source vector database built ...
zilliztech/milvus 4.1.7 2.3.2 Milvus is an open-source vector database built ...
zilliztech/milvus 4.1.6 2.3.1 Milvus is an open-source vector database built ...
zilliztech/milvus 4.1.5 2.3.1 Milvus is an open-source vector database built ...
zilliztech/milvus 4.1.4 2.3.1 Milvus is an open-source vector database built ...
zilliztech/milvus 4.1.3 2.3.1 Milvus is an open-source vector database built ...
zilliztech/milvus 4.1.2 2.3.1 Milvus is an open-source vector database built ...
zilliztech/milvus 4.1.1 2.3.0 Milvus is an open-source vector database built ...
zilliztech/milvus 4.1.0 2.3.0 Milvus is an open-source vector database built ...
您可以按以下方式选择 Milvus 的升级路径:
- 进行滚动升级](#Conduct-a-rolling-upgrade) 从 Milvus v2.2.3 及以后的版本升级到 v2.4.23。
-
使用 Helm 升级 Milvus,从 v2.2.3 之前的次版本升级到 v2.4.23。
-
在从 Milvus v2.1.x 升级到 v2.4.23 之前迁移元数据。
进行滚动升级
自 Milvus 2.2.3 起,您可以将 Milvus 协调器配置为主动待机模式,并为其启用滚动升级功能,这样 Milvus 就能在协调器升级期间响应传入的请求。在以前的版本中,升级时需要移除协调器,然后再创建协调器,这可能会导致服务出现一定的停机时间。
滚动升级要求协调程序以活动-待机模式工作。您可以使用我们提供的脚本将协调程序配置为活动-待机模式,然后开始滚动升级。
基于 Kubernetes 提供的滚动更新功能,上述脚本会根据部署的依赖关系对部署进行有序更新。此外,Milvus 还实现了一种机制,确保其组件在升级期间与依赖它们的组件保持兼容,从而大大减少了潜在的服务停机时间。
该脚本仅适用于升级与 Helm 一起安装的 Milvus。下表列出了脚本中可用的命令标志。
| 参数 | 说明 | 默认值 | 需要 |
|---|---|---|---|
i | Milvus 实例名称 | None | 为真 |
n | Milvus 安装的命名空间 | default | 假 |
t | Milvus 目标版本 | None | 真 |
w | 新的 Milvus 图像标签 | milvusdb/milvus:v2.2.3 | 真 |
o | 操作符 | update | 假 |
确保 Milvus 实例中的所有部署都处于正常状态后。可以运行以下命令将 Milvus 实例升级到 2.4.23。
sh rollingUpdate.sh -n default -i my-release -o update -t 2.4.23 -w 'milvusdb/milvus:v2.4.23'
- 脚本硬编码了部署的升级顺序,不可更改。
- 脚本使用
kubectl patch更新部署,使用kubectl rollout status观察部署状态。 - 脚本使用
kubectl patch将部署的app.kubernetes.io/version标签更新为命令中-t标志后指定的标签。
使用 Helm 升级 Milvus
要将 Milvus 从 v2.2.3 之前的次版本升级到最新版本,请运行以下命令:
helm repo update zilliztech
helm upgrade my-release zilliztech/milvus --reset-then-reuse-values --version=4.1.24 # use the helm chart version here
在前面的命令中使用 Helm 图表版本。有关如何获取 Helm 图表版本的详细信息,请参阅检查 Milvus 版本。
迁移元数据
自 Milvus 2.2.0 起,元数据与之前版本的元数据不兼容。以下示例片段假定从 Milvus 2.1.4 升级到 Milvus 2.2.0。
1.检查 Milvus 版本
运行$ helm list 检查 Milvus 应用程序版本。您可以看到APP VERSION 是 2.1.4。
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
new-release default 1 2022-11-21 15:41:25.51539 +0800 CST deployed milvus-3.2.18 2.1.4
2.检查正在运行的 pod
运行$ kubectl get pods 检查正在运行的 pod。您可以看到以下输出。
NAME READY STATUS RESTARTS AGE
my-release-etcd-0 1/1 Running 0 21m
my-release-etcd-1 1/1 Running 0 21m
my-release-etcd-2 1/1 Running 0 21m
my-release-milvus-datacoord-664c58798d-fl75s 1/1 Running 0 21m
my-release-milvus-datanode-5f75686c55-xfg2r 1/1 Running 0 21m
my-release-milvus-indexcoord-5f98b97589-2l48r 1/1 Running 0 21m
my-release-milvus-indexnode-857b4ddf98-vmd75 1/1 Running 0 21m
my-release-milvus-proxy-6c548f787f-scspp 1/1 Running 0 21m
my-release-milvus-querycoord-c454f44cd-dwmwq 1/1 Running 0 21m
my-release-milvus-querynode-76bb4946d-lbrz6 1/1 Running 0 21m
my-release-milvus-rootcoord-7764c5b686-62msm 1/1 Running 0 21m
my-release-minio-0 1/1 Running 0 21m
my-release-minio-1 1/1 Running 0 21m
my-release-minio-2 1/1 Running 0 21m
my-release-minio-3 1/1 Running 0 21m
my-release-pulsar-bookie-0 1/1 Running 0 21m
my-release-pulsar-bookie-1 1/1 Running 0 21m
my-release-pulsar-bookie-2 1/1 Running 0 21m
my-release-pulsar-bookie-init-tjxpj 0/1 Completed 0 21m
my-release-pulsar-broker-0 1/1 Running 0 21m
my-release-pulsar-proxy-0 1/1 Running 0 21m
my-release-pulsar-pulsar-init-c8vvc 0/1 Completed 0 21m
my-release-pulsar-recovery-0 1/1 Running 0 21m
my-release-pulsar-zookeeper-0 1/1 Running 0 21m
my-release-pulsar-zookeeper-1 1/1 Running 0 20m
my-release-pulsar-zookeeper-2 1/1 Running 0 20m
3.检查图像标签
检查 podmy-release-milvus-proxy-6c548f787f-scspp 的图像标签。您可以看到 Milvus 集群的版本是 v2.1.4。
$ kubectl get pods my-release-milvus-proxy-6c548f787f-scspp -o=jsonpath='{$.spec.containers[0].image}'
# milvusdb/milvus:v2.1.4
4.迁移元数据
Milvus 2.2 的一个主要变化是段索引的元数据结构。因此,当 Milvus 从 v2.1.x 升级到 v2.2.0 时,你需要使用 Helm 来迁移元数据。 这里有一个脚本供你安全迁移元数据。
此脚本仅适用于安装在 K8s 集群上的 Milvus。如果过程中出现错误,请先使用回滚操作符回滚到之前的版本。
下表列出了元数据迁移的操作符。
| 参数 | 说明 | 默认值 | 需要 |
|---|---|---|---|
i | Milvus 实例名称。 | None | 真 |
n | Milvus 安装的命名空间。 | default | 假 |
s | Milvus 源版本。 | None | 真 |
t | 目标 Milvus 版本。 | None | 目标版本 |
r | Milvus 元的根路径。 | by-dev | 假 |
w | 新的 Milvus 图像标签。 | milvusdb/milvus:v2.2.0 | 假 |
m | 元迁移图像标签。 | milvusdb/meta-migration:v2.2.0 | 假 |
o | 元迁移操作符。 | migrate | 假 |
d | 迁移完成后是否删除迁移 pod。 | false | 否 |
c | 元迁移 pvc 的存储类别。 | default storage class | 假 |
e | Milvus 使用的 etcd enpoint。 | etcd svc installed with milvus | 错误 |
1.迁移元数据
- 下载迁移脚本。
- 停止 Milvus 组件。Milvus etcd 中的任何实时会话都可能导致迁移失败。
- 创建 Milvus 元数据备份。
- 迁移 Milvus 元数据。
- 使用新镜像启动 Milvus 组件。
2.将 Milvus 从 2.1.x 版升级到 2.2.0 版
以下命令假定你将 Milvus 从 v2.1.4 升级到 2.2.0。请将它们更改为适合你需要的版本。
-
指定 Milvus 实例名称、源 Milvus 版本和目标 Milvus 版本。
./migrate.sh -i my-release -s 2.1.4 -t 2.2.0 -
如果你的 Milvus 没有安装在默认的 K8s 命名空间,请用
-n指定命名空间。./migrate.sh -i my-release -n milvus -s 2.1.4 -t 2.2.0 -
如果 Milvus 安装的是自定义
rootpath,请用-r指定根路径。./migrate.sh -i my-release -n milvus -s 2.1.4 -t 2.2.0 -r by-dev -
如果你的 Milvus 安装的是自定义
image,请用-w指定图片标签。./migrate.sh -i my-release -n milvus -s 2.1.4 -t 2.2.0 -r by-dev -w milvusdb/milvus:v2.2.0 -
如果想在迁移完成后自动移除迁移 pod,请设置
-d true。./migrate.sh -i my-release -n milvus -s 2.1.4 -t 2.2.0 -w milvusdb/milvus:v2.2.0 -d true -
如果迁移失败,请回滚并重新迁移。
./migrate.sh -i my-release -n milvus -s 2.1.4 -t 2.2.0 -r by-dev -o rollback -w milvusdb/milvus:v2.1.4
./migrate.sh -i my-release -n milvus -s 2.1.4 -t 2.2.0 -r by-dev -o migrate -w milvusdb/milvus:v2.2.0