OpenShift 4 - 用“毒丸Operator”自动修复 OpenShift 集群故障节点(附视频)

59 篇文章 2 订阅

OpenShift / RHEL / DevSecOps 汇总目录
文本已在OpenShift 4.15 环境中进行验证。
注意:本文中提到的 Poison Pill Operator 目前已经改名为 Self Node Remediation Operator。

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

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

以下对一个标准 OpenShift 集群(建议 worker 节点至少为 3 个)进行测试,验证 Node Health Check Operator 和 Self Node Remediation Operator 是如何在 OpenShift 集群在发生节点故障自动恢复。

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

在 OpenShift 中提供了 Node Health Check Operator 和 Self Node Remediation Opeartor 来自动恢复出故障的节点,以提高整个集群的可用性。

  • Node Health Check Operator 负责持续判断运行节点是否运行正常。节点健康检查运行在每个节点上,它们检查自己是否能直接或间接(通过其他节点的监控检查)访问到 Master 的 API Server。如果任何方法都访问不到 Master 的 API Server,则认为自己所在节点已经不健康,此时会触发“Self Node Remediation Operator” 恢复环境。
  • Self Node Remediation Operator 负责对故障节点进行恢复,默认通过重启操作系统恢复环境。这是由于 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. 使用默认选项安装由 Red Hat 提供的 Node Health Check Operator。安装过程还会自动安装 Self Node Remediation Operator,安装后可以查看这 2 个 Operator 自动创建的配置。
    在这里插入图片描述
  2. 在 Self Node Remediation Operator 中已有 self-node-remediation-automatic-strategy-template 模板。
    在这里插入图片描述
  3. 安装完后会在 “计算” 菜单中增加 NodeHealthChecks。通过它创建以下 NodeHealthCheck 对象。
    在这里插入图片描述
apiVersion: remediation.medik8s.io/v1alpha1
kind: NodeHealthCheck
metadata:
  name: nodehealthcheck-automatic
spec:
  minHealthy: 51%
  remediationTemplate:
    apiVersion: self-node-remediation.medik8s.io/v1alpha1
    name: self-node-remediation-automatic-strategy-template
    namespace: openshift-workload-availability
    kind: SelfNodeRemediationTemplate
  selector:
    matchExpressions:
      - key: node-role.kubernetes.io/worker
        operator: Exists
  unhealthyConditions:
    - duration: 300s
      type: Ready
      status: 'False'
    - duration: 300s
      type: Ready
      status: Unknown
  1. 执行以下命令,持续观察排在第一个的 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 节点的系统内部。
$ 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. 然后查看该节点 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 节点的 Node Health Check Operator 检查到节点出问题了,并成功使用 Self Node Remediation Operator 自动重启并恢复了该节点,因此 OpenShift 集群又恢复了正常。

视频演示

视频

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值