用于集群脑裂的远端存储异常处理方法及系统
技术领域
本发明涉及集群脑裂场景下异常处理领域,具体地说是一种用于集群脑裂的远端存储异常处理方法及系统。
背景技术
随着容器技术在公有云、私有云、混合云等领域越来越广泛的应用,以及kubernetes已经成为容器领域的编排管理事实上的标准,用户在实际使用中不可避免的会遇到kubernetes集群脑裂的问题。
一般来说,如果产生脑裂故障的worker节点上所有pod都是无状态的,则kubernetes通过自身的状态监控,选主等机制就能在其余正常worker节点上运行新的pod,无需介入,用户也无感知;这里要讨论的是有状态pod的情况,由于远端挂载的存储卷状态还是“正在使用”,这时kubernetes调度到其他worker节点上运行新的pod时都会报错:“Unable to mount volumes for pod”。这种情形必须主动介入才能让新pod正常运行。
基于上述分析,如何在有状态pod的情况下及时检测异常worker节点并处理异常worker节点,以使得新pod正常运行,是需要解决的技术问题。
发明内容
本发明的技术任务是针对以上不足,提供一种用于集群脑裂的远端存储异常处理方法及系统,来解决如何在有状态pod的情况下及时检测异常worker节点并处理异常worker节点的问题。
第一方面,本发明提供一种用于集群脑裂的远端存储异常处理方法,包括:
检测master集群中的leader节点;
检查每个worker节点的状态以及连通性,得到的非ready状态或者不连通的worker节点为异常worker节点;
解除存储卷与异常worker节点的映射关系,并删除异常worker节点。
通常情况下,kubernetes集群部署方案都会部署3个或5个etcd节点,组成一个etcd集群,master节点负责管理集群,提供集群的资源数据访问入口,由Worker节点承接实际的业务负载。
集群脑裂具体分以下场景:
1、master节点部分坏了
Worker节点分两种情况:
(1.1)所有Worker节点和坏掉的master节点一起;
(1.2)Worker节点没有全部和坏掉的master节点一起
2、所有master节点都坏了
apiserver无法工作,集群down掉;
3、master好的,若干Worker节点坏了。
当集群中的网络出现故障时对服务的选主影响不是很大,因为scheduler和controller-manager是依赖Etcd进行选主的,在网络故障后,可以和Etcd通信的主机依然可以按照之前的逻辑进行选主,就算集群被切分,Etcd也可以保证同一时刻只有一个节点的服务处于leader状态。
在上述所说的通用3etcd的部署拓扑图中:
一个etcd坏了(二个etcd可用),集群可正常使用;
两个etcd坏了(一个etcd可用),原pod可正常使用,但是已无法新建pod;
即etcd集群,需要至少2个etcd节点才可以正常工作。总之,kubernetes的master选举机制最终会选出可用的master。
基于上述,本实施方式中,先取出maste集群中的leader节点,在该leader节点上运行脚本检查每个Worker节点的状态以及连通性,得到非ready状态或不通的异常worker节点,对于异常worker节点detach其volume,再将pod kubectl delete掉,从而达到防脑裂效果。
作为优选,检测master集群中的leader节点,包括:
通过kubectl命令取得命名空间为kube-system kube-scheduler下的端点,从中查找本master节点是否在其中,如果在其中则为master集群中的leader节点,否则不是。
作为优选,检查每个worker节点的状态以及连通性,包括:
执行kubectl命令获取节点信息完整描述,查找其中有无KubeletReady,如果无则为异常worker节点,如果有则ping对应的slave节点若干次,如果ping不通则为异常worker节点。
作为优选,解除存储卷与异常worker节点的映射关系,包括:
执行umount命令,将映射路径从异常worker节点上umount掉;
调用detach接口,将异常worker节点和远端存储的映射关系删掉。
作为优选,调用kubectl delete命令删除异常worker节点。
第二方面,本发明提供一种用于集群脑裂的远端存储异常处理系统,包括:
leader节点检测模块,用于检测master集群中的leader节点;
异常worker节点检测模块,用于检查每个worker节点的状态以及连通性,得到的非ready状态或者不连通的worker节点为异常worker节点;
异常worker节点处理模块,用于解除存储卷与异常worker节点的映射关系,并删除异常worker节点。
作为优选,leader节点检测模块为具有如下功能的模块:通过kubectl命令取得命名空间为kube-system kube-scheduler下的端点,从中查找本master节点是否在其中,如果在其中则为master集群中的leader节点,否则不是。
作为优选,异常worker节点检测模块为具有如下功能的模块:
执行kubectl命令获取节点信息完整描述,查找其中有无KubeletReady,如果无则为异常worker节点,如果有则ping对应的slave节点若干次,如果ping不通则为异常worker节点。
作为优选,异常worker节点处理模块为具有如下功能的模块:
执行umount命令,将映射路径从异常worker节点上umount掉;
调用detach接口,将异常worker节点和远端存储的映射关系删掉;
调用kubectl delete命令删除异常worker节点。
本发明的用于集群脑裂的远端存储异常处理方法及系统具有以下优点:可以在集群脑裂场景下第一时间发现问题并解决问题,对非集群脑裂场景、worker节点不明原因出现状态异常的情况也能解决其远端存储的问题,能够极大提高云平台的技术特性和产品竞争力。
附图说明
为了更清除地说明本发明实施例中的技术方案,下面将对实施例中描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
下面结合附图对本发明进一步说明。
附图1为实施例1用于集群脑裂的远端存储异常处理方法流程框图。
具体实施方式
下面结合附图和具体实施例对本发明作进一步说明,以使本领域的技术人员可以更好地理解本发明并能予以实施,但所举实施例不作为对本发明的限定,在不冲突的情况下,本发明实施例以及实施例中的技术特征可以相互结合。
本发明实施例提供用于集群脑裂的远端存储异常处理方法及系统,用于解决如何在有状态pod的情况下及时检测异常worker节点并处理异常worker节点的技术问题。
本发明中:
kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。
Etcd:一个高可用的分布式键值数据库。
Master节点:kubernetes集群中的管理节点,负责管理集群,提供集群的资源数据访问入口。
worker节点:Kubernetes集群架构中运行Pod的服务节点,承接实际的业务负载。
集群脑裂:kubernetes集群中多个master节点由于种种原因分隔成相互之间不通的子集群。
实施例1:
如附图1所示,本发明的用于集群脑裂的远端存储异常处理方法,包括如下步骤:
S100、检测master集群中的leader节点;
S200、检查每个worker节点的状态以及连通性,得到的非ready状态或者不连通的worker节点为异常worker节点;
S300、解除存储卷与异常worker节点的映射关系,并删除异常worker节点。
其中,步骤S100中,检测master集群中的leader节点采用如下方法:通过kubectl命令取得命名空间为kube-system kube-scheduler下的端点,从中查找本master节点是否在其中,如果在其中则为master集群中的leader节点,否则不是。
步骤S200中,检查每个worker节点的状态以及连通性,采用如下方法:执行kubectl命令获取节点信息完整描述,查找其中有无KubeletReady,如果无则为异常worker节点,如果有则ping对应的slave节点若干次,如果ping不通则为异常worker节点。
步骤S300中,解除存储卷与异常worker节点的映射关系,采用如下方法:执行umount命令,将映射路径从异常worker节点上umount掉;调用detach接口,将异常worker节点和远端存储的映射关系删掉。
步骤S300中,解除存储卷与异常worker节点的映射关系后,调用kube-ctl delete命令删除异常worker节点。
实施例2:
本发明的用于集群脑裂的远端存储异常处理系统,包括驾leader节点检测模块、异常worker节点检测模块和异常worker节点处理模块,上述模块配合检测异常worker节点,并处理leader节点。
其中leader节点检测模块,用于检测master集群中的leader节点,该模块执行如下操作:通过kubectl命令取得命名空间为kube-system kube-scheduler下的端点,从中查找本master节点是否在其中,如果在其中则为master集群中的leader节点,否则不是。
异常worker节点检测模块,用于检查每个worker节点的状态以及连通性,得到的非ready状态或者不连通的worker节点为异常worker节点。该模块执行如下操作:执行kubectl命令获取节点信息完整描述,查找其中有无KubeletReady,如果无则为异常worker节点,如果有则ping对应的slave节点若干次,如果ping不通则为异常worker节点。
异常worker节点处理模块,用于解除存储卷与异常worker节点的映射关系,并删除异常worker节点。该模块执行如下操作;执行umount命令,将映射路径从异常worker节点上umount掉;调用detach接口,将异常worker节点和远端存储的映射关系删掉;调用kubectl delete命令删除异常worker节点。
本发明的用于集群脑裂的远端存储异常处理系统可执行实施例1公开的用于集群脑裂的远端存储异常处理方法。
以上所述实施例仅是为充分说明本发明而所举的较佳的实施例,本发明的保护范围不限于此。本技术领域的技术人员在本发明基础上所作的等同替代或变换,均在本发明的保护范围之内。本发明的保护范围以权利要求书为准。