Openshift:试运行释放节点的 OCP 升级预检查失败错误
Summary: 由于某些虚拟机无法实时迁移或某些 Pod 无法逐出,因此 OCP 升级预检查因 dryrun 释放节点错误而失败。
This article applies to
This article does not apply to
This article is not tied to any specific product.
Not all product versions are identified in this article.
Symptoms
在 LCM 预检查期间,可能出现试运行释放节点故障,从而阻止 LCM 进程。
错误消息可能包括但不限于以下情形:
错误消息可能包括但不限于以下情形:
- 情况 1:“VMI XXXXXX 配置了驱逐策略,但不可实时迁移。”
- 情况 2:“不能逐出 Pod,因为这会违反 Pod 的中断预算。”
- 情况 3:未找到 Pod:xxxxxxxxxxxx 的“Pod XXX”
Cause
情形 1 的根本原因:虚拟机配置了无法在错误报告节点上实时迁移的 ReadWriteOnce(RWO) 存储卷。
情形 2 的根本原因:Pod“PodDistruptionBudget”设置配置为“minAvailable:1", 它将阻止 Pod 逐出过程。
Senario 3 根本原因:Openshift 计划作业将启动一个 pod,并在作业完成后终止该 pod。因此,在预检查试运行释放节点步骤期间可能无法找到 Pod。
情形 2 的根本原因:Pod“PodDistruptionBudget”设置配置为“minAvailable:1", 它将阻止 Pod 逐出过程。
Senario 3 根本原因:Openshift 计划作业将启动一个 pod,并在作业完成后终止该 pod。因此,在预检查试运行释放节点步骤期间可能无法找到 Pod。
Resolution
方案 1 解决方案
1.在更改虚拟机实例的 PV 设置之前,请先停止该虚拟机实例。
2.单击虚拟机并切换到 YAML 选项卡。
3.将 accessModes 从“ReadWriteOnce”更改为“ReadWriteMany”。
4.如果 PV 无法设置为 ReadWriteMany(VM 无法使用 ReadWriteMany 启动),则将 evictionStrategy 从“LiveMigrate”设置为“None”。
注意:请执行适用于您的环境的步骤 3 或 4,不需要同时执行这两个步骤。
5.单击“保存”并重新启动虚拟机。
6.重试 LCM 预检查并继续升级。
方案 2 解决方案
执行适用于您的环境的以下过程之一。
步骤 1:手动删除无法逐出的 pod/pod。
- 运行以下命令以删除无法逐出的 Pod/Pod,并让它们在不同的节点中重新创建。
$ oc delete pod <pod_name> -n <pod_namespace>
- 重试 LCM 预检查并继续升级。
步骤 2:如果无法手动删除 Pod,请修补其“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:Forbidden: updates to poddisruptionbudget spec are forbidden.“,请按照以下步骤解决此问题。
- 备份配置了“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 预检查,这次应该可以通过。
Additional Information
查看以下 Openshift 文档,了解有关虚拟机磁盘存储卷的更多信息。
Affected Products
APEX Cloud Platform for Red Hat OpenShiftArticle Properties
Article Number: 000216907
Article Type: Solution
Last Modified: 18 Sept 2026
Version: 4
Find answers to your questions from other Dell users
Support Services
Check if your device is covered by Support Services.