Openshift:试运行释放节点的 OCP 升级预检查失败错误

摘要: 由于某些虚拟机无法实时迁移或某些 Pod 无法逐出,因此 OCP 升级预检查因 dryrun 释放节点错误而失败。

本文适用于 本文不适用于 本文并非针对某种特定的产品。 本文并非包含所有产品版本。

症状

在 LCM 预检查期间,可能出现试运行释放节点故障,从而阻止 LCM 进程。
image.png

错误消息可能包括但不限于以下情形:
  • 情况 1:“VMI XXXXXX 配置了驱逐策略,但不可实时迁移。”
  • 情况 2:“不能逐出 Pod,因为这会违反 Pod 的中断预算。”
  • 情况 3:未找到 Pod:xxxxxxxxxxxx 的“Pod XXX”

原因

情形 1 的根本原因:虚拟机配置了无法在错误报告节点上实时迁移的 ReadWriteOnce(RWO) 存储卷。

情形 2 的根本原因:Pod“PodDistruptionBudget”设置配置为“minAvailable:1", 它将阻止 Pod 逐出过程。

Senario 3 根本原因:Openshift 计划作业将启动一个 pod,并在作业完成后终止该 pod。因此,在预检查试运行释放节点步骤期间可能无法找到 Pod。

解决方案

方案 1 解决方案

1.在更改虚拟机实例的 PV 设置之前,请先停止该虚拟机实例。
image.png

2.单击虚拟机并切换到 YAML 选项卡。
image.png
image.png

3.将 accessModes 从“ReadWriteOnce”更改为“ReadWriteMany”。
image.png

4.如果 PV 无法设置为 ReadWriteMany(VM 无法使用 ReadWriteMany 启动),则将 evictionStrategy 从“LiveMigrate”设置为“None”。
image.png
注意:请执行适用于您的环境的步骤 3 或 4,不需要同时执行这两个步骤。

5.单击“保存”并重新启动虚拟机。
image.png

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"
例如:
image.png
 
  • 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"
例如:
image.png
 
  • OCP 升级完成后,还原备份 yaml 文件。
$ oc create -f <pdb_name>_backup.yaml -n <pod_namespace>

 

方案 3 解决方案

只需重试 LCM 预检查,这次应该可以通过。

其他信息

查看以下 Openshift 文档,了解有关虚拟机磁盘存储卷的更多信息。

https://access.redhat.com/documentation/en-us/openshift_container_platform/4.13/html/virtualization/about-virt

受影响的产品

APEX Cloud Platform for Red Hat OpenShift
文章属性
文章编号: 000216907
文章类型: Solution
上次修改时间: 18 9月 2026
版本:  4
从其他戴尔用户那里查找问题的答案
支持服务
检查您的设备是否在支持服务涵盖的范围内。