在这里插入图片描述

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
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐