Openshift 镜像参考映射更新异常修复问题总结
摘要: 本文分析了OpenShift集群中镜像映射更新失败及手动强制更新问题的解决方案。当存在卡在创建中的Pod时,镜像仓库映射更新会失败,需手动杀掉并调度其他节点。针对手动强制更新失败问题,可通过重启机器配置控制器或删除对应节点的daemon来解决。此外,提供了暂停角色配置镜像映射、重启控制器及手动校正节点配置的方法,并列出相关检查命令,如查看MCP状态、检查集群操作符状态等。这些方法能有效解决

文章目录
1. 问题
1.2 镜像映射更新中驱除pod 失败
- 如果ocp集群有卡在创建中的pod,那么这中情况下,不会被驱除。镜像仓库映射配置更新过程中涉及驱除节点pod,这回导致驱除失败。导致镜像映射配置更新卡住。手动杀掉,调度其他节点可以解决。
$ oc describe co/machine-config | grep -A 3 Extension
Extension:
Infra: pool is degraded because nodes fail with "1 nodes are reporting degraded status on sync": "Node worker3 is reporting: \"failed to drain node: worker3 after 1 hour. Please see machine-config-controller logs for more information\""
Master: <unknown>
Worker: <unknown>
1.3 手动强制更新失败
不小心手动触发更新错了,怎么办?
现象如下:
$ oc get mcp
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE
infra rendered-infra-59015de28673b42dc6890449d1c7e8f6 False False True 3 0 0 1 4y247d
master rendered-master-70b5be25c310c030f038c50e5f16a32e False False False 3 0 0 0 5y161d
worker rendered-worker-0047f04c8b04f8b91e14cdc8543432e4 False False False 8 0 8 0 5y161d
$ oc describe co/machine-config | grep -A 2 Extension
Extension:
Infra: pool is degraded because nodes fail with "1 nodes are reporting degraded status on sync": "Node worker1 is reporting: \"missing MachineConfig rendered-worker-221d0ad86b4303a537db6d7fb76cba0a\\nmachineconfig.machineconfiguration.openshift.io \\\"rendered-worker-221d0ad86b4303a537db6d7fb76cba0a\\\" not found\""
Master: <unknown>
$ oc get mcp infra -o yaml | grep paused
paused: true
message: Pool is paused; will not update to MachineConfig rendered-infra-79484e61b4566504ec4b48efa9063fea
解决方法:
找到对应节点的daemon ,杀掉重启daemon,(重启主机没用)
oc get pods -n openshift-machine-config-operator -o wide | grep daemon
2.其他排查方法
2.1 启停角色配置镜像映射
有时候,并不希望集群每个角色都有必要配置镜像映射更新。那么就可以停掉,减小操作风险。
# 暂停 master 池
oc patch mcp master --type=merge -p '{"spec":{"paused":true}}'
# 暂停 infra 池 (如果存在)
oc patch mcp infra --type=merge -p '{"spec":{"paused":true}}'
# 暂停默认的 worker 池
oc patch mcp worker --type=merge -p '{"spec":{"paused":true}}'
执行后,你将看到 machineconfigpool.machineconfiguration.openshift.io/infra patched 的提示。
2.2 重启 Machine Config Controller
这是解决状态不同步问题的最有效方法。通过删除 machine-config-controller 的 Pod,Deployment 会自动创建一个新的、干净的 Pod。这个新的 Pod 在启动时会重新检查所有节点和所有配置,从而用真实状态来更新 MCP 对象。
找到 controller pod 的名字:
oc get pods -n openshift-machine-config-operator | grep machine-config-controller
你会得到类似 machine-config-controller-5f67d8f6f9-abcde 的名字。
删除这个 pod 以触发重启:
oc delete pod <pod-name-from-previous-step> -n openshift-machine-config-operator
这个操作是安全的,因为控制器是无状态的,它的所有状态信息都存储在 etcd 的 CRD 对象中。重启后它会重新读取所有信息。在重启 controller 之后,等待一到两分钟,让新的 Pod 启动并完成第一次协调循环。
再次检查 MachineConfigPool 的状态:watch oc get mcp
2.3 手动解决 infra
oc get mcp infra
. 手动校正节点的 Annotation:
oc annotate node worker1 machineconfiguration.openshift.io/currentConfig=<config-name-from-step-1> --overwrite
在执行完这个命令后,由于 MCO 控制器现在是健康的,它会立刻检测到这个变更,发现 currentConfig 和 desiredConfig 一致了,从而将 infra 池的 DEGRADED 状态清除。
3. 检查命令
ansible -i inventory.ini upm -m shell -a "cat /etc/containers/registries.conf|grep lvms4"
watch oc get co machine-config
watch oc get mcp
oc get mcp infra -o yaml | grep paused
oc describe co/machine-config | grep -A 3 Extension
更多推荐



所有评论(0)