本申请涉及计算机技术领域,特别是涉及一种资源调度方法、装置、电子设备及计算机可读存储介质。
背景技术:
在人工智能时代,在对各种机器模型进行大量的深度学习时,需要cpu(中央处理器)、gpu(图形处理器)、内存等资源,而kubernetes(简称k8s,谷歌开源的容器集群管理系统,提供应用部署、维护、扩展机制等功能)容器集群管理系统的容器资源可以很好的满足要求,容器作为训练环境,需要占用机器的资源,以提供给机器模型进行训练。
在进行模型训练时,通过容器将机器资源进行划分和利用,但模型训练有多种不同的训练任务,多机多卡任务、单机多卡任务等对资源粒度的要求不一样,因此会产生资源的碎片化,另一方面,模型训练任务完成的时间有先后,这也会导致资源碎片化,致使资源利用率不高。
技术实现要素:
本申请主要解决的技术问题是提供一种资源调度方法、装置、电子设备及计算机可读存储介质,能够提高资源利用率。
为了解决上述问题,本申请第一方面提供了一种资源调度方法,所述方法包括:接收到第一任务的运行请求,基于所述运行请求获取所述第一任务的资源需求信息;判断当前空闲资源是否满足所述资源需求信息;若所述当前空闲资源不满足所述资源需求信息,调用所述当前空闲资源以及第二任务所占用的至少部分资源运行所述第一任务;其中,所述第二任务为弹性伸缩任务。
为了解决上述问题,本申请第二方面提供了一种资源调度装置,包括:信息获取模块,所述信息获取模块用于接收到第一任务的运行请求,基于所述运行请求获取所述第一任务的资源需求信息;资源判断模块,所述资源判断模块用于判断当前空闲资源是否满足所述资源需求信息;资源调用模块,所述资源调用模块用于在资源判断模块判断出所述当前空闲资源不满足所述资源需求信息时,调用所述当前空闲资源以及第二任务所占用的至少部分资源运行所述第一任务;其中,所述第二任务为弹性伸缩任务。
为了解决上述问题,本申请第三方面提供了一种电子设备,包括相互耦接的存储器和处理器,所述处理器用于执行所述存储器中存储的程序指令,以实现上述第一方面的资源调度方法。
为了解决上述问题,本申请第四方面提供了一种计算机可读存储介质,其上存储有程序指令,所述程序指令被处理器执行时实现上述第一方面的资源调度方法。
本发明的有益效果是:区别于现有技术的情况,本申请在接收到第一任务的运行需求时,获取第一任务的资源需求信息,然后判断当前空闲资源是否满足资源需求信息,若当前空闲资源不满足资源需求信息,则调用当前空闲资源以及第二任务所占用的至少部分资源运行第一任务。本申请的第二任务为弹性伸缩任务,通过将第二任务所占用的至少部分资源进行调用,利用当前空闲资源以及第二任务所占用的至少部分资源运行第一任务,使原本碎片化的当前空闲资源可以用于第一任务,从而可以使资源达到最大利用效果。
附图说明
图1是本申请资源调度方法一实施例的流程示意图;
图2是图1中步骤s13一实施例的流程示意图;
图3是图2中步骤s132一实施例的流程示意图;
图4是本申请资源调度方法另一实施例的流程示意图;
图5是本申请资源调度方法一应用场景的流程示意图;
图6是本申请资源调度方法一应用场景的框架示意图;
图7是本申请资源调度装置一实施例的框架示意图;
图8是本申请电子设备一实施例的框架示意图;
图9是本申请计算机可读存储介质一实施例的框架示意图。
具体实施方式
下面结合说明书附图,对本申请实施例的方案进行详细说明。
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、接口、技术之类的具体细节,以便透彻理解本申请。
本文中术语“系统”和“网络”在本文中常被可互换使用。本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。此外,本文中的“多”表示两个或者多于两个。
本申请的资源调度方法的执行主体可以是硬件或者软件。当执行主体为硬件时,可以是各种电子设备,包括但不限于智能手机、平板电脑、电子书阅读器、车载终端等等。当执行主体为软件时,可以安装在上述所列举的电子设备中,其可以实现成用来提供分布式任务的多个软件或软件模块,也可以实现成单个软件或软件模块。在此不做具体限定。
请参阅图1,图1是本申请资源调度方法一实施例的流程示意图。具体而言,可以包括如下步骤:
步骤s11:接收到第一任务的运行请求,基于所述运行请求获取所述第一任务的资源需求信息。
以资源调度方法的执行主体为资源管理器为例,资源管理器可以接收到第一任务的运行请求,即用户可以向资源管理器提交第一任务,例如,可以提交ai模型训练任务或者应用程序。可以理解的是,资源管理器获取第一任务后,可以对第一任务进行解析,提取该第一任务的资源需求信息,即可以基于运行请求获取第一任务的资源需求信息。第一任务的运行请求中包含有执行该第一任务所必需的资源需求信息,如,任务类型、任务量化值等,而根据任务类型可以进一步获得cpu及gpu最大使用率、内存使用大小、任务执行总时间等资源需求信息。这些资源需求信息中的需求,实际上是执行任务时系统需要达到的执行状态,也即,资源需求信息是执行该任务时需求的执行状态信息。
可以理解的是,任务的资源需求信息可能包含两部分,一部分为说明性的,一部分为隐含性的,说明性的资源需求信息可以通过任务的任务头参数直接获取,而隐含性的资源需求信息需要根据任务类型通过每种任务类型的常规资源需求来获取。而为使两部分资源需求信息都能够被获取到,对第一任务进行解析的过程中,可以得到任务头参数和任务类型,通过任务头参数,直接提取任务头参数中的资源需求信息,通过任务类型,在预设的任务类型资源需求库中查找提取出与任务类型所对应的资源需求信息;于是,可以将任务头参数中的资源需求信息和任务类型所对应的资源需求信息规格化,生成第一任务的资源需求信息。任务类型资源需求库可以根据先前已知的任务类型与资源需求信息的对应关系而预先设置;由此,在获取资源需求信息时,可以直接根据任务的任务类型在任务类型资源需求库中查找并获取对应的资源需求信息。
步骤s12:判断当前空闲资源是否满足所述资源需求信息。若所述当前空闲资源不满足所述资源需求信息,则执行步骤s13,若所述当前空闲资源满足所述资源需求信息,则不需要进行资源调度,流程结束。
具体地,当前空闲资源指的是组成集群的所有计算机设备的当前空闲资源总和,当前空闲资源可以包括集群的内存空闲资源、cpu空闲资源和gpu空闲资源,例如,集群的内存资源、cpu资源和gpu资源未使用时分别是内存资源300g、cpu资源80核、gpu资源8核,而集群当前被占用内存资源为200g,当前被占用cpu资源为50核,当前被占用gpu资源为5核,那么当前空闲资源分别为内存空闲资源为100g、cpu空闲资源为30核和gpu空闲资源为3核。在获取到当前空闲资源后,则可以判断当前空闲资源是否满足第一任务的资源需求信息,进而判断是否需要进行资源调度。
步骤s13:若所述当前空闲资源不满足所述资源需求信息,调用所述当前空闲资源以及第二任务所占用的至少部分资源运行所述第一任务;其中,所述第二任务为弹性伸缩任务。
本申请的第二任务为弹性伸缩任务,弹性伸缩任务具有容错性与弹性调度的能力,针对弹性伸缩任务所需的资源分配是弹性的资源分配方式,弹性的资源分配方式指的是任务的资源需求可以动态计算、也可静态配置,根据实际需求和实际空闲资源选择合适的资源;因此,在当前空闲资源不满足第一任务的资源需求时,可以通过调整第二任务的资源,调用当前空闲资源以及第二任务所占用的至少部分资源以运行第一任务。以第二任务为ai弹性伸缩分布式训练任务为例,ai弹性伸缩分布式训练任务用于实现容错和弹性调度的分布式深度学习,可以极大提升集群的总体利用率,同时显著减少用户提交作业之后等待作业启动的时间(pendingtime)。容错是指作业不受其中进程数量变化的影响,在弹性调度过程中,作业里的进程数量会随集群工作量情况相应增减,作业容错可以配合系统实现弹性调度;在这个过程中,容错通常由分布式框架实现,当有进程挂掉,或者新的进程加入时,作业不会暂停或者重启,而是平滑地继续;而弹性调度是由分布式框架和分布式操作系统(集群管理系统)一起实现的,当有进程挂掉的时候,分布式框架通知集群管理系统基于集群资源新启进程来补位。例如,一个集群有n个gpu,但正在执行的所有任务将n个任务全部使用了,其中第二任务使用了其中两个;当没有弹性调度机制时,若要求占用一个gpu的第一任务需要执行时,需要等待当前正在执行的某个任务结束才能开始,这个等待时间可能高达数天甚至数周;而拥有弹性调度能力之后,第二任务可以在一个gpu上运行,并释放一个gpu以供第一任务立即运行,这种情况下,集群整体效用是100%,故可以提升利用集群进行深度学习的效率和资源利用率(效用)。
上述方案,在接收到第一任务的运行需求时,获取第一任务的资源需求信息,然后判断当前空闲资源是否满足资源需求信息,若当前空闲资源不满足资源需求信息,由于第二任务为弹性伸缩任务,因此可以通过调用当前空闲资源以及第二任务所占用的至少部分资源运行第一任务,使原本碎片化的当前空闲资源可以用于第一任务,从而可以使资源达到最大利用效果。
请结合图2,图2是图1中步骤s13一实施例的流程示意图。在一实施例中,上述步骤s13具体可以包括:
步骤s131:如果当前空闲资源不满足所述资源需求信息,确定所述第一任务的资源需求信息与所述当前空闲资源的资源需求差值。
步骤s132:从所述第二任务所占用的资源中调用与所述资源需求差值大小相同的资源。
步骤s133:通过所述当前空闲资源以及所述第二任务中与所述资源需求差值大小相同的资源运行所述第一任务。
可以理解的是,在当前空闲资源不满足第一任务的资源需求时,可以通过缩减第二任务的资源,然后将第二任务缩减后所空出的资源与原本的空闲资源一起用于运行第一任务。因此,需要先确定缩减第二任务的资源的多少,即在当前空闲资源不满足资源需求信息时,需要先确定第一任务的资源需求信息与当前空闲资源的资源需求差值,然后从第二任务所占用的资源中调用与资源需求差值大小相同的资源,于是可以通过当前空闲资源以及第二任务中与资源需求差值大小相同的资源运行第一任务。通过这样的方式,能够保证资源达到最大利用效果。
进一步地,请结合图3,图3是图2中步骤s132一实施例的流程示意图。在一实施例中,上述步骤s132具体可以包括:
步骤s1321:获取所述第二任务中所有pod节点的资源分配信息。
步骤s1322:选择资源分配信息满足所述资源需求差值的至少一个pod节点。
步骤s1323:对所述满足所述资源需求差值的至少一个pod节点的资源进行缩减,空闲出与所述资源需求差值大小相同的资源。
在kubernetes(k8s)集群中,pod是所有业务类型的基础,也是k8s管理的最小单位级,pod是一个或多个容器的组合,这些容器共享存储、网络和命名空间,以及如何运行的规范,在pod中,所有容器都被统一安排和调度,并运行在共享的上下文中。由于第二任务为弹性伸缩任务,以第二任务为ai弹性伸缩分布式训练任务为例,分布式训练任务包括多个pod节点,每个pod节点可以包括一个或多个容器,容器占有机器的资源,提供给ai做训练,此时可以视为将第二任务分为若干个子任务,而每个pod节点执行其中的一个子任务。因此,为了调度处资源以运行第一任务,需要获取第二任务中所有pod节点的资源分配信息,然后从中选择资源分配信息满足资源需求差值的至少一个pod节点来进行资源的缩减,以使进行了资源缩减后的pod节点仍然可以满足执行原来的子任务的条件,且可以空闲出与资源需求差值大小相同的资源,以使空闲出的资源可以与上述的当前空闲资源一起执行第一任务。
在一实施方式中,上述步骤s1323具体可以包括:删除所述满足所述资源需求差值的至少一个pod节点,空闲出与所述资源需求差值大小相同的资源。具体地,在选择出资源分配信息满足资源需求差值的pod节点后,若该pod节点的资源恰好与资源需求差值大小相同,此时,可以判断所请求的第一任务的重要程度是否大于该pod节点原本执行的子任务,若所请求的第一任务的重要程度较高,则可以将该pod节点的资源删除,将该pod节点原本执行的子任务进行挂起,使空闲出的资源可以与上述的当前空闲资源一起来满足第一任务的资源需求信息,进而可以运行第一任务;而在第一任务执行完毕后,原本删除的pod节点可以再次恢复,以重新执行原先的子任务。
可以理解的是,资源大于资源需求差值的pod节点可以有一个或者多个。在一个实施场景中,当资源大于资源需求差值的pod节点的个数仅有一个时,只能对该满足资源需求差值的pod节点的资源进行缩减,从而可以空闲出与资源需求差值大小相同的资源,以实现通过调用当前空闲资源以及第二任务的部分资源来运行第一任务,并且缩减后的pod节点的资源仍然满足执行第二任务的条件。
在另一个实施场景中,当资源大于资源需求差值的pod节点的个数有多个时,此时上述步骤s1322可以包括:选取资源大于所述资源需求差值的所有pod节点作为满足所述资源需求差值pod节点。可以理解的是,若仅选取资源大于资源需求差值的pod节点中的一个来作为满足资源需求差值pod节点,并对其进行资源缩减,虽然缩减后的pod节点的资源仍然能够满足执行原来的子任务,但是可能出现子任务处理过程偏慢、从而影响整体任务的执行效率的情况,因此,可以选择资源大于资源需求差值的所有pod节点作为满足资源需求差值pod节点,对每一个满足资源需求差值pod节点均进行一定的资源缩减,从而可以从所有满足资源需求差值的pod节点总共空闲出与资源需求差值大小相同的资源,以实现通过调用当前空闲资源以及第二任务的部分资源来运行第一任务,并且缩减后的每个pod节点的资源仍然满足执行原本子任务的条件,且不会影响整体任务的执行效率。
进一步地,在一实施方式中,上述步骤s1323具体可以包括:将每个所述满足所述资源需求差值的pod节点的资源由小到大进行排序;选取资源最小的pod节点进行资源缩减,空闲出与所述资源需求差值大小相同的资源。
可以理解的是,为使满足资源需求差值的pod节点的资源能够合理被调用,将获得的每个满足资源需求差值的pod节点按照资源数量由小至大进行排序,然后选取资源最小的pod节点作为目标pod节点,并对目标pod节点进行资源缩减以空闲出与资源需求差值大小相同的资源。由于目标pod节点在进行资源缩减后,其原本执行的子任务可能被挂起,此时,目标pod节点剩余未被缩减的资源在子任务恢复之前,并未被利用起来,使得资源利用率未达到最大,因此,选取满足资源需求差值且与资源需求差值相差最小的pod节点来进行缩减,可以防止缩减后的pod节点中的剩余资源未被利用而未达到最大资源利用率,实现了资源最大利用效果。
请参阅图4,图4是本申请资源调度方法另一实施例的流程示意图。具体而言,可以包括如下步骤:
步骤s41:接收到第一任务的运行请求,基于所述运行请求获取所述第一任务的资源需求信息。
步骤s42:判断当前空闲资源是否满足所述资源需求信息。若所述当前空闲资源不满足所述资源需求信息,则执行步骤s43,若所述当前空闲资源满足所述资源需求信息,则执行步骤s44。
步骤s43:若所述当前空闲资源不满足所述资源需求信息,调用所述当前空闲资源以及第二任务所占用的至少部分资源运行所述第一任务;其中,所述第二任务为弹性伸缩任务。
本实施例中,步骤s41-s43与本申请上述实施例的步骤s11-s13基本类似,此处不再赘述。
步骤s44:如果当前空闲资源满足所述资源需求信息,则从所述当前空闲资源中选取满足所述资源需求信息的资源来运行所述第一任务。
可以理解的是,在提交第一任务的运行请求之后,可以通过判断当前空闲资源是否满足资源需求信息;若当前空闲资源不满足资源需求信息,由于第二任务为弹性伸缩任务,因此可以通过调用当前空闲资源以及第二任务所占用的至少部分资源运行第一任务,使原本碎片化的当前空闲资源可以用于第一任务,从而可以使资源达到最大利用效果;若当前空闲资源满足资源需求信息,则将第一任务直接调度到集群中,然后从集群的当前空闲资源中选取满足资源需求信息的资源来运行第一任务。
另外,本申请还可以进行跨集群的资源调度,即,在接收到第一任务的运行需求时,当前集群的空闲资源不满足第一任务的资源需求信息,且不能够通过上述的资源调度方法实现运行第一任务,此时可以利用其他集群的资源来进行资源调度,以实现在其他集群运行该第一任务。
请结合图5,图5是本申请资源调度方法一应用场景的流程示意图。在一应用场景中,kubernetes集群运行有ai弹性伸缩分布式训练任务,若用户又提交了一ai单机训练任务,则系统可以根据提交的ai单机训练任务,获取ai单机训练任务需要的资源信息,然后系统查询当前集群资源剩余的情况,并判断当前剩余资源是否满足ai单机训练任务的资源要求;若当前剩余资源满足ai单机训练任务的资源要求,则直接将ai单机训练任务调度到集群中;若当前剩余资源不满足ai单机训练任务的资源要求,则系统需要计算在剩余资源的基础上,还需要腾出的资源信息,并根据需要腾出的资源信息,在确保ai弹性伸缩分布式训练任务正常运行的情况下,通过缩减或删除ai弹性伸缩分布式训练任务中的特定的pod节点的资源,以使集群的资源满足ai单机训练任务的资源需求。
在其他应用场景中,用户也可能同时提交了ai弹性伸缩分布式训练任务和ai单机训练任务,此时系统可以根据提交的ai弹性伸缩分布式训练任务和ai单机训练任务,获取ai弹性伸缩分布式训练任务和ai单机训练任务一共需要的资源信息,然后系统查询当前集群资源剩余的情况,并判断当前剩余资源是否满足ai弹性伸缩分布式训练任务和ai单机训练任务的资源要求;若当前剩余资源满足ai弹性伸缩分布式训练任务和ai单机训练任务的资源要求,则直接将ai弹性伸缩分布式训练任务和ai单机训练任务调度到集群中;若当前剩余资源不满足ai弹性伸缩分布式训练任务和ai单机训练任务的资源要求,则系统需要计算在剩余资源的基础上,在确保ai弹性伸缩分布式训练任务正常运行的情况下,通过缩减或删除ai弹性伸缩分布式训练任务中的特定的pod节点的资源,以使集群的资源满足ai弹性伸缩分布式训练任务和ai单机训练任务的资源需求。
请结合图5和图6,其中,图6是本申请资源调度方法一应用场景的框架示意图。集群有多个node节点(机器),其中一机器的资源为8gpu、80cpu、300g内存。任务1为ai弹性伸缩分布式训练任务,任务1包括多个pod,pod可以包括一个或多个容器,容器占有机器的资源,提供给ai做训练。在集群工作的过程中,对资源的划分会产生资源的碎片化,例如机器的剩余资源为1gpu、10cpu、60g内存,如果这时候还有一个任务需要3gpu、30gpu、60g内存就是不能申请到资源,即机器的剩余资源是一个碎片化的资源。此时,采用本申请的资源调度方法,通过对pod的资源伸缩来利用上这些剩余资源,例如,把任务1的一个pod的资源缩减,使机器的剩余资源变成3gpu、30gpu、60g内存,则可以满足新的任务的需求,此时机器的资源可以全部利用上,解决了这种碎片化的浪费。即,本申请通过对pod资源的伸缩挂起恢复,可以动态的对资源进行整合,使资源达到最大利用效果。
请参阅图7,图7是本申请资源调度装置一实施例的框架示意图。资源调度装置70包括:信息获取模块700,用于接收到第一任务的运行请求,基于所述运行请求获取所述第一任务的资源需求信息;资源判断模块702,用于判断当前空闲资源是否满足所述资源需求信息;资源调用模块704,用于在资源判断模块702判断出所述当前空闲资源不满足所述资源需求信息时,调用所述当前空闲资源以及第二任务所占用的至少部分资源运行所述第一任务;其中,所述第二任务为弹性伸缩任务。
上述方案,信息获取模块700在接收到第一任务的运行需求时,获取第一任务的资源需求信息,然后资源判断模块702判断当前空闲资源是否满足资源需求信息,若当前空闲资源不满足资源需求信息,由于第二任务为弹性伸缩任务,因此资源调用模块704可以通过调用当前空闲资源以及第二任务所占用的至少部分资源运行第一任务,使原本碎片化的当前空闲资源可以用于第一任务,从而可以使资源达到最大利用效果。
在一些实施例中,资源调用模块704具体可以用于在资源判断模块702判断出所述当前空闲资源不满足所述资源需求信息时,确定所述第一任务的资源需求信息与所述当前空闲资源的资源需求差值;从所述第二任务所占用的资源中调用与所述资源需求差值大小相同的资源;通过所述当前空闲资源以及所述第二任务中与所述资源需求差值大小相同的资源运行所述第一任务。
在一些实施例中,资源调用模块704执行从所述第二任务所占用的资源中调用与所述资源需求差值大小相同的资源的步骤,包括:获取所述第二任务中所有pod节点的资源分配信息;选择资源分配信息满足所述资源需求差值的至少一个pod节点;对所述满足所述资源需求差值的至少一个pod节点的资源进行缩减,空闲出与所述资源需求差值大小相同的资源。
在一些实施例中,资源调用模块704执行对所述满足所述资源需求差值的至少一个pod节点的资源进行缩减,空闲出与所述资源需求差值大小相同的资源,包括:删除所述满足所述资源需求差值的至少一个pod节点,空闲出与所述资源需求差值大小相同的资源。
在一些实施例中,资源调用模块704执行选择资源分配信息满足所述资源需求差值的至少一个pod节点的步骤,包括:选取资源大于所述资源需求差值的所有pod节点作为满足所述资源需求差值pod节点。
在一些实施例中,资源调用模块704执行对所述满足所述资源需求差值的至少一个pod节点的资源进行缩减,空闲出与所述资源需求差值大小相同的资源,包括:将每个所述满足所述资源需求差值的pod节点的资源由小到大进行排序;选取资源最小的pod节点进行资源缩减,空闲出与所述资源需求差值大小相同的资源。
在一些实施例中,资源调用模块704具体可以用于在资源判断模块702判断出所述当前空闲资源满足所述资源需求信息时,从所述当前空闲资源中选取满足所述资源需求信息的资源来运行所述第一任务。
请参阅图8,图8是本申请电子设备一实施例的框架示意图。电子设备80包括相互耦接的存储器81和处理器82,处理器82用于执行存储器81中存储的程序指令,以实现上述任一资源调度方法实施例的步骤。在一个具体的实施场景中,电子设备80可以包括但不限于:微型计算机、服务器。
具体而言,处理器82用于控制其自身以及存储器81以实现上述任一资源调度方法实施例的步骤。处理器82还可以称为cpu(centralprocessingunit,中央处理单元)。处理器82可能是一种集成电路芯片,具有信号的处理能力。处理器82还可以是通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现场可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。另外,处理器82可以由集成电路芯片共同实现。
请参阅图9,图9是本申请计算机可读存储介质一实施例的框架示意图。计算机可读存储介质90存储有能够被处理器运行的程序指令900,程序指令900用于实现上述任一资源调度方法实施例的步骤。
可以理解的是,任务用的资源的分配方式,通常是给任务分配足够多的资源,以保证任务的正确执行,在这种分配方式下,资源总是过量分配的,而这种过量分配资源的方式会导致集群资源利用率的低下,导致了集群并发任务量较小、任务吞吐量较低。而通过本申请的上述方案,在接收到第一任务的运行需求时,获取第一任务的资源需求信息,然后判断当前空闲资源是否满足资源需求信息,若当前空闲资源不满足资源需求信息,由于第二任务为弹性伸缩任务,因此可以通过调用当前空闲资源以及第二任务所占用的至少部分资源运行第一任务,使原本碎片化的当前空闲资源可以用于第一任务,从而可以使资源达到最大利用效果。
在本申请所提供的几个实施例中,应该理解到,所揭露的方法、装置,可以通过其它的方式实现。例如,以上所描述的装置实施方式仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性、机械或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施方式方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施方式方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。
1.一种资源调度方法,其特征在于,所述方法包括:
接收到第一任务的运行请求,基于所述运行请求获取所述第一任务的资源需求信息;
判断当前空闲资源是否满足所述资源需求信息;
若所述当前空闲资源不满足所述资源需求信息,调用所述当前空闲资源以及第二任务所占用的至少部分资源运行所述第一任务;其中,所述第二任务为弹性伸缩任务。
2.根据权利要求1所述的资源调度方法,其特征在于,所述若所述当前空闲资源不满足所述资源需求信息,调用所述当前空闲资源以及第二任务所占用的至少部分资源运行所述第一任务的步骤,包括:
如果当前空闲资源不满足所述资源需求信息,确定所述第一任务的资源需求信息与所述当前空闲资源的资源需求差值;
从所述第二任务所占用的资源中调用与所述资源需求差值大小相同的资源;
通过所述当前空闲资源以及所述第二任务中与所述资源需求差值大小相同的资源运行所述第一任务。
3.根据权利要求2所述的资源调度方法,其特征在于,所述从所述第二任务所占用的资源中调用与所述资源需求差值大小相同的资源的步骤,包括:
获取所述第二任务中所有pod节点的资源分配信息;
选择资源分配信息满足所述资源需求差值的至少一个pod节点;
对所述满足所述资源需求差值的至少一个pod节点的资源进行缩减,空闲出与所述资源需求差值大小相同的资源。
4.根据权利要求3所述的资源调度方法,其特征在于,所述对所述满足所述资源需求差值的至少一个pod节点的资源进行缩减,空闲出与所述资源需求差值大小相同的资源,包括:
删除所述满足所述资源需求差值的至少一个pod节点,空闲出与所述资源需求差值大小相同的资源。
5.根据权利要求3或4所述的资源调度方法,其特征在于,所述选择资源分配信息满足所述资源需求差值的至少一个pod节点的步骤包括:
选取资源大于所述资源需求差值的所有pod节点作为满足所述资源需求差值pod节点。
6.根据权利要求5所述的资源调度方法,其特征在于,所述对所述满足所述资源需求差值的至少一个pod节点的资源进行缩减,空闲出与所述资源需求差值大小相同的资源,包括:
将每个所述满足所述资源需求差值的pod节点的资源由小到大进行排序;
选取资源最小的pod节点进行资源缩减,空闲出与所述资源需求差值大小相同的资源。
7.根据权利要求1所述的资源调度方法,其特征在于,所述方法还包括:
如果当前空闲资源满足所述资源需求信息,则从所述当前空闲资源中选取满足所述资源需求信息的资源来运行所述第一任务。
8.一种资源调度装置,其特征在于,包括:
信息获取模块,所述信息获取模块用于接收到第一任务的运行请求,基于所述运行请求获取所述第一任务的资源需求信息;
资源判断模块,所述资源判断模块用于判断当前空闲资源是否满足所述资源需求信息;
资源调用模块,所述资源调用模块用于在资源判断模块判断出所述当前空闲资源不满足所述资源需求信息时,调用所述当前空闲资源以及第二任务所占用的至少部分资源运行所述第一任务;其中,所述第二任务为弹性伸缩任务。
9.一种电子设备,其特征在于,包括相互耦接的存储器和处理器,所述处理器用于执行所述存储器中存储的程序指令,以实现权利要求1至7任一项所述的资源调度方法。
10.一种计算机可读存储介质,其上存储有程序指令,其特征在于,所述程序指令被处理器执行时实现权利要求1至7任一项所述的资源调度方法。
技术总结