Milvus OperatorによるMilvusスタンドアロンのアップグレード
このガイドでは、Milvus OperatorでMilvusスタンドアロンをアップグレードする方法について説明します。
Milvusオペレータのアップグレード
以下のコマンドを実行し、Milvus operatorのバージョンをv1.0.1にアップグレードしてください。
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オペレータを最新バージョンにアップグレードすると、以下の選択肢があります:
- Milvusをv2.2.3またはそれ以降のリリースから2.4.17にアップグレードするには、ローリングアップグレードを行います。
- Milvusをv2.2.3以前のマイナーリリースから2.4.17にアップグレードする場合、Milvusのイメージバージョンを変更してアップグレードすることをお勧めします。
- Milvusをv2.1.xから2.4.17にアップグレードする場合、アップグレード前にメタデータを移行する必要があります。
ローリングアップグレードの実施
Milvus 2.2.3以降では、Milvusコーディネータをアクティブスタンバイ モードで動作するように設定し、コーディネータのローリングアップグレード機能を有効にすることで、コーディネータのアップグレード中にMilvusが受信したリクエストに応答できるようになりました。以前のリリースでは、アップグレード中にコーディネータを削除してから作成するため、サービスのダウンタイムが発生する可能性がありました。
Kubernetesが提供するローリングアップデート機能に基づいて、Milvusのオペレータは、デプロイメントの依存関係に従って順序付けられたアップデートを実施します。さらに、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.4.17
上記の設定ファイルでは、spec.components.enableRollingUpdate
をtrue
に設定し、spec.components.image
を任意の Milvus バージョンに設定します。
デフォルトでは、Milvusはコーディネーターのローリングアップグレードを順番に実行し、コーディネーターのポッドイメージを次々に置き換えていきます。アップグレード時間を短縮するには、spec.components.imageUpdateMode
をall
に設定し、Milvus がすべてのポッドイメージを同時に置き換えるようにします。
apiVersion: milvus.io/v1beta1
kind: Milvus
metadata:
name: my-release
spec:
components:
enableRollingUpdate: true
imageUpdateMode: all
image: milvusdb/milvus:v2.4.17
Milvusがコーディネータポッドイメージを低いバージョンに置き換えるようにするには、spec.components.imageUpdateMode
をrollingDowngrade
に設定します。
apiVersion: milvus.io/v1beta1
kind: Milvus
metadata:
name: my-release
spec:
components:
enableRollingUpdate: true
imageUpdateMode: rollingDowngrade
image: milvusdb/milvus:<some-older-version>
次に、設定をYAMLファイル(例えば、milvusupgrade.yml
)として保存し、この設定ファイルを以下のようにMilvusインスタンスにパッチします:
kubectl patch -f milvusupgrade.yml
イメージを変更してMilvusをアップグレードする
通常の場合、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.4.17
その後、以下を実行してアップグレードを実行します:
kubectl patch -f milvusupgrade.yaml
メタデータの移行
Milvus 2.2.0以降、メタデータは以前のリリースと互換性がありません。以下の例は、Milvus 2.1.4からMilvus v2.4.17へのアップグレードを想定しています。
1.メタデータ移行用ファイル.yaml
の作成
メタデータ移行用ファイルを作成します。以下はその例です。設定ファイルにはname
,sourceVersion
,targetVersion
を指定する必要があります。以下の例では、name
をmy-release-upgrade
に、sourceVersion
をv2.1.4
に、targetVersion
をv2.4.17
に設定しています。 これは、Milvusインスタンスがv2.1.4からv2.4.17にアップグレードされることを意味します。
apiVersion: milvus.io/v1beta1
kind: MilvusUpgrade
metadata:
name: my-release-upgrade
spec:
milvus:
namespace: default
name: my-release
sourceVersion: "v2.1.4"
targetVersion: "v2.4.17"
# below are some omit default values:
# targetImage: "milvusdb/milvus:v2.4.17"
# toolImage: "milvusdb/meta-migration:v2.2.0"
# operation: upgrade
# rollbackIfFailed: true
# backupPVC: ""
# maxRetry: 3
2.新しい設定の適用
以下のコマンドを実行し、新しい設定を適用します。
$ kubectl create -f https://raw.githubusercontent.com/zilliztech/milvus-operator/main/config/samples/milvusupgrade.yaml
3.メタデータの移行状況の確認
以下のコマンドを実行して、メタデータ移行のステータスを確認します。
kubectl describe milvus release-name
出力のステータスがready
の場合は、メタデータの移行が成功したことを意味します。
あるいは、kubectl get pod
を実行してすべてのポッドをチェックすることもできます。すべてのポッドがready
であれば、メタデータの移行は成功しています。
4.削除my-release-upgrade
アップグレードが成功したら、YAML ファイルのmy-release-upgrade
を削除します。