OpenShift 4 - 用“毒丸Operator”自动修复 OpenShift 集群故障节点

OpenShift / RHEL / DevSecOps 汇总目录
文本已在OpenShift 4.10环境中进行验证。

当 OpenShift 集群中的节点出现无法访问的故障,集群会发生什么?

当 OpenShift 集群中的节点(例如下图中 worker-1 节点)出现“无法访问”类型的故障,集群不知道故障节点是宕机还是断网了。因为集群 Master 已经无法访问到 Worker-1 节点,因此无法向故障节点发送任何指令(比如停止 Pod 运行)。因此故障节点不会自动恢复,其上的 Pod 更不会自动停止,故障节点的资源也不会自动释放。在此时,那些运行在 Worker-1 节点上并通过 Deployment 运行的 Pod 可以在集群其他节点中得到重新调度并恢复运行。但通过 Statefulset 运行的 Pod 将不会在其它节点上被自动恢复。
在这里插入图片描述
为了恢复集群,通常管理员只能手动恢复故障节点。为了提高集群节点的可用性,同时简化运维,OpenShift 提供了“节点健康检查 Operator”和“毒丸Operator” 来实现自动化恢复故障节点。

以下对一个标准 OpenShift 集群(建议 worker 节点至少为 3 个)进行测试,验证“节点健康检查 Operator”和“毒丸Operator” 是如何在 OpenShift 集群在发生节点故障自动恢复。

OpenShift 节点健康检查 Operator 和毒丸 Opeartor 的作用

在 OpenShift 中提供了“节点健康检查 Operator 和“毒丸 Opeartor” 来自动恢复出故障的节点,以提高整个集群的可用性。

  • 节点健康检查 Operator 负责持续判断运行节点是否运行正常。节点健康检查运行在每个节点上,它们检查自己是否能直接或间接(通过其他节点的监控检查)访问到 Master 的 API Server。如果任何方法都访问不到 Master 的 API Server,则认为自己所在节点已经不健康,此时会触发“毒丸 Opeartor” 恢复环境。
  • 毒丸 Opeartor 负责对故障节点进行恢复,默认通过重启操作系统恢复环境。这是由于 OpenShift 底层的 RHCOS 被设计为具备 “牲畜-Cattle” 属性,因此很容易通过重启恢复环境。在这里插入图片描述

对一般 OpenShift 集群进行节点故障测试

  1. 先进入一个 Worker 节点内部。
$ ERROR_WORKER_NODE=$(oc get node -l node-role.kubernetes.io/worker | awk '{print $1}' |sed -n '2p')
$ oc debug node/${ERROR_WORKER_NODE}
  1. 查看节点的网络设备状态,其中 “ens5” 是节点对外的访问网络。
# chroot /host
# nmcli dev status
DEVICE          TYPE           STATE         CONNECTION
ens5            ethernet       connected     Wired connection 1
vxlan_sys_4789  vxlan          disconnected  --
veth0b8ee029    ethernet       unmanaged     --
veth324e698d    ethernet       unmanaged     --
veth79750015    ethernet       unmanaged     --
vethc469e4e3    ethernet       unmanaged     --
lo              loopback       unmanaged     --
br0             ovs-bridge     unmanaged     --
br0             ovs-interface  unmanaged     --
tun0            ovs-interface  unmanaged     --
br0             ovs-port       unmanaged     --
tun0            ovs-port       unmanaged     --
veth0b8ee029    ovs-port       unmanaged     --
veth324e698d    ovs-port       unmanaged     --
veth79750015    ovs-port       unmanaged     --
vethc469e4e3    ovs-port       unmanaged     --
vxlan0          ovs-port       unmanaged     --
  1. 关闭该网络设备。
# nmcli dev disconnect ens5
  1. 确认 worker 节点不能自主恢复。

对有节点健康检查和毒丸的 OpenShift 集群进行节点故障测试

  1. 使用默认选项安装 “Node Health Check Operator”,安装过程会自动安装 “Poison Pill”。安装后可以查看这 2 个 Operator 自动创建的配置。
    在这里插入图片描述
  2. 执行以下命令,持续观察一个 Worker 节点的运行状态。
$ ERROR_WORKER_NODE=$(oc get node -l node-role.kubernetes.io/worker | awk '{print $1}' |sed -n '2p')
$ oc get node ${ERROR_WORKER_NODE} -w
  1. 在一个新的窗口执行以下命令再次进入 Worker 节点内部。
$ oc debug node/${ERROR_WORKER_NODE}
  1. 再次进入 Worker 节点内部,然后查看该节点 Linux 上一次启动的时间。
# chroot /host
# who -b
  1. 关闭该节点的网络设备。
# nmcli dev disconnect ens5
  1. 在观察窗口中查看 worker 节点的运行状态,会从 ready 变为 notready,然后再次变为 ready 状态。
  2. 再次进入出现网路故障的worker节点,根据最近的启动时间确认刚刚被重启过。
$ oc debug node/${ERROR_WORKER_NODE}
# chroot /host
# who -b

这说明该worker节点的“健康检查Opeartor”检查到节点出问题了,并成功使用“毒丸 Opeartor”自动重启并恢复了该节点,因此OpenShift集群又恢复了正常。


版权声明:本文为weixin_43902588原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。