CN114564281A - 容器调度方法、装置、设备及存储介质 - Google Patents
容器调度方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN114564281A CN114564281A CN202210186272.XA CN202210186272A CN114564281A CN 114564281 A CN114564281 A CN 114564281A CN 202210186272 A CN202210186272 A CN 202210186272A CN 114564281 A CN114564281 A CN 114564281A
- Authority
- CN
- China
- Prior art keywords
- task
- container
- state
- scheduling
- 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45562—Creating, deleting, cloning virtual machine instances
-
- 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/4557—Distribution of virtual machine instances; Migration and load balancing
-
- 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45575—Starting, stopping, suspending or resuming virtual machine instances
-
- 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45595—Network integration; Enabling network access in virtual machine instances
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- General Factory Administration (AREA)
Abstract
本申请实施例公开了容器调度方法、装置、设备及存储介质。其中,该方法包括:确定本地任务状态为待调度状态的第一任务的第一工作组,并创建第一工作组对应的第一容器单元,其中,工作组中包含多个工作者,每个工作者对应一个容器单元,在从容器集群中成功确定出所有第一容器单元分别对应的第一节点的情况下,尝试将第一容器单元分配至对应的第一节点,在确定第一工作组中的所有第一容器单元均已成功分配至对应的第一节点后,将第一任务的本地任务状态设置为运行状态,并对容器集群中的第一任务的远端任务状态进行更新。通过采用上述技术方案,在利用容器集群执行批处理任务时,可以保证任务中不同工作者同时投入启动,满足容器调度需求。
Description
技术领域
本申请实施例涉及计算机技术领域,尤其涉及容器调度方法、装置、设备及存储介质。
背景技术
在计算机科学中,Gang调度是一种并行系统中将不同线程或者进程调度到不同处理器(可以在同一计算设备,或者不同计算设备)上同时运行的调度算法。Gang调度的典型应用场景是人工智能计算任务和大数据计算任务,这些批处理任务可能会有一组相同角色(或功能)的工作者(worker),称为工作组,还可能会有多组工作组,同一计算任务的worker需要一起投入启动,一起结束。
另一方面,随着虚拟机技术的启动慢、占用空间大以及不易迁移等缺点日渐凸显,容器化技术应运而生,可以通过启动容器来创建服务,许多容器管理工具已得到广泛应用,如Kubernetes(K8S)等,基于容器管理工具实现的集群可称为容器集群,如K8S集群,可将容器分配到容器集群中的节点上。随着容器管理工具的蓬勃发展,越来越多用户想要将人工智能计算和大数据计算的框架迁移到容器集群上。然而容器管理工具最初是面向常驻型服务设计的,其调度器是以容器单元(如K8S中的Pod,Pod又称豆荚,一个Pod中可以包含一个或多个容器)为基本调度单元进行依次调度,不会考虑容器之间的相互关系,使得其一方面无法满足这些计算任务的Gang调度需求,另一方面也无法实现批处理计算(如并发创建和并发调度)。
发明内容
本申请实施例提供了容器调度方法、装置、设备及存储介质,可以优化现有的容器调度方案,使得批处理任务中不同工作者能够同时投入启动,满足容器调度需求。
第一方面,本申请实施例提供了一种容器调度方法,应用于容器集群对应的调度器,所述容器集群中包含多个节点,所述方法包括:
确定第一任务的待调度的第一工作组,并创建所述第一工作组对应的第一容器单元,其中,所述第一任务的本地任务状态为待调度状态,所述第一工作组的数量为至少一个,单个所述第一工作组中包含多个第一工作者,每个所述第一工作者对应一个第一容器单元;
在从所述容器集群中成功确定出所有第一容器单元分别对应的第一节点的情况下,尝试将所述第一容器单元分配至对应的第一节点;
在确定所有第一工作组中的所有第一容器单元均已成功分配至对应的第一节点后,将所述第一任务的本地任务状态设置为运行状态,并对所述容器集群中的所述第一任务的远端任务状态进行更新。
第二方面,本申请实施例提供了一种容器调度装置,配置于容器集群对应的调度器,所述容器集群中包含多个节点,所述装置包括:
容器单元创建模块,用于确定第一任务的待调度的第一工作组,并创建所述第一工作组对应的第一容器单元,其中,所述第一任务的本地任务状态为待调度状态,所述第一工作组的数量为至少一个,单个所述第一工作组中包含多个第一工作者,每个所述第一工作者对应一个第一容器单元;
容器单元分配模块,用于在从所述容器集群中成功确定出所有第一容器单元分别对应的第一节点的情况下,尝试将所述第一容器单元分配至对应的第一节点;
状态设置模块,用于在确定所有第一工作组中的所有第一容器单元均已成功分配至对应的第一节点后,将所述第一任务的本地任务状态设置为运行状态,并将所述容器集群中的所述第一任务的远端任务状态设置为运行状态。
第三方面,本申请实施例提供了一种容器调度设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如本申请实施例提供的容器调度方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本申请实施例提供的容器调度方法。
本申请实施例中提供的容器调度方案,确定本地任务状态为待调度状态的第一任务的第一工作组,并创建第一工作组对应的第一容器单元,其中,工作组中包含多个工作者,每个工作者对应一个容器单元,在从容器集群中成功确定出所有第一容器单元分别对应的第一节点的情况下,尝试将第一容器单元分配至对应的第一节点,在确定第一工作组中的所有第一容器单元均已成功分配至对应的第一节点后,将第一任务的本地任务状态设置为运行状态,并对容器集群中的所述第一任务的远端任务状态进行更新。通过采用上述技术方案,在利用容器集群执行批处理任务时,可以保证任务中不同工作者同时投入启动,满足容器调度需求。
附图说明
图1为本申请实施例提供的一种容器调度方法的流程示意图;
图2为本申请实施例提供的又一种容器调度方法的流程示意图;
图3为本申请实施例提供的一种容器调度装置的结构框图;
图4为本申请实施例提供的一种容器调度设备的结构框图。
具体实施方式
下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本申请,而非对本申请的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本申请相关的部分而非全部结构。此外,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
图1为本申请实施例提供的一种容器调度方法的流程示意图,该方法可以由容器调度装置执行,其中该装置可由软件和/或硬件实现,一般可集成在容器调度设备中,容器调度设备被配置为容器集群对应的调度器。容器集群可理解为基于容器管理工具实现的集群,容器管理工具例如可包括K8S等,具体不做限定。
本申请实施例中所涉及的任务为需要满足Gang调度需求的批处理计算任务(简称批处理任务或Job),具体任务类型不做限定,例如可以是人工智能计算任务或大数据计算任务等,批处理任务中包含至少一组相同角色(或功能)的工作者(Worker),记为工作组(Task),当包含多个工作组时,不同工作组对应的角色一般不同,可根据具体的应用场景进行设计。示例性的,对于信息推荐训练任务,可以包含多个工作组,各工作组可以分别实现如参数分布式存储、模型加载和保存、异常恢复、读取数据与网络图的执行、以及数据分配与计算等不同功能逻辑。对于批处理任务来说,所有工作组中的所有工作者需要同时启动,也即实现Gang调度。然而,容器集群的原有调度器以容器单元为基本调度单元进行依次调度,且不会考虑容器之间的相互关系,无法满足Gang调度需求,也无法实现批处理计算。因此,本公开实施例提供了一种全新的容器调度方案,以满足批处理任务的Gang调度需求。
如图1所示,该方法包括:
步骤101、确定第一任务的待调度的第一工作组,并创建第一工作组对应的第一容器单元,其中,第一任务的本地任务状态为待调度状态,第一工作组的数量为至少一个,单个第一工作组中包含多个第一工作者,每个第一工作者对应一个第一容器单元。
本公开实施例中,同一任务对应有两种类型的任务状态,分别记为远端任务状态和本地任务状态。远端任务状态可以理解为在容器集群中进行存储的任务状态,容器集群可以根据该任务状态控制各节点执行任务相关操作;本地任务状态可以理解为在调度器本地进行缓存的任务状态,调度器可以根据该任务状态进行任务相关的调度操作。远端任务状态和本地任务状态定义方式一般不同,例如,远端任务状态可以包括启动状态(Starting)、运行状态(Running)、完成状态(Completed)以及失败状态(Failed)等,本地任务状态可以包括待检查状态(Unchecked)、待调度状态(Pending)、运行状态(Running)、异常状态(Broken)、修改状态(Modified)、被删除状态(Killed)以及结束状态(Finish)等。可选的,在调度器中预先设置包含各本地任务状态的状态机模型,并根据状态机模型中的状态变换条件控制任务在不同本地任务状态之间进行切换。其中,状态变换条件可根据实际需求设置,如根据任务的执行情况或调度情况等设置。当本地任务状态发生变化时,对应的远端任务状态可能也会发生变化,此时,可以通过调度器对容器集群中的远端任务状态进行更新。
可选的,调度器可用于在预设调度周期内按照预设任务处理顺序依次对处于各本地任务状态的任务进行处理,并根据处理结果更新对应任务的本地任务状态和/或远端任务状态。在需要对待调度状态的任务进行处理时,可以遍历当前处于待调度状态的任务并进行相应处理。
示例性的,第一任务可以是本地任务状态为待调度状态的任意一个任务;第一任务中可以包括一个或多个工作组,记为第一工作组;每个第一工作组中包含多个工作者,记为第一工作者;每个第一工作者对应一个容器单元,容器单元为最小调度单位,以K8S为例,容器单元为Pod。在确定第一任务的待调度的第一工作组后,批量创建各第一工作组分别对应的第一容器单元。
步骤102、在从容器集群中成功确定出所有第一容器单元分别对应的第一节点的情况下,尝试将第一容器单元分配至对应的第一节点。
示例性的,可以以工作组为单位,根据预设调度算法尝试为所有第一容器单元寻找合适的计算节点,将所找到的节点记为第一节点,若所有第一容器单元经过调度计算均成功找到对应的第一节点,则可进行下一步动作,即尝试进行第一容器单元的分配。
可选的,若存在任意一个第一容器单元,未成功确定对应的第一节点,则可放弃本轮调度。
步骤103、在确定所有第一工作组中的所有第一容器单元均已成功分配至对应的第一节点后,将第一任务的本地任务状态设置为运行状态,并对容器集群中的第一任务的远端任务状态进行更新。
示例性的,若所有第一工作组中的所有第一容器单元均已成功分配至对应的第一节点,则说明所有第一工作者均可以开始正常工作,实现Gang调度,并第一任务更新本地任务状态和远端任务状态。其中,将第一任务的本地任务状态设置为运行状态,可选的,第一任务的远端任务状态可根据容器集群中对任务状态的定义方式来确定,如启动状态或运行状态等。若存在任意一个第一工作者分配失败,可回滚第一任务之前的调度决策,例如,重新根据预设调度算法尝试为所有第一容器单元寻找合适的计算节点。
本申请实施例中提供的容器调度方法,确定本地任务状态为待调度状态的第一任务的第一工作组,并创建第一工作组对应的第一容器单元,其中,工作组中包含多个工作者,每个工作者对应一个容器单元,在从容器集群中成功确定出所有第一容器单元分别对应的第一节点的情况下,尝试将第一容器单元分配至对应的第一节点,在确定第一工作组中的所有第一容器单元均已成功分配至对应的第一节点后,将第一任务的本地任务状态设置为运行状态,并对容器集群中的所述第一任务的远端任务状态进行更新。通过采用上述技术方案,在利用容器集群执行批处理任务时,可以保证任务中不同工作者同时投入启动,满足容器调度需求。
在一些实施例中,所述方法还可包括:从所述容器集群中获取已创建的任务的任务信息,其中,所述任务信息包括任务的远端任务状态、任务对应的节点信息、任务对应的容器单元信息以及任务的变化信息中的至少一项;根据所述任务信息对各任务的本地任务状态进行更新或校正。这样设置的好处在于,根据从容器集群中获取的任务信息对本地任务状态进行更新或校正,可以保证本地任务状态的准确性。
示例性的,调度器可以在启动或重启后开始实时监听容器集群中任务、节点以及容器单元的变化情况(如增加、删除和修改等),进而获取任务信息。可选的,可以利用容器管理工具中的通知者机制从接口服务中监听上述变化情况,可以针对不同的变化情况设定变化事件并注册对应的回调函数,利用回调函数进行本地缓存的更新以及对本地任务状态进行的校正,例如,容器集群中某个容器单元的删除事件被触发,可以将该容器单元所属的任务的本地任务状态更新为异常状态。本地缓存中除本地任务状态外,还可包括上述任务信息。其中,任务对应的节点信息可包括节点中包含有哪些任务、节点的工作状态、以及节点中的资源使用情况等;任务对应的容器单元信息可包括容器单元的工作状态、容器单元所占用的资源情况、以及容器单元的调度历史信息等;任务的变化信息可包括任务是否经过修改、任务对应的节点的变化、以及任务对应的容器单元的变化等。
在一些实施例中,所述确定第一任务的待调度的第一工作组,包括:确定第一任务对应的第一预设调度规格的工作组,并针对所述第一预设调度规格的工作组进行预调度处理;若预调度失败,则确定所述第一任务对应的第二预设调度规格的工作组,其中,所述第二预设调度规格的工作组所占用的资源少于所述第一预设调度规格的工作组所占用的资源;针对所述第二预设调度规格的工作组进行预调度处理,若预调度成功,则将所述第二预设调度规格的工作组确定为所述第一任务的待调度的第一工作组。这样设置的好处在于,允许为任务配置两种以上的计算规格,更好地适应于计算资源的实际情况,例如,在计算资源充足时使用更多的资源以更快完成计算任务,在计算资源紧张时用更少资源以提高任务调度的可能性,通过支持任务的不同资源规格申请,不仅可以实现业务高峰期资源的充分利用,提高计算效率,也使得业务高峰期业务计算资源得到基本满足。此外,利用预调度的方式,可以更早发现无法实现Gang调度的情况,减少不必要的操作。
示例性的,预调度可理解为预先进行调度计算而不执行实际的调度操作,也即预调度过程中不会进行容器单元的分配,在进行调度计算时,可根据容器集群当前资源状态与任务当前申请的资源情况进行计算。预调度成功可以理解为通过预调度计算确定容器集群当前的剩余资源能够满足相应调度规格的工作组的调度需求,而预调度失败可以理解为通过预调度计算确定容器集群当前的剩余资源无法满足相应调度规格的工作组的调度需求。其中,预设调度规格可以根据资源占用量进行量化,第一预设调度规格和第二预设调度规格可以从第一任务对应的任务定义中获取。可选的,若针对第二预设调度规格的工作组进行预调度处理后,预调度失败,且不存在占用资源更少的预设调度规格,则放弃本轮调度。
在一些实施例中,通过以下方式确定当前第一容器单元对应的第一节点:获取当前第一容器单元的资源申请信息,其中,所述资源申请信息包括资源申请类型和资源申请量;根据所述资源申请信息与所述容器集群中的各候选节点的剩余资源信息的相似度,确定所述当前第一容器单元对应的第一节点。这样设置的好处在于,可使得容器集群中的资源得到更加合理的分配。其中,资源申请类型例如可包括中央处理器(Central ProcessingUnit,CPU)、图像处理单元(Graphics Processing Unit,GPU)和内存等。
相关技术中,在为容器单元确定待分配的节点时,仅考虑节点的资源剩余情况是否能够满足容器单元的资源申请需求,容易导致部分节点由于某种资源大量分配而其他资源大量闲置的情况发生,因此存在较多的资源碎片,节点资源利用率较低。而本申请实施例中,在为容器单元确定待分配的节点时,可以将容器单元分配至剩余资源信息与资源申请信息相似度高的节点上,提高节点资源利用率。其中,可以在资源类型以及资源数量等维度进行相似度的比较,具体比较方式不做限定。
在一些实施例中,所述根据所述资源申请信息与所述容器集群中的各候选节点的剩余资源信息的相似度,确定所述当前第一容器单元对应的第一节点,包括:获取所述容器集群内与各资源申请类型分别对应的集群资源剩余量,以及获取各候选节点中与各资源申请类型分别对应的节点资源剩余量;根据所述资源申请量和所述集群资源剩余量确定第一向量,其中,所述第一向量中的各第一元素依据预设顺序依次对应不同的资源申请类型,所述第一元素的取值根据资源申请量与集群资源剩余量的比值确定;根据所述节点资源剩余量和所述集群资源剩余量分别确定各候选节点对应的第二向量,其中,所述第二向量中的各第二元素依据所述预设顺序依次对应不同的资源申请类型,所述第二元素的取值根据节点资源剩余量与集群资源剩余量的比值确定;针对各候选节点,分别计算所述第一向量和对应的第二向量的内积,得到对应候选节点的节点评分;将所述节点评分最高的候选节点确定为当前第一容器单元对应的第一节点。这样设置的好处在于,节点评分越高说明相似度越高,可以快速准确地根据节点评分来确定资源申请信息与节点的剩余资源信息的相似度,提高容器调度效率,减少计算节点的资源碎片带来的成本损耗。其中,候选节点可包括容器集群中能够满足资源申请信息的节点。
示例性的,假设当前第一容器单元申请三种资源,预设顺序为CPU、GPU和内存,假设当前容器集群整体各类资源剩余(集群资源剩余量)分别为A、B和C,也即CPU剩余A,GPU剩余B,内存剩余C,某候选节点中各类资源剩余(节点资源剩余量)分别为a1、b1和c1,当前第一容器单元的各类资源申请量分别为a2、b2和c2。第一向量可以为(a3,b3,c3)=(a1/A,b1/B,c1/C),第二向量可以为(a4,b4,c4)=(a2/A,b2/B,c2/C)。计算第一向量和第二向量的内积,得到节点评分为a3a4+b3b4+c3c4。
可选的,在确定第一向量和第二向量时,还可进行归一化处理。例如(a3,b3,c3)经过归一化处理后可得到(a5,b5,c5),记为第一向量,(a4,b4,c4)经过归一化处理后可得到(a6,b6,c6),记为第二向量,则计算第一向量和第二向量的内积,得到节点评分为a5a6+b5b6+c5c6。
在一些实施例中,在进行节点评分计算时,还可以根据其他指标来确定更多向量,根据更多向量的内积计算得到节点评分,从而使得节点评分更加精确。示例性的,可以根据候选节点的资源利用率确定第三向量。具体的,所述针对各候选节点,分别计算所述第一向量和对应的第二向量的内积,得到对应候选节点的节点评分,包括:针对各候选节点,分别计算所述第一向量、对应的第二向量以及对应的第三向量的内积,得到对应候选节点的节点评分;其中,所述第三向量中的各第三元素依据所述预设顺序依次对应不同的资源申请类型,所述第三元素的取值根据对应候选节点的资源利用率确定。这样设置的好处在于,利用三相内积算法计算节点评分,使得候选节点的资源利用率能够参与节点评分的计算,可以更加准确地计算节点评分。
示例性的,继续上述举例,假设候选节点的资源利用率分别为(a0,b0,c0),则节点评分可表示为a0a5a6+b0b5b6+c0c5c6。
在一些实施例中,所述第一工作组的数量为多个,不同第一工作组对应的功能不同,至少两个第一工作组对应的生命周期控制策略不同,其中,所述生命周期控制策略中包括运行过程中是否允许失败重试。这样设置的好处在于,允许为不同功能的工作组配置不同的生命周期控制策略,使得工作组的工作更加灵活,提高计算效率。示例性的,例如,部分工作组在工作过程中可能因为容器单元被驱逐、节点异常或者网络异常等情况,导致个别工作者计算失败,若该工作组的功能为辅助计算功能,不会影响整个任务的成败,则可以允许失败重试,若该工作组为实现常驻类型功能的工作组,如参数服务工作组,则可以不允许失败重试。
随着集群的算力的膨胀,计算设备发生硬件故障、网络故障或者宕机的次数也随之变多,在发生这些情况时,在保障任务正常进行的情况下可以尽可能避免重启整个任务,允许将异常节点上的容器单元调度到另外的节点。本申请实施例中,对于本地任务状态为运行状态的任务,可以对容器单元的本地重启和异地重调度情况进行统计,及时更新任务状态。在一些实施例中,该方法还包括:对第二任务中的第二工作组中的第二容器单元进行状态统计,其中,所述第二任务的本地任务状态为运行状态;将状态异常的第二容器单元,以及本地重启次数大于预设重启次数阈值的第二容器单元,加入预设失败队列;以工作组为单位,若任一第二工作组对应的容器单元重调度次数与所述预设失败队列的长度之和大于预设阈值,则将所述第二任务的远端任务状态设置为失败状态。这样设置的好处在于,对于本地任务状态为运行状态的任务,以工作组为单位,对任务中整体的容器单元重启和重调度情况进行量化,当问题较严重时,及时将远端任务状态设置为失败状态,避免浪费过多时间和资源。
在一些实施例中,该方法还包括:确定第三任务中的待处理的目标第三工作组,其中,所述第三任务的本地任务状态为异常状态,所述目标第三工作组中包含异常工作者且对应的生命周期控制策略中包括运行过程中允许失败重试;针对所述目标第三工作组中的异常工作者进行容器单元重建以及重调度处理,并根据处理结果更新所述第三任务的本地任务状态和远端任务状态。这样设置的好处在于,对于本地任务状态为异常状态的任务,及时查找到包含异常工作者且允许失败重试的工作组,针对其中的异常工作者进行容器单元的重建以及重调度,从而有机会使得该任务恢复正常,实现异地容灾,避免重启整个任务,提高任务执行效率。
示例性的,异常工作者可理解为所对应的容器单元本地重启次数大于预设重启次数阈值的工作者。进一步的,对于异常工作者,因其对应的容器单元在同一节点上本地重启次数过多,说明该节点可能存在挂载异常、网络异常或组件异常等问题,导致容器单元无法正常启动,因此,可以将该节点加入预设黑名单,以免其他容器单元被分配到该可能异常的节点,造成频繁的重调度。
在一些实施例中,该方法还可包括:针对任务进行校验、准入或垃圾回收等操作,具体时机以及操作细节等不做限定。
图2为本申请实施例提供的又一种容器调度方法的流程示意图,本申请实施例在上述各可选实施例基础上进行优化。示例性的,该方法可包括:
步骤201、检测到新任务时,对新任务进行校验和准入处理。
示例性的,调度器可以通过如K8S自带的通知者(Informer机制)从接口服务(APIServer)获取K8S集群中的相关信息。当存在首次创建任务、或调度器重启后再次监听到的已创建任务、或编辑修改过的任务时,可认为检测到新任务。本申请实施例中,可以在调度器内部实现对任务的校验和准入,避免引入单点故障风险。示例性的,校验处理可以利用预设规范对任务进行字段校验(如任务名称、资源申请、安全上下文以及生命周期控制字段等)和信息补全等操作,准入处理可以是根据校验处理结果决定接受任务或拒绝任务。例如,当新任务申请资源或任务副本数超过相应的最大限制时,可以拒绝任务。
步骤202、从容器集群中获取已创建的任务的任务信息,根据任务信息对各任务的本地任务状态进行更新或校正。
示例性的,当调度器重启后,可以从容器集群中获取已创建的任务的任务信息,根据任务中各工作组的当前工作状态等信息,确定任务当前应该处于何种本地任务状态,例如,若确定各工作组均符合任务定义且处于正常工作状态,可将本地任务状态校正为运行状态。
步骤203、对本地任务状态为待检查状态的任务进行处理,并根据处理结果更新对应任务的本地任务状态和/或远端任务状态。
示例性的,调度器可用于在预设调度周期内按照预设任务处理顺序依次对处于各本地任务状态的任务进行处理,并根据处理结果更新对应任务的本地任务状态和/或远端任务状态。本地任务状态包括Unchecked、Pending、Running、Broken、Modified、Killed以及Finish。预设任务处理顺序可以为Unchecked、Pending、Running、Broken、Modified以及Killed。在调度器中预先设置包含各本地任务状态的状态机模型,并根据状态机模型中的状态变换条件控制任务在不同本地任务状态之间进行切换。
其中,Unchecked状态的任务可能为刚提交的任务,也可能是调度器重启重新监听到的任务,工作组未展开(也即未创建)时收到Pod创建事件等;Pending状态中不存在已经调度过的Pod,工作组可能未展开,Pod可能未创建;Running状态下本地缓存中所有Pod实例都存在;Broken状态下本地缓存中有Pod缺失或未被调度;Modified状态下因任务重新定义,所有Pod待清理;Killed状态指外部主动删除任务;Finish状态指任务完成,所有Pod待清理,此状态下任务成功或结束为外部观察状态,调度器不单独处理。
可选的,在对不同本地任务状态的任务进行处理之前,还可先进行垃圾回收。例如,可针对节点宕机、节点Kubelet组件挂起或节点网络故障等原因引入的孤儿容器单元(未被正常清理的容器单元)进行垃圾回收,例如,利用上述监听机制监听到孤儿Pod,将其放入延时删除队列后,对到期的Pod进行清理。
示例性的,对于Unchecked状态的任务,可先判断本地缓存任务对象是否为空(如删除任务时会设置为空),若为空,则对任务、工作组、工作者以及配置文件等相关资源进行垃圾回收,若不为空,则可继续对任务进行合法性检查。若检查失败,则可将远端任务状态更新为失败状态,并对相应资源进行垃圾回收,若检查通过,可继续判断本地缓存中任务的工作组是否存在。若不存在,此时任务可能存在也可能为调度器重启,此时根据集群中任务实际状态进行调谐(校正),若存在,根据任务定义和调度规格降级记录获取工作组当前的调度规格,统计和补充本地缓存中各工作组信息以及工作组中工作组信息等,根据统计和补充结果对本地任务状态和/或远端任务状态进行更新或调谐。
步骤204、对于本地任务状态为待调度状态的第一任务,确定对应的第一预设调度规格的工作组并进行预调度处理,若预调度失败,则确定对应的降级后的第二预设调度规格的工作组并进行预调度处理,若预调度成功,则将第二预设调度规格的工作组确定为第一任务的待调度的第一工作组。
示例性的,对于本地任务状态为待调度状态的任务,可先确认本地缓存中工作组信息是否为空,若为空,则进行初始化,根据任务定义获取两种规格工作组,也即第一预设调度规格和第二预设调度规格,然后先采用占用资源较多的规格进行预调度,以保证工作效率,当预调度失败后,进行降级,采用占用资源较少的规格进行预调度。在预调度成功后,得到待调度工作组,可以进行信息补全,如创建或者更新任务各个Pod的Hosts文件(系统文件)对应Configmap(配置图对象)以及任务对应Service(服务)等。其中,若待调度工作组为降级工作组,可更新容器集群中远端任务状态字段中的资源降级标志为真。若本地缓存中工作组信息不为空,也可先进行信息补全,然后执行步骤205。
步骤205、创建第一工作组对应的第一容器单元,在从容器集群中成功确定出所有第一容器单元分别对应的第一节点的情况下,尝试将第一容器单元分配至对应的第一节点。
其中,在确定各第一容器单元对应的第一节点时,可以采用前文所述的三相内积算法计算节点评分,依据节点评分为容器单元选择合适的节点,具体细节此处不再赘述。
步骤206、在确定所有第一工作组中的所有第一容器单元均已成功分配至对应的第一节点后,将第一任务的本地任务状态设置为运行状态,并对容器集群中的第一任务的远端任务状态进行更新。
步骤207、对本地任务状态为运行状态的第二任务中的第二工作组中的第二容器单元进行状态统计,并根据处理结果更新对应任务的本地任务状态和/或远端任务状态。
示例性的,对于本地任务状态为Running状态的任务,可以遍历该任务下所有工作组,统计正常运行中的和状态异常(存在问题,需要被删除)的容器单元的数量进行统计。若当前存在的容器单元总数与任务定义中的副本数不一致,则可将远端任务状态设置为失败状态。对于状态异常的第二容器单元,将其加入预设失败队列;若存在本地重启次数大于预设重启次数阈值的第二容器单元,也将该第二容器单元加入预设失败队列。以工作组为单位,若任一第二工作组对应的容器单元重调度次数与预设失败队列的长度之和大于预设阈值,则将第二任务的远端任务状态设置为失败状态。示例性的,容器集群中的节点出现异常时,容器集群可以为该节点上的容器单元添加删除标记,调度器可以将预设失败队列中携带有删除标记的容器单元加入待删除队列。示例性的,若所有第二工作组主动退出,且计算成功的容器单元的总数与副本数相等,可将第二任务的远端任务状态设置为完成状态,本地任务状态可以更新为完成状态。若正常运行中的容器单元的数量与计算成功的容器单元的数量之和与副本数相等,本地任务状态保持为运行状态。若上述情况均不满足,可将远端任务状态设置为启动中状态。
示例性的,遍历待删除队列,删除其中的容器单元,可保持本地任务状态不变,也即不主动切换至异常状态,等待容器集群中该容器单元的删除事件被触发后,将该容器单元所属的任务的本地任务状态更新为异常状态。对于处理结果为远端任务状态为启动中状态和运行状态的任务之外的任务,是计算成功的任务或计算失败的任务,在更新任务状态后,清理任务的工作组和工作者。
步骤208、对于本地任务状态为异常状态的第三任务,确定待处理的目标第三工作组,针对目标第三工作组中的异常工作者进行容器单元重建以及重调度处理,并根据处理结果更新第三任务的本地任务状态和/或远端任务状态。
示例性的,对于本地任务状态为Broken状态的任务,检查各工作组内的容器单元,判断是否不存在或未调度,若是,则根据调度历史记录统计重调度次数和本地重启次数,若重调度次数大于预设次数阈值,更新远端任务状态为失败状态,更新本地任务状态为结束状态,清理任务的工作组和工作者;否则,将容器单元放入待处理工作组队列。遍历待处理工作组队列(目标第三工作组构成的队列),针对其中的异常工作者进行容器单元重建,若重建失败,可能任务或容器集群存在问题,可以跳过本次调度,经过预设等待时长后再进行重试。若重建成功,则对重建的容器单元进行重调度,并根据重调度结果更新第三任务的本地任务状态和远端任务状态。
步骤209、依次对本地任务状态为修改状态和被删除状态的任务进行处理,并根据处理结果更新对应任务的本地任务状态和/或远端任务状态。
示例性的,对于本地任务状态为Modified状态的任务,可以对任务进行校验,若校验失败,将远端任务状态更新为失败状态,若校验成功,可将本地任务状态更新为待调度状态。对修改前的任务对应的工作组和工作者进行清理。
示例性的,对于本地任务状态为Killed状态的任务,可以清理任务对应的工作组和工作者,清理任务对应的服务以及配置图,最后清除本地缓存中的任务对象。
示例性的,当已按照预设任务处理顺序处理完所有任务后,可在下一个调度周期内,继续按照预设任务处理顺序依次对处于各本地任务状态的任务进行处理,并根据处理结果更新对应任务的本地任务状态和/或远端任务状态。
本申请实施例提供的容器调度方法,可以在调度器内部基于状态机实现集任务校验及准入控制、任务控制以及任务调度功能的一体化Gang调度方案,减少系统因为单点故障引入的不稳定性的同时,也提高系统整体的可维护性,通过容灾调度不仅提高系统在节点故障时的可用性,也提高系统资源的利用率,任务不必停滞等待或者整体失败,通过支持任务的不同资源规格申请,灵活地对容器集群中的资源进行利用,不仅可以实现业务高峰期资源的充分利用,提高计算效率,也使得业务高峰期业务计算资源得到基本满足,在进行容器调度时,基于三相内积打分算法为各容器单元匹配合适的节点,大大减少计算节点的资源碎片所带来的成本损耗。
图3为本申请实施例提供的一种容器调度装置的结构框图,该装置配置于容器集群对应的调度器,可由软件和/或硬件实现,一般可集成在容器调度设备中,可通过执行容器调度方法来进行容器调度。如图3所示,该装置包括:
容器单元创建模块301,用于确定第一任务的待调度的第一工作组,并创建所述第一工作组对应的第一容器单元,其中,所述第一任务的本地任务状态为待调度状态,所述第一工作组的数量为至少一个,单个所述第一工作组中包含多个第一工作者,每个所述第一工作者对应一个第一容器单元;
容器单元分配模块302,用于在从所述容器集群中成功确定出所有第一容器单元分别对应的第一节点的情况下,尝试将所述第一容器单元分配至对应的第一节点;
状态设置模块303,用于在确定所有第一工作组中的所有第一容器单元均已成功分配至对应的第一节点后,将所述第一任务的本地任务状态设置为运行状态,并对所述容器集群中的所述第一任务的远端任务状态进行更新。
本申请实施例中提供的容器调度装置,确定本地任务状态为待调度状态的第一任务的第一工作组,并创建第一工作组对应的第一容器单元,其中,工作组中包含多个工作者,每个工作者对应一个容器单元,在从容器集群中成功确定出所有第一容器单元分别对应的第一节点的情况下,尝试将第一容器单元分配至对应的第一节点,在确定第一工作组中的所有第一容器单元均已成功分配至对应的第一节点后,将第一任务的本地任务状态设置为运行状态,并对容器集群中的所述第一任务的远端任务状态进行更新。通过采用上述技术方案,在利用容器集群执行批处理任务时,可以保证任务中不同工作者同时投入启动,满足容器调度需求。
本申请实施例提供了一种容器调度设备,该容器调度设备中可集成本申请实施例提供的容器调度装置。图4为本申请实施例提供的一种容器调度设备的结构框图。容器调度设备400包括存储器401、处理器402及存储在存储器401上并可在处理器402上运行的计算机程序,所述处理器402执行所述计算机程序时实现本申请实施例提供的容器调度方法。
本申请实施例还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行本申请实施例提供的容器调度方法。
上述实施例中提供的容器调度装置、设备以及存储介质可执行本申请任意实施例所提供的容器调度方法,具备执行该方法相应的功能模块和有益效果。未在上述实施例中详尽描述的技术细节,可参见本申请任意实施例所提供的容器调度方法。
Claims (10)
1.一种容器调度方法,其特征在于,应用于容器集群对应的调度器,所述容器集群中包含多个节点,所述方法包括:
确定第一任务的待调度的第一工作组,并创建所述第一工作组对应的第一容器单元,其中,所述第一任务的本地任务状态为待调度状态,所述第一工作组的数量为至少一个,单个所述第一工作组中包含多个第一工作者,每个所述第一工作者对应一个第一容器单元;
在从所述容器集群中成功确定出所有第一容器单元分别对应的第一节点的情况下,尝试将所述第一容器单元分配至对应的第一节点;
在确定所有第一工作组中的所有第一容器单元均已成功分配至对应的第一节点后,将所述第一任务的本地任务状态设置为运行状态,并对所述容器集群中的所述第一任务的远端任务状态进行更新。
2.根据权利要求1所述的方法,其特征在于,所述确定第一任务的待调度的第一工作组,包括:
确定第一任务对应的第一预设调度规格的工作组,并针对所述第一预设调度规格的工作组进行预调度处理;
若预调度失败,则确定所述第一任务对应的第二预设调度规格的工作组,其中,所述第二预设调度规格的工作组所占用的资源少于所述第一预设调度规格的工作组所占用的资源;
针对所述第二预设调度规格的工作组进行预调度处理,若预调度成功,则将所述第二预设调度规格的工作组确定为所述第一任务的待调度的第一工作组。
3.根据权利要求1所述的方法,其特征在于,通过以下方式确定当前第一容器单元对应的第一节点:
获取当前第一容器单元的资源申请信息,其中,所述资源申请信息包括资源申请类型和资源申请量;
根据所述资源申请信息与所述容器集群中的各候选节点的剩余资源信息的相似度,确定所述当前第一容器单元对应的第一节点。
4.根据权利要求3所述的方法,其特征在于,所述根据所述资源申请信息与所述容器集群中的各候选节点的剩余资源信息的相似度,确定所述当前第一容器单元对应的第一节点,包括:
获取所述容器集群内与各资源申请类型分别对应的集群资源剩余量,以及获取各候选节点中与各资源申请类型分别对应的节点资源剩余量;
根据所述资源申请量和所述集群资源剩余量确定第一向量,其中,所述第一向量中的各第一元素依据预设顺序依次对应不同的资源申请类型,所述第一元素的取值根据资源申请量与集群资源剩余量的比值确定;
根据所述节点资源剩余量和所述集群资源剩余量分别确定各候选节点对应的第二向量,其中,所述第二向量中的各第二元素依据所述预设顺序依次对应不同的资源申请类型,所述第二元素的取值根据节点资源剩余量与集群资源剩余量的比值确定;
针对各候选节点,分别计算所述第一向量和对应的第二向量的内积,得到对应候选节点的节点评分;
将所述节点评分最高的候选节点确定为当前第一容器单元对应的第一节点。
5.根据权利要求4所述的方法,其特征在于,所述针对各候选节点,分别计算所述第一向量和对应的第二向量的内积,得到对应候选节点的节点评分,包括:
针对各候选节点,分别计算所述第一向量、对应的第二向量以及对应的第三向量的内积,得到对应候选节点的节点评分;
其中,所述第三向量中的各第三元素依据所述预设顺序依次对应不同的资源申请类型,所述第三元素的取值根据对应候选节点的资源利用率确定。
6.根据权利要求1所述的方法,其特征在于,还包括:
对第二任务中的第二工作组中的第二容器单元进行状态统计,其中,所述第二任务的本地任务状态为运行状态;
将状态异常的第二容器单元,以及本地重启次数大于预设重启次数阈值的第二容器单元,加入预设失败队列;
以工作组为单位,若任一第二工作组对应的容器单元重调度次数与所述预设失败队列的长度之和大于预设阈值,则将所述第二任务的远端任务状态设置为失败状态。
7.根据权利要求1所述的方法,其特征在于,还包括:
确定第三任务中的待处理的目标第三工作组,其中,所述第三任务的本地任务状态为异常状态,所述目标第三工作组中包含异常工作者且对应的生命周期控制策略中包括运行过程中允许失败重试;
针对所述目标第三工作组中的异常工作者进行容器单元重建以及重调度处理,并根据处理结果更新所述第三任务的本地任务状态和/或远端任务状态。
8.一种容器调度装置,其特征在于,配置于容器集群对应的调度器,所述容器集群中包含多个节点,所述装置包括:
容器单元创建模块,用于确定第一任务的待调度的第一工作组,并创建所述第一工作组对应的第一容器单元,其中,所述第一任务的本地任务状态为待调度状态,所述第一工作组的数量为至少一个,单个所述第一工作组中包含多个第一工作者,每个所述第一工作者对应一个第一容器单元;
容器单元分配模块,用于在从所述容器集群中成功确定出所有第一容器单元分别对应的第一节点的情况下,尝试将所述第一容器单元分配至对应的第一节点;
状态设置模块,用于在确定所有第一工作组中的所有第一容器单元均已成功分配至对应的第一节点后,将所述第一任务的本地任务状态设置为运行状态,并对所述容器集群中的所述第一任务的远端任务状态进行更新。
9.一种容器调度设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1-7任一项所述的方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-7中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210186272.XA CN114564281A (zh) | 2022-02-28 | 2022-02-28 | 容器调度方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210186272.XA CN114564281A (zh) | 2022-02-28 | 2022-02-28 | 容器调度方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114564281A true CN114564281A (zh) | 2022-05-31 |
Family
ID=81716110
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210186272.XA Pending CN114564281A (zh) | 2022-02-28 | 2022-02-28 | 容器调度方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114564281A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117331650A (zh) * | 2023-10-31 | 2024-01-02 | 中科驭数(北京)科技有限公司 | 容器集的调度方法、装置、设备及存储介质 |
CN117729204A (zh) * | 2024-02-06 | 2024-03-19 | 山东大学 | 一种基于监控感知的k8s容器调度方法及系统 |
CN117729204B (zh) * | 2024-02-06 | 2024-05-10 | 山东大学 | 一种基于监控感知的k8s容器调度方法及系统 |
-
2022
- 2022-02-28 CN CN202210186272.XA patent/CN114564281A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117331650A (zh) * | 2023-10-31 | 2024-01-02 | 中科驭数(北京)科技有限公司 | 容器集的调度方法、装置、设备及存储介质 |
CN117729204A (zh) * | 2024-02-06 | 2024-03-19 | 山东大学 | 一种基于监控感知的k8s容器调度方法及系统 |
CN117729204B (zh) * | 2024-02-06 | 2024-05-10 | 山东大学 | 一种基于监控感知的k8s容器调度方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11379272B2 (en) | Autoscaling using file access or cache usage for cluster machines | |
Yan et al. | Tr-spark: Transient computing for big data analytics | |
US11416286B2 (en) | Computing on transient resources | |
US7844853B2 (en) | Methods and apparatus for restoring a node state | |
US20090276781A1 (en) | System and method for multi-level preemption scheduling in high performance processing | |
US20140215481A1 (en) | Assigning nodes to jobs based on reliability factors | |
CN107016480B (zh) | 任务调度方法、装置及系统 | |
CN111338791A (zh) | 集群队列资源的调度方法、装置、设备及存储介质 | |
EP3798930A2 (en) | Machine learning training resource management | |
CN110109741B (zh) | 循环任务的管理方法、装置、电子设备及存储介质 | |
CN111143133A (zh) | 虚拟机备份方法和备份虚拟机恢复方法 | |
CN111625331A (zh) | 任务调度方法、装置、平台、服务器及存储介质 | |
CN112486642A (zh) | 资源调度方法、装置、电子设备及计算机可读存储介质 | |
CN114564281A (zh) | 容器调度方法、装置、设备及存储介质 | |
US8359601B2 (en) | Data processing method, cluster system, and data processing program | |
CN114816709A (zh) | 任务调度方法、装置、服务器及可读存储介质 | |
CN111538585A (zh) | 一种基于node.js的服务器进程调度方法、系统和装置 | |
EP3798931A1 (en) | Machine learning training resource management | |
US11429435B1 (en) | Distributed execution budget management system | |
CN113157411A (zh) | 一种基于Celery的可靠可配置任务系统及装置 | |
CN113302593A (zh) | 任务处理方法、装置、系统、电子设备及存储介质 | |
US20080077925A1 (en) | Fault Tolerant System for Execution of Parallel Jobs | |
US11366692B2 (en) | Task execution based on whether task completion time exceeds execution window of device to which task has been assigned | |
CN111324668B (zh) | 数据库数据同步处理方法、装置及存储介质 | |
CN110908777B (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 |