從 v1.4.0 升級到 v1.4.1
一般資訊
每當有可供升級的新 Harvester 版本時,Dashboard 畫面上就會出現 Upgrade 按鈕。如需更多資訊,請參閱開始升級。
對於離線環境,請參閱準備離線升級。
在開始升級之前,請檢查每個節點上作業系統映像檔的磁碟使用情況。要執行此操作,請透過 SSH 存取節點並執行命令 du -sh /run/initramfs/cos-state/cOS/*。
範例:
# du -sh /run/initramfs/cos-state/cOS/*
1.7G /run/initramfs/cos-state/cOS/active.img
3.1G /run/initramfs/cos-state/cOS/passive.img
如果 passive.img(代表先前安裝的 Harvester v1.4.0 映像檔)消耗 3.1G 磁碟空間,請使用 root 帳戶執行以下命令:
# mount -o remount,rw /run/initramfs/cos-state
# fallocate --dig-holes /run/initramfs/cos-state/cOS/passive.img
# mount -o remount,ro /run/initramfs/cos-state
passive.img 會轉換為稀疏檔案,應該只消耗 1.7G 磁碟空間(與 active.img 相同)。這確保每個節點有足夠的可用空間,防止升級過程卡在「Waiting Reboot」狀態。
在 Rancher v2.10.1 上更新 Harvester UI Extension
要在 Rancher v2.10.1 上匯入 Harvester v1.4.1 叢集,您必須使用 Rancher UI extension for Harvester 的 v1.0.3 版本。
-
在 Rancher UI 上,前往 local > Apps > Repositories。
-
找到名為 harvester 的儲存庫,然後選擇 ⋮ > Refresh。 此儲存庫具有以下屬性:
- URL:https://github.com/harvester/harvester-ui-extension
- Branch:gh-pages

-
前往 Extensions 畫面。
-
找到名為 Harvester 的擴充功能,然後點擊 Update。
-
選擇版本 1.0.3,然後點擊 Update。

-
等待一段時間讓擴充功能更新,然後重新整理畫面。
擴充功 能更新後,Rancher UI 會顯示錯誤訊息。當您重新整理畫面時,錯誤訊息會消失。
此問題存在於 Rancher v2.10.0 和 v2.10.1 中,將在 v2.10.2 中修復。
已知問題
1. 升級卡在「Pre-drained」狀態
升級過程可能會卡在「Pre-drained」狀態。Kubernetes 應該清空節點上的工作負載,但某些因素可能會導致過程停滯。

一個可能的原因是與 Longhorn Instance Manager 的孤立引擎相關的程序。要確定這是否適用於您的情況,請執行以下步驟:
-
檢查卡住節點上
instance-managerPod 的名稱。範例:
卡住的節點是
harvester-node-1,Instance Manager Pod 的名稱是instance-manager-d80e13f520e7b952f4b7593fc1883e2a。$ kubectl get pods -n longhorn-system --field-selector spec.nodeName=harvester-node-1 | grep instance-manager
instance-manager-d80e13f520e7b952f4b7593fc1883e2a 1/1 Running 0 3d8h -
檢查 Longhorn Manager 日誌以獲取資訊訊息。
範例:
$ kubectl -n longhorn-system logs daemonsets/longhorn-manager
...
time="2025-01-14T00:00:01Z" level=info msg="Node instance-manager-d80e13f520e7b952f4b7593fc1883e2a is marked unschedulable but removing harvester-node-1 PDB is blocked: some volumes are still attached InstanceEngines count 1 pvc-9ae0e9a5-a630-4f0c-98cc-b14893c74f9e-e-0" func="controller.(*InstanceManagerController).syncInstanceManagerPDB" file="instance_manager_controller.go:823" controller=longhorn-instance-manager node=harvester-node-1instance-managerPod 無法被清空是因為引擎pvc-9ae0e9a5-a630-4f0c-98cc-b14893c74f9e-e-0。 -
檢查引擎是否仍在卡住的節點上執行。
範例:
$ kubectl -n longhorn-system get engines.longhorn.io pvc-9ae0e9a5-a630-4f0c-98cc-b14893c74f9e-e-0 -o jsonpath='{"Current state: "}{.status.currentState}{"\nNode ID: "}{.spec.nodeID}{"\n"}'
Current state: stopped
Node ID:如果輸出顯示引擎未執行或甚至未找到引擎,則問題可能存在。
-
檢查所有卷是否健康。
kubectl get volumes -n longhorn-system -o yaml | yq '.items[] | select(.status.state == "attached")| .status.robustness'所有卷必須標記為
healthy。如果不是這種情況,請協助報告問題。 -
刪除
instance-managerPod 的 PodDisruptionBudget(PDB)。範例:
kubectl delete pdb instance-manager-d80e13f520e7b952f4b7593fc1883e2a -n longhorn-system
2. 使用非 harvester-longhorn 的預設 StorageClass 升級
Harvester 為 harvester-longhorn 新增註釋 storageclass.kubernetes.io/is-default-class: "true",這是原始的預設 StorageClass。當您將 harvester-longhorn 替換為另一個 StorageClass 時,會發生以下情況:
-
Harvester ManagedChart 顯示錯誤訊息
cannot patch "harvester-longhorn" with kind StorageClass: admission webhook "validator.harvesterhci.io" denied the request: default storage class %!s(MISSING) already exists, please reset it first。 -
Webhook 拒絕升級請求。

您可以執行以下任一解決方法:
-
將
harvester-longhorn設定 為預設 StorageClass。 -
將
spec.values.storageClass.defaultStorageClass: false新增到harvesterManagedChart。kubectl edit managedchart harvester -n fleet-local -
將
timeoutSeconds: 600新增到 Harvester ManagedChart spec。kubectl edit managedchart harvester -n fleet-local
相關 issue:#7375