使用 Milvus Operator 升級 Milvus 集群
本指南描述如何使用 Milvus Operator 升級您的 Milvus 集群。
升級你的 Milvus 操作員
執行以下指令,將您的 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 操作員升級到最新版本,您有以下選擇:
- 要將 Milvus 從 v2.2.3 或更高版本升級到 2.5.4,您可以進行滾動升級。
- 要將 Milvus 從 v2.2.3 之前的次要版本升級到 2.5.4,建議您通過更改映像版本來升級 Milvus。
- 要將 Milvus 從 v2.1.x 升級到 2.5.4,您需要在實際升級前遷移 metadata。
進行滾動升級
自 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.5.4
在上述配置文件中,將spec.components.enableRollingUpdate
設定為true
,並將spec.components.image
設定為所需的 Milvus 版本。
預設情況下,Milvus 會以有序的方式為協調器執行滾動升級,其中會逐一取代協調器 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.4
您可以將spec.components.imageUpdateMode
設為rollingDowngrade
,讓 Milvus 以較低的版本取代協調器 Pod 影像。
apiVersion: milvus.io/v1beta1
kind: Milvus
metadata:
name: my-release
spec:
components:
enableRollingUpdate: true
imageUpdateMode: rollingDowngrade
image: milvusdb/milvus:<some-old-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
spec:
# Omit other fields ...
components:
image: milvusdb/milvus:v2.5.4
然後執行以下步驟來執行升級:
kubectl patch -f milvusupgrade.yaml --patch-file milvusupgrade.yaml --type merge
遷移元資料
自 Milvus 2.2.0 起,元資料與先前版本不相容。下面的示例片段假設從 Milvus 2.1.4 升級到 Milvus 2.5.4。
1.建立.yaml
檔案進行元資料遷移
建立一個元資料遷移檔案。以下是一個範例。您需要在設定檔中指定name
,sourceVersion
, 和targetVersion
。以下範例將name
設定為my-release-upgrade
,sourceVersion
設定為v2.1.4
,targetVersion
設定為v2.5.4
。這表示您的 Milvus 集群將從 v2.1.4 升級到 v2.5.4。
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.4"
# below are some omit default values:
# targetImage: "milvusdb/milvus:v2.5.4"
# toolImage: "milvusdb/meta-migration:v2.2.0"
# operation: upgrade
# rollbackIfFailed: true
# backupPVC: ""
# maxRetry: 3
2.套用新設定
執行下列指令建立新的配置。
$ kubectl create -f https://github.com/zilliztech/milvus-operator/blob/main/config/samples/beta/milvusupgrade.yaml
3.檢查元資料遷移的狀態
執行下列指令檢查元資料遷移的狀態。
kubectl describe milvus release-name
輸出中的狀態ready
表示元資料遷移成功。
或者,您也可以執行kubectl get pod
來檢查所有的 Pod。如果所有的 pod 都是ready
,則表示元資料遷移成功。
4.刪除my-release-upgrade
升級成功後,刪除 YAML 檔案中的my-release-upgrade
。