使用 Milvus Operator 升级 Milvus Standalone
本指南介绍如何使用 Milvus Operator 升级 Milvus Standalone。
升级 Milvus Operator
运行以下命令将您的 Milvus Operator 版本升级到 v1.2.0。
helm repo add zilliztech-milvus-operator https://zilliztech.github.io/milvus-operator/
helm repo update zilliztech-milvus-operator
helm -n milvus-operator upgrade milvus-operator zilliztech-milvus-operator/milvus-operator
将 Milvus Operator 升级到最新版本后,您有以下选择:
- 要将 Milvus 从版本 2.2.3 或更高 版本升级 到 2.5.27,可以 进行滚动升级。
- 要将 Milvus 从 v2.2.3 之前的次版本升级到 2.5.27,建议你 通过更改镜像版本来升级 Milvus。
- 要将 Milvus 从 v2.1.x 升级到 2.5.27,需要在实际升级前 迁移元数据。
进行滚动升级
自 Milvus 2.2.3 版起,你可以将 Milvus Coordinator 配置为主动待机模式,并为它们启用滚动升级功能,这样 Milvus 就能在 Coordinator 升级期间响应传入的请求。在以前的版本中,升级时需要移除 Coordinator,然后再创建 Coordinator,这可能会导致服务出现一定程度的停机。
基于 Kubernetes 提供的滚动更新功能,Milvus Operator 会根据部署的依赖关系强制执行有序更新。此外,Milvus 还实施了一种机制,确保其组件在升级期间与依赖于它们的组件保持兼容,从而大大减少了潜在的服务停机时间。
滚动升级功能默认为禁用。你需要通过配置文件明确启用它。
apiVersion: milvus.io/v1beta1
kind: Milvus
metadata:
name: my-release
spec:
components:
enableRollingUpdate: true
imageUpdateMode: rollingUpgrade # Default value, can be omitted
image: milvusdb/milvus:v2.5.27
在上述配置文件中,将 spec.components.enableRollingUpdate 设置为 true,将 spec.components.image 设置为所需的 Milvus 版本。
默认情况下,Milvus 会以有序的方式对 Coordinator 进行滚动升级,即逐个替换 Coordinator pod 镜像。要缩短升级时间,可以考虑将 spec.components.imageUpdateMode 设置为 all,这样 Milvus 就会同时替换所有 pod 镜像。
apiVersion: milvus.io/v1beta1
kind: Milvus
metadata:
name: my-release
spec:
components:
enableRollingUpdate: true
imageUpdateMode: all
image: milvusdb/milvus:v2.5.27
可以将 spec.components.imageUpdateMode 设置为 rollingDowngrade,让 Milvus 用较低的版本替换 Coordinator pod 镜像。
apiVersion: milvus.io/v1beta1
kind: Milvus
metadata:
name: my-release
spec:
components:
enableRollingUpdate: true
imageUpdateMode: rollingDowngrade
image: milvusdb/milvus:<some-older-version>
然后将配置保存为 YAML 文件(例如 milvusupgrade.yaml),并将此配置文件修补到 Milvus 实例中,如下所示:
kubectl patch -f milvusupgrade.yaml --patch-file milvusupgrade.yaml --type merge
通过更改镜像升级 Milvus
在正常情况下,你可以通过更改镜像将你的 Milvus 升级到最新版本。但要注意的是,用这种方法升级 Milvus 时会有一定的停机时间。
编写如下配置文件,并将其保存为 milvusupgrade.yaml:
apiVersion: milvus.io/v1beta1
kind: Milvus
metadata:
name: my-release
labels:
app: milvus
spec:
# Omit other fields ...
components:
image: milvusdb/milvus:v2.5.27
然后运行以下命令执行升级:
kubectl patch -f milvusupgrade.yaml --patch-file milvusupgrade.yaml --type merge
迁移元数据
自 Milvus 2.2.0 起,元数据与以前版本的元数据不兼容。以下示例片段假定从 Milvus 2.1.4 升级到 Milvus v2.5.27。
1. 创建用于元数据迁移的 .yaml 文件
创建元数据迁移文件。下面是一个示例。需要在配置文件中指定 name、sourceVersion 和 targetVersion。下面的示例将 name 设置为 my-release-upgrade,将 sourceVersion 设置为 v2.1.4,将 targetVersion 设置为 v2.5.27。这意味着你的 Milvus 实例将从 v2.1.4 升级到 v2.5.27。
apiVersion: milvus.io/v1beta1
kind: MilvusUpgrade
metadata:
name: my-release-upgrade
spec:
milvus:
namespace: default
name: my-release
sourceVersion: "v2.1.4"
targetVersion: "v2.5.27"
# below are some omit default values:
# targetImage: "milvusdb/milvus:v2.5.27"
# toolImage: "milvusdb/meta-migration:v2.2.0"
# operation: upgrade
# rollbackIfFailed: true
# backupPVC: ""
# maxRetry: 3
2.2. 应用新配置
运行以下命令应用新配置。
kubectl create -f https://raw.githubusercontent.com/zilliztech/milvus-operator/main/config/samples/milvusupgrade.yaml
3.3. 检查元数据迁移状态
运行以下命令检查元数据迁移的状态。
kubectl describe milvus release-name
输出中的状态为 ready 意味着元数据迁移成功。
或者,也可以运行 kubectl get pod 检查所有 pod。如果所有 pod 都是 ready,则元数据迁移成功。
4. 删除 my-release-upgrade
升级成功后,删除 YAML 文件中的 my-release-upgrade。