CN114489970A - Kubernetes中利用Coscheduling插件实现队列排序的方法及系统 - Google Patents
Kubernetes中利用Coscheduling插件实现队列排序的方法及系统 Download PDFInfo
- Publication number
- CN114489970A CN114489970A CN202111641742.9A CN202111641742A CN114489970A CN 114489970 A CN114489970 A CN 114489970A CN 202111641742 A CN202111641742 A CN 202111641742A CN 114489970 A CN114489970 A CN 114489970A
- Authority
- CN
- China
- Prior art keywords
- pod
- podgroup
- scheduling
- filtering
- node
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5038—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5077—Logical partitioning of resources; Management or configuration of virtualized resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5021—Priority
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种Kubernetes中利用插件实现队列排序的方法及系统,首先,使用前置过滤算法对PodGroup进行前置过滤,可以理解的是,可以是对pod总数小于最小运行任务数的PodGroup进行过滤,也可以是对当前集群节点小于PodGroup的最少资源需求量的情况进行过滤,避免不必要的处理资源浪费,然后对前置过滤通过的PodGroup的多个pod设置优先级,在处理PodGroup的集群节点中,基于pod的优先级高低,对pod从前往后进行排队,容易想到的是,可以是高优先级的Pod排列在低优先级的Pod之前,优先处理高优先级的Pod。综合考虑Pod之间的相互关系,调度器能够及时、动态地支持用户的调度需求。
Description
技术领域
本发明涉及容器管理平台,尤其是涉及一种Kubernetes中利用Coscheduling插件实现队列排序的方法、系统和存储介质。
背景技术
Kubernetes已然成为容器管理平台的事实标准,Pod作为Kubernetes中的不可变基础设施,是最小的调度单元。Kubernetes的调度框架同样也是围绕Pod进行工作的。在Web应用和微服务的工作负载场景中,原生调度器可以很好的为容器化应用提供了自动化部署、运维、资源调度等全生命周期管理功能。随着Kubernetes在公有云和企业内部广泛应用,Web应用和微服务以外的工作负载,比如机器学习、深度学习训练任务、大数据处理任务、基因计算工作流,也逐渐融入到Kubernetes生态。
Kubernetes原生调度器以Pod为调度单元循环处理单个Pod容器进行依次调度,不会考虑Pod之间的相互关系,但是很多数据计算类的离线作业具有组合调度的特点,即要求所有的子任务都能够成功创建后,整个作业才能正常运行。如果只有部分子任务启动的话,启动的子任务将持续等待剩余的子任务被调度,此种场景下原生调度器无法及时、动态的支持用户的调度需求。
发明内容
本发明的目的在于克服上述技术不足,提出一种Kubernetes中利用Coscheduling插件实现队列排序的方法、系统和存储介质,解决现有技术中原生调度器无法及时、动态的支持用户的调度需求的技术问题。
为达到上述技术目的,第一方面,本发明的技术方案提供一种Kubernetes中利用Coscheduling插件实现队列排序的方法,包括以下步骤:
使用前置过滤算法对PodGroup进行前置过滤;
为前置过滤通过的所述PodGroup的多个pod设置优先级;
在处理所述PodGroup的集群节点中,基于所述pod的所述优先级高低,对所述pod从前往后进行排队。
与现有技术相比,本发明提供的Kubernetes中利用Coscheduling插件实现队列排序的方法的有益效果包括:
首先,使用前置过滤算法对PodGroup进行前置过滤,可以理解的是,可以是对pod总数小于最小运行任务数的PodGroup进行过滤,也可以是对当前集群节点小于PodGroup的最少资源需求量的情况进行过滤,避免不必要的处理资源浪费,然后对前置过滤通过的PodGroup的多个pod设置优先级,在处理所述PodGroup的集群节点中,基于所述pod的所述优先级高低,对所述pod从前往后进行排队,容易想到的是,可以是高优先级的Pod排列在低优先级的Pod之前,优先处理高优先级的Pod。本实施例提供的Kubernetes中利用Coscheduling插件实现队列排序的方法综合考虑Pod之间的相互关系,调度器能够及时、动态地支持用户的调度需求。
根据本发明的一些实施例,所述使用前置过滤算法对PodGroup进行前置过滤,包括步骤;
校验当前处理pod所在的所述PodGroup的pod总数,若所述pod总数小于最小运行任务数,拒绝调度所述pod。
根据本发明的一些实施例,所述使用前置过滤算法对PodGroup进行前置过滤,包括步骤;
校验所述当前处理pod所在的所述PodGroup的最少资源需求量,若当前所述集群节点小于所述最少资源需求量,拒绝调度所述pod。
根据本发明的一些实施例,当调度所述pod的失败总数超过预设阈值,为所述当前处理pod所在的所述PodGroup分配锁定节点组;
在过滤阶段,调用节点评估算法,选取合适的集群节点并将所述集群节点纳入所述锁定节点组;
在所述锁定节点组中,基于所述pod的所述优先级高低,对所述pod从前往后进行排队。
根据本发明的一些实施例,当调度所述pod的失败总数超过预设阈值,且所述当前处理pod所在的所述PodGroup与所述锁定节点组的所述PodGroup不同,调用节点评估算法,选取所述锁定节点组之外的所述集群节点处理所述当前处理pod所在的所述PodGroup。
根据本发明的一些实施例,按照调度所述pod的失败总数超过预设阈值的百分比大小设定优先级。
根据本发明的一些实施例,当多个所述pod的优先级相同,根据所述pod所在的所述PodGroup的创建时间的先后对所述pod进行排序。
根据本发明的一些实施例,当多个所述pod的优先级相同,且所述pod所在的所述PodGroup的创建时间相同,根据所述pod的名称进行排序。
第二方面,本发明的技术方案提供一种Kubernetes中利用Coscheduling插件实现队列排序的系统,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如第一方面中任意一项所述的Kubernetes中利用Coscheduling插件实现队列排序的方法。
第三方面,本发明的技术方案提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行如第一方面中任意一项所述的Kubernetes中利用Coscheduling插件实现队列排序的方法。
本发明的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中摘要附图要与说明书附图的其中一幅完全一致:
图1为本发明一个实施例提供的Kubernetes中利用Coscheduling插件实现队列排序的方法的流程图;
图2为本发明另一个实施例提供的Kubernetes中利用Coscheduling插件实现队列排序的方法的流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
需要说明的是,虽然在系统示意图中进行了功能模块划分,在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于系统中的模块划分,或流程图中的顺序执行所示出或描述的步骤。说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
本发明提供了一种Kubernetes中利用Coscheduling插件实现队列排序的方法,综合考虑Pod之间的相互关系,能够及时、动态地支持用户的调度需求。可以较好的调度多个互相关联的进程组成的任务,但是在资源紧张或者集群多租户共享资源的情况下,低优先级的任务或者资源需求量高的任务可能长时间处于无法调度状态导致任务“饿死”。若被“饿死”的任务比较重要、优先级很高,则整个集群资源都无法合理的得到利用。因此多进程组PodGroup任务调度同时需要一种公平调度机制:保证因为某种原因长期饥饿达到临界状态之后被调度。本发明通过扩展完善自定义资源PodGroup,可实现在同一个集群/租户空间中资源紧张时对进程组进行资源队列排队机制、任务优先级策略,防止高消耗资源进程组始终无法调度的“饿死”状态,在高度可控、灵活调度的原则上,尽可能的提供集群整体资源的利用率。
参照图1,图1为本发明一个实施例提供的Kubernetes中利用Coscheduling插件实现队列排序的方法的流程图。
Kubernetes中利用Coscheduling插件实现队列排序的方法包括但是不仅限于步骤S110至步骤S130。
步骤S110,使用前置过滤算法对PodGroup进行前置过滤;
步骤S120,为前置过滤通过的PodGroup的多个pod设置优先级;
步骤S130,在处理PodGroup的集群节点中,基于pod的优先级高低,对pod从前往后进行排队。
在一实施例中,首先,使用前置过滤算法对PodGroup进行前置过滤,可以理解的是,可以是对pod总数小于最小运行任务数的PodGroup进行过滤,也可以是对当前集群节点小于PodGroup的最少资源需求量的情况进行过滤,避免不必要的处理资源浪费,然后对前置过滤通过的PodGroup的多个pod设置优先级,在处理PodGroup的集群节点中,基于pod的优先级高低,对pod从前往后进行排队,容易想到的是,可以是高优先级的Pod排列在低优先级的Pod之前,优先处理高优先级的Pod。综合考虑Pod之间的相互关系,调度器能够及时、动态地支持用户的调度需求。
可以理解的是,本实施例可以较好的调度多个互相关联的进程组成的任务,但是在资源紧张或者集群多租户共享资源的情况下,低优先级的任务或者资源需求量高的任务可能长时间处于无法调度状态导致任务“饿死”。若被“饿死”的任务比较重要、优先级很高,则整个集群资源都无法合理的得到利用。因此多进程组PodGroup任务调度同时需要一种公平调度机制:保证因为某种原因长期饥饿达到临界状态之后被调度。本发明通过扩展完善自定义资源PodGroup,可实现在同一个集群/租户空间中资源紧张时对进程组进行资源队列排队机制、任务优先级策略,防止高消耗资源进程组始终无法调度的“饿死”状态,在高度可控、灵活调度的原则上,尽可能的提供集群整体资源的利用率。
在一实施例中,首先,使用前置过滤算法对PodGroup进行前置过滤,可以理解的是,可以是对pod总数小于最小运行任务数的PodGroup进行过滤,也可以是对当前集群节点小于PodGroup的最少资源需求量的情况进行过滤,避免不必要的处理资源浪费,然后对前置过滤通过的PodGroup的多个pod设置优先级,在处理PodGroup的集群节点中,基于pod的优先级高低,对pod从前往后进行排队。使用前置过滤算法对PodGroup进行前置过滤,包括步骤;校验当前处理pod所在的PodGroup的pod总数,若pod总数小于最小运行任务数,拒绝调度pod。
可以理解的是,当pod总数小于最小运行任务数,调度器并不适合对当前处理的pod所在的PodGroup进行调度处理,所以拒绝调度当前处理的pod所在的PodGroup是较好的选择。
在一实施例中,首先,使用前置过滤算法对PodGroup进行前置过滤,可以理解的是,可以是对pod总数小于最小运行任务数的PodGroup进行过滤,也可以是对当前集群节点小于PodGroup的最少资源需求量的情况进行过滤,避免不必要的处理资源浪费,然后对前置过滤通过的PodGroup的多个pod设置优先级,在处理PodGroup的集群节点中,基于pod的优先级高低,对pod从前往后进行排队。使用前置过滤算法对PodGroup进行前置过滤,包括步骤;校验当前处理pod所在的PodGroup的最少资源需求量,若当前集群节点小于最少资源需求量,拒绝调度pod。
不仅是当pod总数小于最小运行任务数,调度器并不适合对当前处理的pod所在的PodGroup进行调度处理,当前集群节点小于当前处理pod所在的PodGroup的最少资源需求量,也是不适合对当前处理的pod所在的PodGroup进行调度处理的,所以拒绝调度当前处理pod。
参考图2,图2为本发明另一个实施例提供的Kubernetes中利用Coscheduling插件实现队列排序的方法的流程图。
Kubernetes中利用Coscheduling插件实现队列排序的方法包括但是不仅限于步骤S210至步骤S230。
步骤S210,当调度pod的失败总数超过预设阈值,为当前处理pod所在的PodGroup分配锁定节点组;
步骤S220,在过滤阶段,调用节点评估算法,选取合适的集群节点并将集群节点纳入锁定节点组;
步骤S230,在锁定节点组中,基于pod的优先级高低,对pod从前往后进行排队。
在一实施例中,首先,使用前置过滤算法对PodGroup进行前置过滤,可以理解的是,可以是对pod总数小于最小运行任务数的PodGroup进行过滤,也可以是对当前集群节点小于PodGroup的最少资源需求量的情况进行过滤,避免不必要的处理资源浪费,然后对前置过滤通过的PodGroup的多个pod设置优先级,在处理PodGroup的集群节点中,基于pod的优先级高低,对pod从前往后进行排队。使用前置过滤算法对PodGroup进行前置过滤,包括步骤;校验当前处理pod所在的PodGroup的pod总数,若pod总数小于最小运行任务数,拒绝调度pod。校验当前处理pod所在的PodGroup的最少资源需求量,若当前集群节点小于最少资源需求量,拒绝调度pod。
当调度pod的失败总数超过预设阈值,为当前处理pod所在的PodGroup分配锁定节点组;在过滤阶段,调用节点评估算法,选取合适的集群节点并将集群节点纳入锁定节点组;在锁定节点组中,基于pod的优先级高低,对pod从前往后进行排队。
本实施例通过完善自定义资源PodGroup,增加任务调度的最大容忍调度失败次数字段;同时扩充完善Scheduler Plugin调度插件提供的扩展点算法,在不同的扩展点实现节点的筛选和预留,将其纳入对应PodGroup对应的锁点节点组,被锁定的节点从纳入时刻不再接受新作业投递,直到锁定节点组的资源规格满足目标作业要求,在此期间非目标作业仅可使用锁定节点组外的节点进行调度;等待目标作业调度完成后,其他作业才可以重新在整个集群中进行调度,这样即可实现集群资源在所有进程组PodGroup之间的合理利用。
PodGroup增加最大调度失败次数字段(即调度pod的失败总数)后,相应的队列排序算法规则调整为:
一、Pod所在的PodGroup的当前调度失败次数超过阈值的优先排队:
1.调度失败次数超过阈值百分比越高,则优先排队;
2.调度失败次数百分比相同,则基于Pod的优先级进行排序;
3.调度失败次数百分比相同,优先级相同,则根据创建时间先后进行排序;
4.调度失败次数百分比相同,优先级相同,创建时间相同,则采用命名空间与名称的组合的自然排序。
二、Pod所在的PodGroup的当前调度失败次数不超过阈值或为空,则排队规则遵循原算法规则:
1.基于优先级的比较方式,高优先级的Pod会排在低优先级的Pod之前;
2.优先级相同则比较PodGroup的创建时间(无PodGroup的取Pod的创建时间),谁先创建谁在队列里边排在前边;
3.创建时间相同,则采用命名空间与名称的组合的自然排序。
在一实施例中,首先,使用前置过滤算法对PodGroup进行前置过滤,可以是对pod总数小于最小运行任务数的PodGroup进行过滤,也可以是对当前集群节点小于PodGroup的最少资源需求量的情况进行过滤,避免不必要的处理资源浪费,然后对前置过滤通过的PodGroup的多个pod设置优先级,在处理PodGroup的集群节点中,基于pod的优先级高低,对pod从前往后进行排队。使用前置过滤算法对PodGroup进行前置过滤,包括步骤;校验当前处理pod所在的PodGroup的pod总数,若pod总数小于最小运行任务数,拒绝调度pod。校验当前处理pod所在的PodGroup的最少资源需求量,若当前集群节点小于最少资源需求量,拒绝调度pod。
当调度pod的失败总数超过预设阈值,为当前处理pod所在的PodGroup分配锁定节点组;在过滤阶段,调用节点评估算法,选取合适的集群节点并将集群节点纳入锁定节点组;在锁定节点组中,基于pod的优先级高低,对pod从前往后进行排队。当调度pod的失败总数超过预设阈值,且当前处理pod所在的PodGroup与锁定节点组的PodGroup不同,调用节点评估算法,选取锁定节点组之外的集群节点处理当前处理pod所在的PodGroup。
因为经过队列排序后,调度失败次数超过阈值的会优先入队进行调度,所以应该在前置过滤扩展点检查是否存在调度失败超过阈值的PodGroup,若存在,则启动对应PodGroup的锁定节点组机制,以便在下一步的过滤扩展点进行节点选取。优化后的前置过滤算法如下:
1.校验Pod所在PodGroupA的所有Pod总和,若小于PodGroupA定义的最小运行任务数,则直接拒绝调度此Pod;
2.校验调度失败缓存队列,若队列不为空,且当前没有启动锁定节点组机制,则取出队首的PodGroupB,标记PodGroupB启动锁定节点组机制
3.若PodGroupA(当前调度Pod所在的PodGroup)与PodGroupB(启动锁定节点组PodGroup)不同,校验PodGroupA定义的最少资源需求量,注意此时资源申请只能在锁定节点组之外的节点进行,若当前集群资源不满足要求,则拒绝调度,同时若PodGroupA定义了最大调度失败次数,则更新PodGroupA的状态字段,将当前调度失败次数执行+1操作;利用拒绝缓存和满足缓存两个缓存,使得PodGroup组内的所有Pod只需校验一次资源需求量;
4.若PodGroupA与PodGroupB相同,即为当前PogGroup已经启动锁定节点组机制,需要进行调度,直接通过过滤。
在一实施例中,首先,使用前置过滤算法对PodGroup进行前置过滤,可以理解的是,可以是对pod总数小于最小运行任务数的PodGroup进行过滤,也可以是对当前集群节点小于PodGroup的最少资源需求量的情况进行过滤,避免不必要的处理资源浪费,然后对前置过滤通过的PodGroup的多个pod设置优先级,在处理PodGroup的集群节点中,基于pod的优先级高低,对pod从前往后进行排队。使用前置过滤算法对PodGroup进行前置过滤,包括步骤;校验当前处理pod所在的PodGroup的pod总数,若pod总数小于最小运行任务数,拒绝调度pod。校验当前处理pod所在的PodGroup的最少资源需求量,若当前集群节点小于最少资源需求量,拒绝调度pod。
当调度pod的失败总数超过预设阈值,为当前处理pod所在的PodGroup分配锁定节点组;在过滤阶段,调用节点评估算法,选取合适的集群节点并将集群节点纳入锁定节点组;在锁定节点组中,基于pod的优先级高低,对pod从前往后进行排队。按照调度pod的失败总数超过预设阈值的百分比大小设定优先级。
在一实施例中,首先,使用前置过滤算法对PodGroup进行前置过滤,可以理解的是,可以是对pod总数小于最小运行任务数的PodGroup进行过滤,也可以是对当前集群节点小于PodGroup的最少资源需求量的情况进行过滤,避免不必要的处理资源浪费,然后对前置过滤通过的PodGroup的多个pod设置优先级,在处理PodGroup的集群节点中,基于pod的优先级高低,对pod从前往后进行排队。当多个pod的优先级相同,根据pod所在的PodGroup的创建时间的先后对pod进行排序。
在一实施例中,首先,使用前置过滤算法对PodGroup进行前置过滤,可以理解的是,可以是对pod总数小于最小运行任务数的PodGroup进行过滤,也可以是对当前集群节点小于PodGroup的最少资源需求量的情况进行过滤,避免不必要的处理资源浪费,然后对前置过滤通过的PodGroup的多个pod设置优先级,在处理PodGroup的集群节点中,基于pod的优先级高低,对pod从前往后进行排队。当多个pod的优先级相同,根据pod所在的PodGroup的创建时间的先后对pod进行排序。当多个pod的优先级相同,且pod所在的PodGroup的创建时间相同,根据pod的名称进行排序。
可以理解的是,当存在A1、A2、A3序列和B1、B2、B3序列,A1、A2、A3属于PodGroupA,B1、B2、B3属于PodGroupB,假设PodGroupA的优先级和创建时间都与PodGroupB相同,即便是调度器接收到的pod的顺序是杂乱的,如A2、A3、B1、B2、A1、B3,本实施例的Kubernetes中利用Coscheduling插件实现队列排序的方法也会自动将序列按照名称排序为A1、A2、A3、B1、B2、B3,能够很好地提升处理效率。当然本实施例提到的仅仅是示例,其他方式的按名称排序也属于本发明的保护范围,本实施例对其不构成限制,即按照优先级优先排列一个PodGroup,或者按照创建时间优先排列一个PodGroup,亦或是按照名称优先排列一个PodGroup,都属于本发明的保护范围内。
在一实施例中,首先,使用前置过滤算法对PodGroup进行前置过滤,可以理解的是,可以是对pod总数小于最小运行任务数的PodGroup进行过滤,也可以是对当前集群节点小于PodGroup的最少资源需求量的情况进行过滤,避免不必要的处理资源浪费,然后对前置过滤通过的PodGroup的多个pod设置优先级,在处理PodGroup的集群节点中,基于pod的优先级高低,对pod从前往后进行排队。使用前置过滤算法对PodGroup进行前置过滤,包括步骤;校验当前处理pod所在的PodGroup的pod总数,若pod总数小于最小运行任务数,拒绝调度pod。校验当前处理pod所在的PodGroup的最少资源需求量,若当前集群节点小于最少资源需求量,拒绝调度pod。当调度pod的失败总数超过预设阈值,为当前处理pod所在的PodGroup分配锁定节点组。
Coscheduling插件原算法逻辑没有使用过滤扩展点,优化后的技术方案使用过滤扩展点进行启动锁定节点组机制后的节点选取算法逻辑,为了最优选择节点,kubernetes调度器在节点选取的时候需要考虑节点的资源总和、可用资源总和、节点压力、节点亲和性/反亲和性、污点与容忍等策略,这些策略通过插件的方式配置到集群中。对于每个节点,调度器将按照其配置顺序调用这些过滤插件。如果任何过滤插件将节点标记为不可行,则不会为该节点调用剩下的过滤插件。节点在此阶段可以被同时进行评估。
优化后的技术方案算法逻辑如下:
1.校验当前是否启动锁定节点组机制,若已启动,则获取启动锁定节点组机制对应的的PodGroupB若当前Pod对应的PodGroupA与PodGroupB相同,则表示当前Pod所在PodGroup启动了锁定节点组机制,判断当前启动锁定节点组机制所对应的PodGroup的资源是否满足:
若不满足,则表示需要进行节点选取,调用kubernetes调度器的节点评估算法,选取出合理的节点,将其纳入锁定节点组;
若满足,则表示当前锁定节点组机制完成锁定,直接返回成功;
若当前Pod对应的PodGroupA与PodGroupB不同,则表示当前Pod可能需要暂定调度,为锁定节点组机制让行,为此需要判断当前启动锁定节点组机制所对应的PodGroup的资源是否满足;
若不满足,则表示需要暂定调度;返回失败,过滤掉所有节点,使得当前Pod对应的PodGroup A重新入队调度;
若满足,则表示不需要暂定调度,返回成功。
基于性能考虑,设计两个PodGroup缓存,分别表示所有PodGroup是否因为启动锁定节点组机制被暂定调度;这样同组PodGroup的Pod只需判断一次。
2.若未启动锁定节点组机制,则不需要对节点进行过滤,直接返回成功即可。
在一实施例中,首先,使用前置过滤算法对PodGroup进行前置过滤,可以理解的是,可以是对pod总数小于最小运行任务数的PodGroup进行过滤,也可以是对当前集群节点小于PodGroup的最少资源需求量的情况进行过滤,避免不必要的处理资源浪费,然后对前置过滤通过的PodGroup的多个pod设置优先级,在处理PodGroup的集群节点中,基于pod的优先级高低,对pod从前往后进行排队。Kubernetes中利用Coscheduling插件实现队列排序的方法包括:前置过滤阶段、过滤阶段、后置过滤阶段和准许阶段。
Coscheduling调度插件的后置过滤算法逻辑如下:
1.若Pod在前置过滤或者过滤阶段没有可用节点,则调用此算法
2.若当前Pod所在PodGroup的最小运行任务数已经满足条件,则不需要拒绝整个PodGroup的所有Pod;
3.若当前Pod所在PodGroup的最小运行任务数要求已经超过90%,则也不需要拒绝整个PodGroup的所有Pod,这样做的目的是避免过滤掉已经快要进行调度的PodGroup。
4.否则,拒绝掉同组PodGroup的所有Pod。
在准许阶段,Coscheduling调度插件的准许算法逻辑为整个插件的核心,通过Permit插件的延迟绑定功能,实现了同组PodGroup的所有Pod在集群资源不满足的情况下进行等待,等待积累的Pod数目满足最小运行
任务数时,再统一运行同一个PodGruop的所有Pod进行绑定并创建。
其算法逻辑如下:
1.获取插件设置的调度超时时间
2.判断当前Pod所在PodGruop中可以运行但是正处于等待状态的Pod数量,若小于最小运行任务数,则此Pod虽然可以运行,但是需要等待,设置其状态为等待,并设置超时时间;
3.若等待状态的Pod数量大于等于最小运行任务数,则此PodGruop进程组满足了调度条件,通知其处于等待状态的Pod进入准许状态,从而进行绑定周期优化后的技术方案需要增加释放锁定节点组的功能,避免锁定节点组的节点不能参与集群调度:
1.获取插件设置的调度超时时间;
2.判断当前Pod所在PodGruop中可以运行但是正处于等待状态的Pod数量,若小于最小运行任务数,则此Pod虽然可以运行,但是需要等待,设置其状态为等待,并设置超时时间;
3.若等待状态的Pod数量大于等于最小运行任务数,则此PodGruop进程组满足了调度条件,通知其处于等待状态的Pod进入准许状态,从而进行绑定周期;然后删除锁定节点组的节点标记,使得锁定节点组可以参与到整个集群的节点调度中。
在一实施例中,Kubernetes中利用Coscheduling插件实现队列排序的方法还包括反保留阶段,反保留阶段Coscheduling调度插件的反保留算法逻辑如下:
1.若Pod在Permit阶段设置为等待状态,超过了设置的超时时间,则进入UnReserve算法;
2.拒绝掉当前Pod所在PodGroup的所有Pod,避免剩余的Pod进行长时间的无效等待。
本发明还提供一种Kubernetes中利用Coscheduling插件实现队列排序的系统,包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现如上述的Kubernetes中利用Coscheduling插件实现队列排序的方法。
处理器和存储器可以通过总线或者其他方式连接。
存储器作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序以及非暂态性计算机可执行程序。此外,存储器可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施方式中,存储器可选包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至该处理器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
需要说明的是,本实施例中的Kubernetes中利用Coscheduling插件实现队列排序的系统,可以包括有业务处理模块、边缘端数据库、服务端版本信息寄存器、数据同步模块,处理器执行计算机程序时实现如上述应用在Kubernetes中利用Coscheduling插件实现队列排序的系统的Kubernetes中利用Coscheduling插件实现队列排序的方法。
以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
此外,本发明的一个实施例还提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机可执行指令,该计算机可执行指令被一个处理器或控制器执行,例如,被上述终端实施例中的一个处理器执行,可使得上述处理器执行上述实施例中的Kubernetes中利用Coscheduling插件实现队列排序的方法。
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统可以被实施为软件、固件、硬件及其适当的组合。某些物理组件或所有物理组件可以被实施为由处理器,如中央处理器、数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。
以上是对本发明的较佳实施进行了具体说明,但本发明并不局限于上述实施方式,熟悉本领域的技术人员在不违背本发明精神的前提下还可作出种种的等同变形或替换,这些等同的变形或替换均包含在本发明权利要求所限定的范围内。
以上所述本发明的具体实施方式,并不构成对本发明保护范围的限定。任何根据本发明的技术构思所做出的各种其他相应的改变与变形,均应包含在本发明权利要求的保护范围内。
Claims (10)
1.一种Kubernetes中利用Coscheduling插件实现队列排序的方法,其特征在于,包括以下步骤:
使用前置过滤算法对PodGroup进行前置过滤;
为前置过滤通过的所述PodGroup的多个pod设置优先级;
在处理所述PodGroup的集群节点中,基于所述pod的所述优先级高低,对所述pod从前往后进行排队。
2.根据权利要求1所述的一种Kubernetes中利用Coscheduling插件实现队列排序的方法,其特征在于,所述使用前置过滤算法对PodGroup进行前置过滤,包括步骤;
校验当前处理pod所在的所述PodGroup的pod总数,若所述pod总数小于最小运行任务数,拒绝调度所述pod。
3.根据权利要求1所述的一种Kubernetes中利用Coscheduling插件实现队列排序的方法,其特征在于,所述使用前置过滤算法对PodGroup进行前置过滤,包括步骤;
校验所述当前处理pod所在的所述PodGroup的最少资源需求量,若当前所述集群节点小于所述最少资源需求量,拒绝调度所述pod。
4.根据权利要求3所述的一种Kubernetes中利用Coscheduling插件实现队列排序的方法,其特征在于:
当调度所述pod的失败总数超过预设阈值,为所述当前处理pod所在的所述PodGroup分配锁定节点组;
在过滤阶段,调用节点评估算法,选取合适的集群节点并将所述集群节点纳入所述锁定节点组;
在所述锁定节点组中,基于所述pod的所述优先级高低,对所述pod从前往后进行排队。
5.根据权利要求4所述的一种Kubernetes中利用Coscheduling插件实现队列排序的方法,其特征在于:
当调度所述pod的失败总数超过预设阈值,且所述当前处理pod所在的所述PodGroup与所述锁定节点组的所述PodGroup不同,调用节点评估算法,选取所述锁定节点组之外的所述集群节点处理所述当前处理pod所在的所述PodGroup。
6.根据权利要求4所述的一种Kubernetes中利用Coscheduling插件实现队列排序的方法,其特征在于,按照调度所述pod的失败总数超过预设阈值的百分比大小设定优先级。
7.根据权利要求1或6所述的一种Kubernetes中利用Coscheduling插件实现队列排序的方法,其特征在于,当多个所述pod的优先级相同,根据所述pod所在的所述PodGroup的创建时间的先后对所述pod进行排序。
8.根据权利要求7所述的一种Kubernetes中利用Coscheduling插件实现队列排序的方法,其特征在于,当多个所述pod的优先级相同,且所述pod所在的所述PodGroup的创建时间相同,根据所述pod的名称进行排序。
9.一种Kubernetes中利用Coscheduling插件实现队列排序的系统,其特征在于,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如权利要求1至8中任意一项所述的Kubernetes中利用Coscheduling插件实现队列排序的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行如权利要求1至8任意一项所述的Kubernetes中利用Coscheduling插件实现队列排序的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111641742.9A CN114489970A (zh) | 2021-12-29 | 2021-12-29 | Kubernetes中利用Coscheduling插件实现队列排序的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111641742.9A CN114489970A (zh) | 2021-12-29 | 2021-12-29 | Kubernetes中利用Coscheduling插件实现队列排序的方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114489970A true CN114489970A (zh) | 2022-05-13 |
Family
ID=81508109
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111641742.9A Pending CN114489970A (zh) | 2021-12-29 | 2021-12-29 | Kubernetes中利用Coscheduling插件实现队列排序的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114489970A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024021489A1 (zh) * | 2022-07-29 | 2024-02-01 | 天翼云科技有限公司 | 一种任务调度方法、装置及Kubernetes调度器 |
-
2021
- 2021-12-29 CN CN202111641742.9A patent/CN114489970A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024021489A1 (zh) * | 2022-07-29 | 2024-02-01 | 天翼云科技有限公司 | 一种任务调度方法、装置及Kubernetes调度器 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2020181813A1 (zh) | 一种基于数据处理的任务调度方法及相关设备 | |
US8458712B2 (en) | System and method for multi-level preemption scheduling in high performance processing | |
US20140165061A1 (en) | Statistical packing of resource requirements in data centers | |
CN109783225B (zh) | 一种多租户大数据平台的租户优先级管理方法及系统 | |
CN114840304B (zh) | 一种容器调度方法、电子设备和存储介质 | |
CN105022668B (zh) | 一种作业调度方法及系统 | |
CN109710416B (zh) | 资源调度方法及装置 | |
CN107515781B (zh) | 一种基于多处理器的确定性任务调度及负载均衡系统 | |
CN111930493A (zh) | 集群中NodeManager状态管理方法、装置及计算设备 | |
CN113886069A (zh) | 一种资源分配方法、装置、电子设备及存储介质 | |
CN112799837A (zh) | 一种容器动态平衡调度方法 | |
CN115617497A (zh) | 线程处理方法、调度组件、监测组件、服务器和存储介质 | |
CN106775975B (zh) | 进程调度方法及装置 | |
CN114489970A (zh) | Kubernetes中利用Coscheduling插件实现队列排序的方法及系统 | |
CN112148481B (zh) | 一种执行仿真测试任务的方法、系统、设备及介质 | |
CN113672335A (zh) | 容器调度方法、装置、电子装置和存储介质 | |
CN117519930A (zh) | 批量任务的执行方法、装置及电子设备 | |
CN111143063B (zh) | 任务的资源预约方法及装置 | |
CN111831408A (zh) | 异步任务处理方法、装置、电子设备及介质 | |
CN116643858A (zh) | 基于业务优先级pod再调度方法、装置、设备及介质 | |
CN113301087B (zh) | 资源调度方法、装置、计算设备和介质 | |
CN115098226A (zh) | 一种ai平台故障修复方法、设备、存储介质 | |
CN116820697A (zh) | 定时任务调度方法、装置、设备和存储介质 | |
CN116450328A (zh) | 内存分配方法、装置、计算机设备和存储介质 | |
CN112286651A (zh) | 一种自动化测试资源管理的方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |