计算;推算;计数设备的制造及其应用技术1.本技术涉及计算机技术领域,具体涉及一种容器集群调度的方法、装置、设备及存储介质。背景技术:2.目前云计算产品中,容器集群调度算法通常以容器的资源利用率、节点的负载均衡以及容灾策略作为评测集群性能的主要指标,而容器调度算法的合理性也高度影响着集群的性能。例如云计算领域内广泛应用的kubernetes容器编排调度技术就充分考虑了上述问题,在满足用户个性化资源分配需求的基础上,采用一定的过滤算法和打分算法筛选出最合适的节点绑定pod,因此kubernetes容器编排调度技术在很大程度上解决了容器资源利用率的问题,并在实现负载均衡和容灾方面都具有很大的优势。但随着集群规模的扩大和云计算平台用户数量的增加,kubernetes容器编排调度技术需要将大量pod逐个进行节点的分配,容器调度效率过低,且其对节点进行顺序重复性打分筛选也会导致效率降低,因此提高容器调度的效率成为目前亟待解决的问题。另一方面,kubernetes的原生调度器既要负责节点的过滤和打分,又要兼顾节点的负载均衡和容灾,导致调度器负载压力过大。技术实现要素:3.鉴于上述问题,本技术实施例提供一种容器集群调度的方法、装置、设备及存储介质,用以解决容器集群调度效率低,且其原生调度器负载压力过大的技术问题。4.一方面,提供一种容器集群调度方法,所述方法包括:5.基于接收的容器调度请求,创建多个pod,所述调度请求用于指示所述多个pod的资源需求;6.基于各个pod的资源需求和各节点组所能提供的资源量上限值,对所述多个pod进行分组,获得多个pod组,每个pod组包含至少一个pod;7.从容器集群包含的节点组中,为每个pod组分配对应的节点组;8.针对每个pod组包含的各个pod,分别从为pod组分配的节点组中确定出相应的目标节点,并将每个pod绑定至对应的目标节点。9.一方面,提供一种容器集群调度装置,包括:10.创建单元,用于基于接收的容器调度请求,创建多个pod,所述调度请求用于指示所述多个pod的资源需求;11.分组单元,用于基于各个pod的资源需求和各节点组所能提供的资源量上限值,对所述多个pod进行分组,获得多个pod组,每个pod组包含至少一个pod;12.分配单元,用于从容器集群包含的节点组中,为每个pod组分配对应的节点组;13.绑定单元,用于针对每个pod组包含的各个pod,分别从为pod组分配的节点组中确定出相应的目标节点,并将每个pod绑定至对应的目标节点。14.可选的,所述分组单元,具体用于:15.基于容器集群包括的各个节点的节点属性,对所述各个节点进行分组,获得多个节点组;16.其中,每个节点组中的多个节点之间的节点属性存在如下关系中的一种或者多种:17.资源属性相同;18.资源利用率之间的差值不大于第一预设差值阈值;19.包含所述容器集群中的至少两种拓扑结构中的节点。20.可选的,所述分组单元,具体用于:21.基于所述容器集群中具有特定资源的节点,获得至少一个特殊资源节点组;22.基于各节点的资源利用率,对所述容器集群中除具有特定资源的节点之外的普通资源节点进行聚类处理,并根据聚类结果确定分组数量n;23.分别对所述容器集群中每个拓扑结构中的普通资源节点,按照资源利用率从小到大的顺序进行排序,获得每个拓扑结构对应的普通资源节点队列;24.分别对每个普通资源节点队列划分为n个子队列,每个子队列中的普通资源节点之间的顺序与相应的普通资源节点队列一致,任意两个子队列中其中一个子队列中资源利用率的最小值大于另一子队列中资源利用率的最大值;25.将各普通资源节点队列对应的n个子队列中,位置对应的子队列包括的节点进行组合,获得n个普通资源节点组。26.可选的,所述分组单元,具体用于:27.分别针对所述多个节点组中各个节点组,获取各个节点组的资源利用率集合,所述资源利用率集合包含相应节点组内每一个节点的资源利用率;28.针对每个资源利用率集合,若包含的最大值与最小值之间的差值大于第二预设差值阈值,则对所述多个节点组进行分组调整,获得调整后的多个节点组。29.可选的,所述装置还包括迁移单元,具体用于:30.当所述容器集群的负载低于预设负载阈值时,确定每个pod的活跃度是否低于预设活跃度阈值;所述活跃度表征pod的资源需求的概率,或者资源需求扩展时的资源量;31.当存在目标pod的活跃度低于所述预设活跃度阈值时,将所述目标pod迁移至可用资源量低于预设资源量阈值的节点。32.可选的,所述分组单元,具体用于:33.对所述多个pod进行分组,获得多个pod组,所述多个pod组满足如下条件的一种或者多种:34.每个pod组具有相同的资源需求;35.每个pod组的资源需求总量小于或者等于所述资源量上限值,且所述资源需求总量与所述资源量上限值之间的差值不超过第三预设差值阈值;36.每个pod组中各个pod之间的关联度不低于预设关联度阈值。37.可选的,所述分配单元,具体用于:38.将所述容器集群包含的特殊资源节点组,分配给所述多个pod组中存在特定资源需求的pod组;39.将所述容器集群包含的普通资源节点组,分配给所述多个pod组中除存在特定资源需求的pod组之外的其他pod组;40.若存在所述其他pod组未分配到相应的普通资源节点组,则将特殊资源节点组分配给未分配的其他pod组。41.一方面,提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述任一种方法的步骤。42.一方面,提供一种计算机存储介质,其上存储有计算机程序指令,该计算机程序指令被处理器执行时实现上述任一种方法的步骤。43.一方面,提供一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述任一种方法的步骤。44.本技术实施例的有益效果如下:45.本技术实施例中,根据接收到的容器调度请求指示的pod的资源需求,创建多个pod,通过pod的资源需求和节点组所能提供的资源量上限值,对创建的pod进行分组,再从容器集群包含的节点组中为每个pod组分配对应的节点组,并针对每个pod组包含的各个pod,分别从为pod组分配的节点组中确定出相应的目标节点,并将每个pod绑定至对应的目标节点。其中,本技术实施例所采用的容器集群调度方法,通过对pod和节点分别进行分组,再通过pod组到节点组的大粒度批量组调度和节点组内pod调度的分级调度机制,在满足节点负载均衡的基础上,通过分级调度提高容器集群的调度效率,同时减轻容器集群的原生调度器的负载压力,使得节点的资源利用率更高。附图说明46.为了更清楚地说明本技术实施例或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。47.图1为本技术实施例提供的一种应用场景示意图;48.图2为本技术实施例提供的一种容器集群调度设备的系统架构图;49.图3为本技术实施例提供的一种容器集群调度方法的流程示意图;50.图4为本技术实施例提供的一种两级调度模块进行pod调度的示意图;51.图5为本技术实施例提供的一种节点分组的流程示意图;52.图6为本技术实施例提供的一种对集群拓扑内的节点进行分组的示意图;53.图7为本技术实施例提供的一种节点分组模块的分组流程图;54.图8为本技术实施例提供的一种容器集群调度过程的流程图;55.图9为本技术实施例提供的一种容器集群调度装置的结构示意图;56.图10为本技术实施例提供的一种计算机设备的组成结构示意图。具体实施方式57.为使本技术的目的、技术方案和优点更加清楚明白,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。在不冲突的情况下,本技术中的实施例及实施例中的特征可以相互任意组合。并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。58.为便于理解本技术实施例提供的技术方案,这里先对本技术实施例使用的一些关键名词进行解释:59.pod:是容器集群技术中最基本资源类型和最小调度单位,通过一个pod来存放实现同一业务功能的一个及以上数量的容器,并共享同一网络和存储,pod中的所有容器跟随pod被统一调度绑定至同一节点,不可分割。pod中的容器有共享网络和共享存储两个特点,共享网络指pod中的所有容器共享同一个网络命名空间,包括ip地址和网络端口,共享存储指pod中的所有容器能够访问共享存储卷,且允许容器共享数据。60.容器:将应用程序代码、工具库、运行环境和运行所需的设置和依赖项都打包到一个容器中,实现可移植性的优点。不同容器能在不同环境中独立运行,互不影响。61.下面对本技术实施例的设计思想进行简要介绍:62.本技术实施例中,根据接收到的容器调度请求指示的pod的资源需求,创建多个pod,通过pod的资源需求和节点组所能提供的资源量上限值,对创建的pod进行分组,再从容器集群包含的节点组中为每个pod组分配对应的节点组,并针对每个pod组包含的各个pod,分别从为pod组分配的节点组中确定出相应的目标节点,并将每个pod绑定至对应的目标节点。其中,本技术实施例所采用的容器集群调度方法,通过对pod和节点分别进行分组,再通过pod组到节点组的大粒度批量组调度和节点组内pod调度的分级调度机制,在满足节点负载均衡的基础上,通过分级调度提高容器集群的调度效率,同时减轻容器集群的原生调度器的负载压力,使得节点的资源利用率更高。63.此外,为了保证节点负载均衡的同时,进一步提高节点的资源利用率、高可用性以及容器的调度效率,本技术实施例根据节点的资源属性、资源利用率、所属容器集群的拓扑,将容器集群中具有特定资源的节点分为特殊资源节点组,对其他普通资源节点通过聚类处理和分组算法,将资源利用率相近且来自不同拓扑的普通资源节点划分为一组,并在节点组运行后根据各个节点组的资源利用率情况对划分的节点组进行分组调整。其中,该方法使具有特殊资源的节点能被充分利用,进一步提高节点的资源利用率,将资源利用率相近的普通资源节点划分为一组,且根据资源利用率对节点组进行动态分组调整,保证节点组内各个节点的资源使用率始终保持相近,使在进行各节点组内pod调度时无需花费更多计算资源实现负载均衡,保证节点负载均衡的同时进一步提高容器的调度效率,通过让普通资源节点组内包含来自不同拓扑的节点,保证组内节点的高可用性。64.最后,本技术实施例在对pod进行分组时,将相同资源需求的pod划分为一组,且使每个pod组资源需求总量小于且最接近节点组资源量上限值,每个pod组各pod之间存在高关联度。在进行pod组到节点组的大粒度批量组调度时,将特殊资源节点组分配给存在特定资源需求的pod组,普通资源节点组分配给其他pod组,当存在未分配到普通资源节点组的其他pod组时,将特殊资源节点组分配给未分配的其他pod组。并在容器集群负载过低时,将活跃度低的pod迁移至可用资源量低的节点。该方法使相同资源需求的pod分为一组,实现与特殊资源节点组和普通资源节点组各自对应的适配性分配,便于节省计算资源来实现各节点组内pod调度的负载均衡。每个pod组资源需求总量小于且最接近节点组量上限值,使得pod组的资源需求与节点组的资源量相匹配,避免出现节点组资源不足无法调度的情况。每个pod组各pod之间存在高关联度,使得同一组内的pod存在来自同一应用或互相存在依赖关系的情况,在进行节点组内pod调度时能够更加方便地使用亲和或反亲和策略,提高容器的调度效率。而将特殊资源节点组分配给未分配的其他pod组和根据pod活跃度进行节点迁移,都能在不影响pod运行的同时,高效利用节点的碎片资源,提高节点的资源利用率。65.下面对本技术实施例的技术方案能够适用的应用场景做一些简单介绍,需要说明的是,以下介绍的应用场景仅用于说明本技术实施例而非限定。在具体实施过程中,可以根据实际需要灵活地应用本技术实施例提供的技术方案。66.本技术实施例提供的技术方案可以适用于容器集群中,例如基于kubernetes框架的容器云平台。如图1所示,为本技术实施例提供的一种应用场景示意图,在该场景中,可以包括由用户终端101、容器集群调度设备102、集群节点设备103。67.用户终端101可以为手机、个人计算机(personal computer,pc)、平板电脑(pad)、笔记本电脑、台式电脑、移动互联网设备(mobile internet device,mid)等任意能与服务器进行连接,为用户提供本地服务的设备均可,本实施例不作具体限定。68.容器集群调度设备102可以是容器集群中的管理设备,用于实现对容器的部署、管理和监控等功能。69.集群节点设备103为通过容器集群的代理程序,提供调度的pod的必要运行环境,其可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、即内容分发网络(content delivery network,cdn)、以及大数据和人工智能平台等基础云计算服务的云服务器,但并不局限于此。70.需要说明的是,图1所示只是举例说明,实际上集群节点设备、用户端终端、集群节点设备的数量不受限制,在本技术实施例中不做具体限定。且图1所示的组件和结构只是示例性的,而非限制性的,在实际场景中根据需要,还可以具有其他组件和结构。71.如图2所示,为本技术实施例提供的容器集群调度设备102的系统架构图,在该架构中,可以包括控制模块1021、缓存模块1022、节点分组模块1023、pod分组模块1024、一级调度模块1025、二级调度模块1026。应当注意,图1所示的容器集群调度设备102的组件和结构只是示例性的,而非限制性的,在实际场景中根据需要,还可以具有其他组件和结构。72.(1)控制模块1021,用于接收用户终端触发的容器调度请求,通过列表监视机制,获取请求指示的容器数据信息以此创建待调度pod。还可将从集群服务器获取到的节点信息和创建的待调度pod信息分别传输至节点分组模块1023、pod分组模块1024,以供进行后续调度流程。73.(2)缓存模块1022,用于进行整个容器集群调度设备102的数据缓存,上述其他模块在一级和二级调度过程中产生的中间调度数据都将暂存于缓存模块,例如节点分组模块1023产生的节点组信息,pod分组模块1024产生的pod组列表信息,一级调度模块1025产生的一级调度结果信息。74.(3)节点分组模块1023,用于从控制模块1021获取节点数据信息,动态地根据节点属性对节点进行分组,并将分组结果存入缓存模块1022。75.(4)pod分组模块1024,用于从控制模块1021获取待调度pod的数据信息,按照预设分组规则对pod进行分组,生成的pod组列表并存入缓存模块1022。76.(5)一级调度模块1025,用于从缓存模块1022中获取节点组信息和pod组列表信息,为每个pod组分配对应的节点组,将pod组批量调度绑定至节点组。77.(6)二级调度模块1026,用于在一级调度模块1025完成大粒度批量调度后,针对每个pod组包含的各个pod,从pod组调度绑定的节点组中确定出对应的目标节点,并将每个pod绑定至对应的目标节点。78.应当注意,图2所示只是举例说明,实际上控制模块、缓存模块、节点分组模块、pod分组模块、一级调度模块、二级调度模块的数量不受限制,在本技术实施例中不做具体限定。且图2所示的系统架构图的组件和结构只是示例性的,而非限制性的,在实际场景中根据需要,还可以具有其他组件和结构。79.在一种可能的实施方式中,容器集群调度设备通过一个一级调度模块,负责pod组批量调度绑定至节点组,而二级调度模块与节点组的数量相等且一一对应,每个二级调度模块负责与其对应的节点组的pod调度。80.下面结合上述描述的应用场景,参考附图来描述本技术示例性实施方式提供的容器集群调度方法,需要注意的是,上述应用场景仅是为了便于理解本技术的精神和原理而示出,本技术的实施方式在此方面不受任何限制。81.参见图3所示,为本技术实施例提供的容器集群调度方法的流程示意图,这里是以容器集群调度平台为执行主体为例进行举例说明的,该方法的具体实施流程如下:82.步骤301:基于接收的容器调度请求,创建多个pod,所述调度请求用于指示所述多个pod的资源需求。83.本技术实施例中,在用户端进行相关业务操作时,会触发实现业务功能所需多个容器的调度请求,控制模块处理接收到的容器调度请求,分析获得请求指示的多个容器所需资源,根据容器资源需求创建多个pod,其中一个pod包含实现同一业务功能的一个及以上数量的容器。84.在一种可能的实施方式中,以kubernetes容器集群为例,控制模块可以沿用原生kubernetes的informer通知器设计,其中informer通知器是kubernetes的一个核心工具包,kubernetes组件通过informer通知器提供的list-watch功能和get获取功能获取到资源对象的最新数据信息。控制模块从集群服务器获取调度请求相关的数据信息,例如此次调度容器的应用程序代码、工具库、运行环境和运行所需的设置和依赖项等,进行相应的pod创建流程,可以将创建的pod存储至缓存模块,也可直接作为pod分组模块的输入。85.步骤302:基于各个pod的资源需求和各节点组所能提供的资源量上限值,对所述多个pod进行分组,获得多个pod组,每个pod组包含至少一个pod。86.本技术实施例中,pod分组模块根据各个pod的资源需求和各节点组所能提供的资源量上限值进行分组,使分组获得的多个pod组满足如下条件:87.(1)每个pod组具有相同的资源需求。88.具体的,pod的资源需求可以包括但不限于运行pod容器需占用的存储资源、cpu资源、磁盘资源等,pod分组模块按照相同资源需求将创建的多个pod划分为多组,以使每个pod组具有相同的资源需求。通过此种方法,可以将具有特殊gpu、高性能磁盘等特定资源需求的pod划分为一组,便于后续进行批量调度至具有特殊资源的节点组,充分利用具有特殊资源的节点。89.(2)每个pod组的资源需求总量小于或者等于节点组的资源量上限值,且资源需求总量与节点组的资源量上限值之间的差值不超过第三预设差值阈值。90.具体的,pod分组模块可以从控制模块获取节点组信息,并在分组时实时计算当前划分的pod组的资源需求总量,来比较节点组的资源量上限值与每个pod资源需求总量,保证每个pod组的资源需求总量小于或者等于节点组的资源量上限值,且资源需求总量与节点组的资源量上限值之间的差值不超过第三预设差值阈值。其中,为了进一步提高节点的资源利用率,通常会保证资源需求总量最接近节点组的资源量上限值。91.(3)每个pod组中各个pod之间的关联度不低于预设关联度阈值。92.具体的,两个pod之间的关联度表征两个pod来自同一应用或者互相有依赖关系的可能性,pod分组模块通过在分组时使每个pod组中各个pod之间关联度不低于预设关联度阈值,保证一组pod中各个pod之间互相具有高关联度,使得同一组内的pod尽可能来自同一应用或互相存在依赖关系,这样在进行节点组内pod调度的时候可以更加方便地使用亲和或反亲和策略,即将高关联度的pod调用至同一节点,pod的容器之间能够互相配合调用,提高容器调用效率,同时避免关联度低的pod被调用至同一节点,导致pod内容器运行时相关的运行环境或工具组件等互相排斥,产生冲突导致容器宕机。93.在一种可能的实施方式中,节点分组模块可以通过添加标签的方式来实现对节点的分组,例如对同一个节点组内的节点都添加对应的节点组的序列号标签,一级和二级调度模块都可通过该标签来识别节点所属的节点组。94.步骤303:从容器集群包含的节点组中,为每个pod组分配对应的节点组。95.本技术实施例中,在一级调度模块为每个pod分配对应节点组前,节点分组模块会根据各个节点的节点属性对节点进行分组,使分组获得的多个节点组满足如下条件:96.(1)每个节点组中的多个节点之间的资源属性相同。97.具体的,节点的资源属性可以包括但不限于节点所对应的集群服务器的存储资源、cpu资源、磁盘资源等。控制模块从集群节点设备获取到各个节点对应的服务器的资源属性信息发送至分组模块,节点分组模块可以根据接收到的资源属性信息,将相同资源属性的节点划分为一组。通过此种方法,可以将具有特殊gpu、高性能磁盘等特定资源节点划分为多个特殊资源节点组,便于批量为多个有特殊资源需求的pod提供资源。98.(2)每个节点组中的任意两个节点之间资源利用率之间的差值不大于第一预设差值阈值。99.具体的,控制模块能够通过list-watch机制,实现对各个节点的资源利用率进行列表式实时监控,并可以将某一时刻各个节点的资源利用率信息发送至节点分组模块。节点分组模块在分组时按照节点的资源利用率大小,使任意两个节点之间资源利用率之间的差值不大于第一预设差值阈值,即将资源利用率接近的节点划分为一组,以便后续进行节点组内pod调度,容器集群调度设备无需再花费更多的计算资源来进行节点的负载均衡,提高容器调度效率。100.(3)每个节点组包含容器集群中的至少两种拓扑结构中的节点。101.具体的,当各个服务器按照拓扑结构组成服务器集群时,控制模块可获取到各个节点对应的服务器所属的某一拓扑结构信息,并发送至节点分组模块。pod分组模块通过节点对应服务器所属的集群拓扑信息,在进行节点分组时,使得每个节点组都包含属于服务器集群不同拓扑结构的节点,以此实现当节点组某一拓扑的节点发生宕机时,其他拓扑的节点依旧能继续提供服务,保证节点组的高可用性。102.在一种可能的实施方式中,节点分组模块会周期性地从控制模块获取各个节点组的资源利用率集合,每个节点组的资源利用率集合包含相应的节点组内每一个节点的资源利用率。当节点分组模块确定存在节点组的资源利用率合集中包含的最大值与最小值之间差值大于第二预设差值阈值时,第二预设差值阈值可以是最大值的10%,节点分组模块会对划分好的节点组进行分组调整,将调整后的节点分组作为最新节点分组供其他模块使用。103.具体的,分组调整可以是仅对资源利用率合集中最大值与最小值之间差值超过预设阈值的节点组中的所有节点,按照原分组规则划分进其他节点组,也可以是对当前容器集群内所有节点组按照原分组规则进行重新分组。104.本技术实施例中,节点一级调度模块根据从缓存模块中获取的节点组信息和pod组信息,为每个pod组分配对应的节点组,将pod组大粒度批量调度绑定至节点组。105.具体的,一级调度模块会先将具有特殊资源的节点组分配给多个pod组中存在特定资源需求的pod组,再将其他普通资源节点组分配给除存在特定资源需求之外的其他pod组。而当其他pod组未分配到相应的普通资源节点组,一级调度模块会将特殊资源节点组分配给未分配的其他pod组,以保证所有pod能够正常运行,并且高效利用节点的碎片资源,提高节点的资源利用率。106.步骤304:针对每个pod组包含的各个pod,分别从为pod组分配的节点组中确定出相应的目标节点,并将每个pod绑定至对应的目标节点。107.本技术实施例中,在一级调度模块完成为pod组分配节点组的流程后,通过二级调度模块来实现每个pod组内各个pod调度绑定至对应目标节点的过程。108.在一种可能的实施方式中,二级调度模块可以使用容器集群的原生调度器,例如,在kubernetes容器集群中,二级调度模块可以使用kubernetes的原生调度器,根据节点的负载均衡、资源利用率和高可用等考虑,来进行节点组内pod的调度绑定。109.参考图4所示,为两级调度模块进行pod调度的示意图,其中一级调度模块根据从缓存模块获取的pod组的资源需求属性,将普通资源需求pod组和特殊资源需求pod组分别批量分配到对应的普通资源节点组和特殊资源节点组,二级调度模块通过考虑负载均衡和容灾策略等因素,将各个节点组内的pod绑定到指定的节点上。110.在一种可能的实施方式中,当容器集群服务器的工作负载量低于预设负载阈值时,控制模块会通过list-watch机制,获取到每个pod当前时刻的活跃度,并判断其是否低于预设活跃度阈值,其中活跃度表征pod的资源需求的概率,或者资源需求扩展时的资源量。当控制模块判定存在目标pod的活跃度低于阈值时,二级调度模块会将该目标pod迁移至可用资源量低于预设资源量阈值的节点。具体的,控制模块可以周期性的从集群服务器获取其工作负载量,也可以通过事件触发获取,例如当接收到用户端有关服务器反应过慢的反馈时。111.当pod容器对应业务功能的用户访问请求量增多时,该pod的扩容可能性也随之增加,相应表征pod资源需求的概率或资源需求扩展时的资源量的活跃度也随之提升,而没有扩容需求或者扩容需求资源量低的pod活跃度也低,此时可用资源低的节点就能满足低活跃度节点的资源需。因此为了保证pod正常运行,同时高效利用节点的碎片资源,可通过二级调度模块将活跃度低的pod迁移至可用资源量低的节点。112.在一种可能的实施方式中,为了保证节点负载均衡同时,进一步提高节点的资源利用率,高可用性以及容器的调度效率,节点分组模块在进行节点分组时还可以结合节点的资源属性、资源利用率、所属容器集群的拓扑进行分组。参考图5所示,为本技术实施例提供的一种节点分组的流程示意图,该方法的具体实施流程如下:113.步骤501:基于所述容器集群中具有特定资源的节点,获得至少一个特殊资源节点组。114.本技术实施例中,节点分组模块直接将各个集群拓扑内具有特定资源的节点划分为特殊资源节点组,以便能够批量为多个具有特定资源需求的pod提供资源。115.步骤502:基于各节点的资源利用率,对所述容器集群中除具有特定资源的节点之外的普通资源节点进行聚类处理,并根据聚类结果确定分组数量n。116.本技术实施例中,节点分组模块对容器集群中除具有特定资源的节点之外的普通资源节点进行聚类处理,将获得的聚类结果作为普通资源节点组的组数。117.一种可能的实施方式中,节点分组模块可以采用聚类算法中的肘方法,采用从控制单元获取容器集群内的普通资源节点数量和各个普通资源节点对应的资源利用率,通过以下公式确定节点组数:[0118][0119]其中,q为普通资源节点的类数,p为容器集群内的普通资源节点总数量,xij为第i类节点内的第j个节点的资源利用率,yi为第i类节点内所有节点的资源利用率的平均值,dist为容器集群内每个节点与其所在类的资源使用率均值的差值之总和。根据上述公式结果得到对应的肘曲线图,该肘曲线的拐点对应的类数q为通过聚类算法获得的最终节点类数。假设容器集群拓扑数为t,最终确定的节点组数m为:[0120]m=max{2,t,q}[0121]其中,节点组数m是通过比较最终节点类数q、容器集群拓扑数t和数值2之间的大小,将最大值确定为最终的普通资源节点组数。[0122]步骤503:分别对所述容器集群中每个拓扑结构中的普通资源节点,按照资源利用率从小到大的顺序进行排序,获得每个拓扑结构对应的普通资源节点队列。[0123]本技术实施例中,节点分组模块为了保证普通资源节点组之间资源利用率之间的差值不大于第一预设差值阈值,且包含容器集群中的至少两种拓扑结构中的节点,将每个拓扑结构中普通资源节点组按照资源利用率从小到大的顺序排列成如图6所示的普通资源节点队列,以便进行后续的分组流程。[0124]步骤504:分别对每个普通资源节点队列划分为n个子队列,每个子队列中的普通资源节点之间的顺序与相应的普通资源节点队列一致,任意两个子队列中其中一个子队列中资源利用率的最小值大于另一子队列中资源利用率的最大值。[0125]本技术实施例中,参考图5所示,节点分组模块通过分别对每个拓扑的普通资源节点队列,按确定的节点分组数n划分为顺序与普通资源节点队列一致的n个子队列,从而保证每个子队列之间资源利用率之间的差值不大于第一预设差值阈值。[0126]在一种可能的实施方式中,节点分组模块还可以通过从每个普通资源节点队列中,按照普通资源节点队列的顺序,抽取出一定数量的节点组成一个节点组,其中,抽取的节点数量是通过每个普通资源节点队列的节点总数与确定的节点分组数的比值确定的。这样既可以使每个节点组都尽可能包含来自不同拓扑中的节点,又保证每个节点组中的节点资源利用率是相近的,这样在进行节点组内pod调度的时候可以保证节点的高可用,满足负载均衡需求。[0127]步骤505:将各普通资源节点队列对应的n个子队列中,位置对应的子队列包括的节点进行组合,获得n个普通资源节点组。[0128]本技术实施例中,参考图5所示,节点分组模块将每个拓扑的普通资源节点队列对应的n个子队列中,位置对应的子队列包括的节点进行组合,获得n个普通资源节点组,使得每个节点组都包含来自不同拓扑中的节点,又保证每个节点组中的节点的资源利用率相近,保证了节点的高可用性,同时满足节点组内pod调度的负载均衡需求。[0129]在一种可能的实施方式中,节点分组模块还可以通过分别从每个普通资源节点队列中,按照普通资源节点队列的顺序抽取出一定数量的节点组成一个节点组,最终获得n个普通资源节点组。其中,抽取的节点数量是通过每个普通资源节点队列的节点总数与确定的节点分组数的比值确定的。[0130]具体的,参考图6所示,为对集群拓扑内的节点进行分组的示意图,其中,该示例集群包含3个拓扑结构,其中拓扑1包含4个普通资源节点和1个具有特定资源的节点,拓扑2包含3个普通资源节点和1个具有特定资源的节点,拓扑3包含有2个普通资源节点和1个具有特定资源的节点,图示两种节点矩形中的黑色区域面积代表节点的资源利用率。[0131]以确定的节点组数等于2为例,节点分组模块会将3个拓扑内具有特定资源的节点直接划分为一个特殊资源节点组,对于每个拓扑其他的普通资源节点,节点分组模块会将其按照资源利用率从小到大的顺序进行排列,获得3个拓扑结构中对应的3个普通资源节点队列。再按照普通资源节点队列的顺序,将3个普通资源节点队列分别划分为2个子队列,按照普通资源节点队列顺序把3个拓扑中位置对应的子队列包括的节点进行组合,获得2个普通资源节点组。在一种可能的实施方式中,参考图7所示,为一种节点分组模块的分组流程图,该方法的具体实施步骤如下:[0132]步骤701:确定容器集群内所有节点需要划分的组数。[0133]步骤702:基于节点的资源利用率大小,对每个集群拓扑中的节点按节点的资源利用率从小到大进行排序,获得每个集群拓扑对应的节点队列。[0134]步骤703:按比例分别从每个集群拓扑对应的节点队列中抽取出一定数量的节点组成一个节点组,获得多个节点组,其中抽取的节点数量是通过节点总数与组数的比值确定的。[0135]步骤704:为每个节点组添加节点组序列号标签,并对同一个节点组内的节点都添加对应的节点组序列号标签。[0136]步骤705:判断容器集群内是否产生新节点,如果是,执行步骤706-707。如果否,执行步骤708。[0137]步骤706:获取新节点的资源利用率,并与集群内原有节点的资源利用率进行比较,确定与新节点资源利用率之间差值最小的原有节点。[0138]步骤707:查询该节点的节点组序列号标签,将新节点划分进该序列号标签对应的节点组。[0139]步骤708:判断是否存在节点组内节点资源利用率的最大值与最小值间的差值大于第二预设差值阈值的节点组,如果是,执行步骤701。[0140]在一种可能的实施方式中,参考图8所示,为一种容器集群调度过程的流程图,该方法的具体实施步骤如下:[0141]步骤801:将容器集群内的所有节点进行分组,获得多个节点组。[0142]步骤802:判断是否接收到容器调度请求,若是,执行步骤803,若否,结束调度。[0143]步骤803:根据容器调度请求创建多个pod。[0144]步骤804:根据各个pod的资源需求,对多个pod进行分组,获得多个pod组。[0145]步骤805:判断是否存在特殊资源需求pod组,若是,执行步骤806,若否,执行步骤807。[0146]步骤806:将具有特殊资源的节点组分配给特殊资源需求pod组。[0147]步骤807:将普通资源节点组分配给普通资源需求pod组。[0148]步骤808:判断是否存在未分配到普通资源节点组的普通资源需求pod组,若是,执行步骤809,若否,执行步骤810。[0149]步骤809:将具有特殊资源的节点组分配给未分配的普通资源需求pod组。[0150]步骤810:从为各个pod组分配的节点组中确定出相应的目标节点,将每个pod绑定至对应的目标节点。[0151]步骤811:判断容器集群服务器的工作负载量是否低于预设负载阈值,若是,执行步骤812,若否,执行步骤815。[0152]步骤812:判断是否存在pod组的活跃度低于预设活跃度阈值,若是,执行步骤813,若否,执行步骤815。[0153]步骤813:根据各个pod的活跃度大小对多个pod进行分组,获得多个pod组。[0154]步骤814:将活跃度低于预设活跃度阈值的pod组分配给可用资源量低于预设资源量阈值的节点组。[0155]步骤815:判断是否存在节点组内节点资源利用率的最大值与最小值间的差值大于第二预设差值阈值的节点组,若是,执行步骤801,若否,执行步骤802。[0156]综上所述,本技术实施例提出一种分级pod调度方法,增加批量调度算法,实现pod批量调度,目的是在满足资源均衡的基础上提高集群中容器的调度效率,分散中心调度器的压力,同时使资源利用率更高。具体的,通过两级调度器机制的设计,分级调度,提高调度效率,减轻调度器压力,node分组算法,综合考虑node资源特殊性和资源使用率,并加入node拓扑特性,运行过程中动态分组,此外,pod分组算法,分创建时分组和运行时分组两个阶段,按照pod活跃度分组的策略,并在pod运行过程中对集群碎片资源整理,进一步提升了资源利用率。[0157]请参见图9,基于同一发明构思,本技术实施例还提供了一种容器集群调度装置90,该装置包括:[0158]创建单元901,用于基于接收的容器调度请求,创建多个pod,调度请求用于指示多个pod的资源需求;[0159]分组单元902,用于基于各个pod的资源需求和各节点组所能提供的资源量上限值,对多个pod进行分组,获得多个pod组,每个pod组包含至少一个pod;[0160]分配单元903,用于从容器集群包含的节点组中,为每个pod组分配对应的节点组;[0161]绑定单元904,用于针对每个pod组包含的各个pod,分别从为pod组分配的节点组中确定出相应的目标节点,并将每个pod绑定至对应的目标节点。[0162]可选的,分组单元902,具体用于:[0163]基于容器集群包括的各个节点的节点属性,对各个节点进行分组,获得多个节点组;[0164]其中,每个节点组中的多个节点之间的节点属性存在如下关系中的一种或者多种:[0165]资源属性相同;[0166]资源利用率之间的差值不大于第一预设差值阈值;[0167]包含容器集群中的至少两种拓扑结构中的节点。[0168]可选的,分组单元902,具体用于:[0169]基于所述容器集群中具有特定资源的节点,获得至少一个特殊资源节点组;[0170]基于各节点的资源利用率,对所述容器集群中除具有特定资源的节点之外的普通资源节点进行聚类处理,并根据聚类结果确定分组数量n;[0171]分别对所述容器集群中每个拓扑结构中的普通资源节点,按照资源利用率从小到大的顺序进行排序,获得每个拓扑结构对应的普通资源节点队列;[0172]分别对每个普通资源节点队列划分为n个子队列,每个子队列中的普通资源节点之间的顺序与相应的普通资源节点队列一致,任意两个子队列中其中一个子队列中资源利用率的最小值大于另一子队列中资源利用率的最大值;[0173]将各普通资源节点队列对应的n个子队列中,位置对应的子队列包括的节点进行组合,获得n个普通资源节点组。[0174]可选的,分组单元902,具体用于:[0175]分别针对多个节点组中各个节点组,获取各个节点组的资源利用率集合,资源利用率集合包含相应节点组内每一个节点的资源利用率;[0176]针对每个资源利用率集合,若包含的最大值与最小值之间的差值大于第二预设差值阈值,则对多个节点组进行分组调整,获得调整后的多个节点组。[0177]可选的,分组单元902,具体用于:[0178]对多个pod进行分组,获得多个pod组,多个pod组满足如下条件的一种或者多种:[0179]每个pod组具有相同的资源需求;[0180]每个pod组的资源需求总量小于或者等于资源量上限值,且资源需求总量与资源量上限值之间的差值不超过第三预设差值阈值;[0181]每个pod组中各个pod之间的关联度不低于预设关联度阈值。[0182]可选的,分配单元903,具体用于:[0183]将容器集群包含的特殊资源节点组,分配给多个pod组中存在特定资源需求的pod组;[0184]将容器集群包含的普通资源节点组,分配给多个pod组中除存在特定资源需求的pod组之外的其他pod组;[0185]若存在其他pod组未分配到相应的普通资源节点组,则将特殊资源节点组分配给未分配的其他pod组。[0186]可选的,该装置还包括迁移单元905,具体用于:[0187]当容器集群的负载低于预设负载阈值时,确定每个pod的活跃度是否低于预设活跃度阈值;活跃度表征pod的资源需求的概率,或者资源需求扩展时的资源量;[0188]当存在目标pod的活跃度低于预设活跃度阈值时,将目标pod迁移至可用资源量低于预设资源量阈值的节点。[0189]通过上述装置,根据接收到的容器调度请求指示的pod的资源需求,创建多个pod,通过pod的资源需求和节点组所能提供的资源量上限值,对创建的pod进行分组,再从容器集群包含的节点组中为每个pod组分配对应的节点组,并针对每个pod组包含的各个pod,分别从为pod组分配的节点组中确定出相应的目标节点,并将每个pod绑定至对应的目标节点。其中,本技术实施例所采用的容器集群调度方法,通过对pod和节点分别进行分组,再通过pod组到节点组的大粒度批量组调度和节点组内pod调度的分级调度机制,在满足节点负载均衡的基础上,通过分级调度提高容器集群的调度效率,同时减轻容器集群的原生调度器的负载压力,使得节点的资源利用率更高。[0190]为了描述的方便,以上各部分按照功能划分为各单元模块(或模块)分别描述。当然,在实施本技术时可以把各单元(或模块)的功能在同一个或多个软件或硬件中实现。该装置可以用于执行本技术各实施例中所示的方法,因此,对于该装置的各功能模块所能够实现的功能等可参考前述实施例的描述,不多赘述。[0191]请参见图10,基于同一技术构思,本技术实施例还提供了一种计算机设备。在一种实施例中,该计算机设备可以为图1所示的容器集群调度设备,该计算机设备如图10所示,包括存储器1001,通讯模块1003以及一个或多个处理器1002。[0192]存储器1001,用于存储处理器1002执行的计算机程序。存储器1001可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统,以及运行即时通讯功能所需的程序等;存储数据区可存储各种即时通讯信息和操作指令集等。[0193]存储器1001可以是易失性存储器(volatile memory),例如随机存取存储器(random-access memory,ram);存储器1001也可以是非易失性存储器(non-volatile memory),例如只读存储器,快闪存储器(flash memory),硬盘(hard disk drive,hdd)或固态硬盘(solid-state drive,ssd);或者存储器1001是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。存储器1001可以是上述存储器的组合。[0194]处理器1002,可以包括一个或多个中央处理单元(central processing unit,cpu)或者为数字处理单元等等。处理器1002,用于调用存储器1001中存储的计算机程序时实现上述容器集群调度方法。[0195]通讯模块1003用于与后向传感器和其他服务器进行通信。[0196]本技术实施例中不限定上述存储器1001、通讯模块1003和处理器1002之间的具体连接介质。本技术实施例在图10中以存储器1001和处理器1002之间通过总线1004连接,总线1004在图10中以粗线描述,其它部件之间的连接方式,仅是进行示意性说明,并不引以为限。总线1004可以分为地址总线、数据总线、控制总线等。为便于描述,图10中仅用一条粗线描述,但并不描述仅有一根总线或一种类型的总线。[0197]存储器1001中存储有计算机存储介质,计算机存储介质中存储有计算机可执行指令,计算机可执行指令用于实现本技术实施例的容器集群调度方法。处理器1002用于执行上述各实施例的容器集群调度方法。[0198]在一些可能的实施方式中,本技术提供的容器集群调度方法的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当程序产品在计算机设备上运行时,程序代码用于使计算机设备执行本说明书上述描述的根据本技术各种示例性实施方式的容器集群调度方法中的步骤,例如,计算机设备可以执行各实施例的步骤。[0199]程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以是但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。[0200]本技术的实施方式的程序产品可以采用便携式紧凑盘只读存储器(cd-rom)并包括程序代码,并可以在计算装置上运行。然而,本技术的程序产品不限于此,在本技术件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被命令执行系统、装置或者器件使用或者与其结合使用。[0201]可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由命令执行系统、装置或者器件使用或者与其结合使用的程序。[0202]可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、rf等等,或者上述的任意合适的组合。[0203]可以以一种或多种程序设计语言的任意组合来编写用于执行本技术操作的程序代码,程序设计语言包括面向对象的程序设计语言,诸如java、c++等,还包括常规的过程式程序设计语言,诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算装置上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算装置上部分在远程计算装置上执行、或者完全在远程计算装置或服务器上执行。在涉及远程计算装置的情形中,远程计算装置可以通过任意种类的网络包括局域网(lan)或广域网(wan)连接到用户计算装置,或者,可以连接到外部计算装置(例如利用因特网服务提供商来通过因特网连接)。[0204]应当注意,尽管在上文详细描述中提及了装置的若干单元或子单元,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本技术的实施方式,上文描述的两个或更多单元的特征和功能可以在一个单元中具体化。反之,上文描述的一个单元的特征和功能可以进一步划分为由多个单元来具体化。[0205]此外,尽管在附图中以特定顺序描述了本技术方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。[0206]本领域内的技术人员应明白,本技术的实施例可提供为方法、系统、或计算机程序产品。因此,本技术可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本技术可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。[0207]尽管已描述了本技术的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本技术范围的所有变更和修改。[0208]显然,本领域的技术人员可以对本技术进行各种改动和变型而不脱离本技术的精神和范围。这样,倘若本技术的这些修改和变型属于本技术权利要求及其等同技术的范围之内,则本技术也意图包含这些改动和变型在内。
图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!
内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,发布内容不收取任何费用也不接任何广告!
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理,本文部分文字与图片资源来自于网络,部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们,情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!
容器集群调度的方法、装置、设备及存储介质与流程 专利技术说明
作者:admin
2022-11-30 06:23:50
520
关键词:
计算;推算;计数设备的制造及其应用技术
专利技术