Openshift:OCP 升級預先檢查失敗,發生 dryrun drain node 錯誤
摘要: OCP 升級預先檢查失敗,因為某些虛擬機器無法即時遷移或某些 Pod 無法逐出。
本文章適用於
本文章不適用於
本文無關於任何特定產品。
本文未識別所有產品版本。
症狀
在 LCM 預先檢查期間,可能會發生試執行排出節點故障,導致 LCM 程序停止。
錯誤訊息可能包括但不限於下列情況:
錯誤訊息可能包括但不限於下列情況:
- 案例 1:「VMI XXXXXX 已設定驅逐策略,但無法即時遷移。」
- 案例 2:“不能驅逐豆莢,因為它會違反豆莢的中斷預算。”
- 案例 3:找不到 pod:xxxxxxxxxxxx 的「pods xxx」
原因
案例 1 的根本原因:虛擬機器已設定唯讀寫入一次 (RWO) 儲存磁碟區,無法在錯誤報告節點上即時遷移。
案例 2 根本原因:容器「PodDistruptionBudget」設定配置為「minAvailable:1", 這會封鎖 Pod 逐出程序。
塞納里奧 3 根本原因:OpenShift 計劃作業將啟動 Pod,並在作業完成後終止該 Pod。因此,有可能在預檢查試運行排水節點步驟中找不到 pod。
案例 2 根本原因:容器「PodDistruptionBudget」設定配置為「minAvailable:1", 這會封鎖 Pod 逐出程序。
塞納里奧 3 根本原因:OpenShift 計劃作業將啟動 Pod,並在作業完成後終止該 Pod。因此,有可能在預檢查試運行排水節點步驟中找不到 pod。
解析度
案例 1 解決方案
1.請先停止 VM 實例,再更改其 PV 設置。
2.按一下 VM 並切換至 YAML 標籤。
3.將存取模式從「ReadWriteOnce」變更為「ReadWriteMany」
4.如果 PV 無法設定為 ReadWriteMany (VM 無法使用 ReadWriteMany 啟動),則將 evictionStrategy 從「LiveMigrate」設定為「無」。
注意:請執行適用於您環境的步驟 3 或 4,不需要同時執行這兩個步驟。
5.按一下儲存並重新啟動虛擬機器。
6.重試 LCM 預先檢查,並繼續升級。
案例 2 解決方案
執行下列適用於您的環境的程序之一。
程序 1:手動刪除無法逐出的容器。
- 執行以下命令刪除無法逐出的 pod/pod,並讓它們在不同的節點中重新建立。
$ oc delete pod <pod_name> -n <pod_namespace>
- 重試 LCM 預先檢查,並繼續升級。
程序 2:如果無法手動刪除容器,請修補其「PodDisruptionBudget」配置為「minAvailable:1"
- 執行以下命令以檢查 pod「PodDisruptionBudget」值
例如:
$ oc get pdb <pdb_name> -n <pod_namespace> NAME MIN AVAILABLE MAX UNAVAILABLE ALLOWED DISRUPTIONS AGE <pdb_name> 1 N/A 0 18h
- 如果命令輸出顯示「MIN AVAILABLE」為「1」,請透過以下命令將 PodDisruptionBudget minAvailable 值修補為「0」。
$ oc patch pdb <pdb_name> -n <pod_namespace> --type=merge -p '{"spec":{"minAvailable":0}}'
- 重試 LCM 預先檢查,並繼續升級。
- 等待升級完成且 MCO 可用,執行以下命令以檢查一切正常。
$ watch -n10 "oc get clusterversion; echo; oc get mcp; echo; oc get nodes -o wide; echo; oc get co"
例如:
- OCP 升級完成後,請將 PodDisruptionBudget minAvailable 值還原為「1」
$ oc patch pdb <pdb_name> -n <pod_namespace> --type=merge -p '{"spec":{"minAvailable":1}}'
程序 3:如果修補 pod 命中錯誤「PodDisruptionBudget.policy “<pdb_name>”無效:spec:禁止:禁止更新 poddisruption 預算規格“,請按照以下步驟進行解決。
- 備份設定為「minAvailable:1"
$ oc get pdb <pdb_name> -n <pod_namespace> -o yaml > <pdb_name>_backup.yaml
- 移除配置「minAvailable:1"
$ oc delete pdb <pdb_name> -n <pod_namespace>
- 重試 LCM 預先檢查,並繼續升級。
- 等待升級完成且 MCO 可用,執行以下命令以檢查一切正常。
$ watch -n10 "oc get clusterversion; echo; oc get mcp; echo; oc get nodes -o wide; echo; oc get co"
例如:
- OCP 升級完成後,請還原備份的 yaml 檔案。
$ oc create -f <pdb_name>_backup.yaml -n <pod_namespace>
案例 3 解決方案
只要重試 LCM 預先檢查即可,這次應該會過去。
其他資訊
請查看以下 OpenShift 文件,以取得有關虛擬機器磁碟儲存磁碟區的詳細資訊。
受影響的產品
APEX Cloud Platform for Red Hat OpenShift文章屬性
文章編號: 000216907
文章類型: Solution
上次修改時間: 18 9月 2026
版本: 4
向其他 Dell 使用者尋求您問題的答案
支援服務
檢查您的裝置是否在支援服務的涵蓋範圍內。