掌桥专利:专业的专利平台
掌桥专利
首页

一种基于k8s的NUMA感知调度方法及系统

文献发布时间:2024-04-18 20:01:23


一种基于k8s的NUMA感知调度方法及系统

技术领域

本发明涉及计算机的容器集群管理技术领域,具体涉及一种基于k8s的NUMA感知调度方法及系统。

背景技术

k8s(kubernetes)是由谷歌开源的容器编排管理工具,为容器化的应用提供了资源调度、部署运行、服务发现、扩容及缩容等一整套功能。随着k8s的持续发展,俨然已成为容器编排领域的事实标准。越来越多的应用包括电信、科学计算、机器学习、金融服务和数据分析等领域的工作负载开始以pod(容器组)的形式部署到k8s云平台中,这些应用都是访存密集型和高吞吐量并行计算应用。要使这些应用获得最佳性能,需将应用调度至最佳的工作节点以及为应用分配节点上最佳的硬件资源。

在k8s集群中调度容器组pod的组件是调度管理组件kube-scheduler,该组件包括过滤、打分、绑定前、绑定等步骤,依次执行这些步骤可以为容器组pod选取一个最佳的工作节点;为pod分配硬件资源的组件是容器管理组件kubelet,kubelet组件能够通过自身的拓扑管理器模块将pod需要的CPU、内存等资源分配到同一个NUMA 节点中或者多个NUMA 节点中(一个NUMA 节点的资源总额无法满足容器组pod的资源需求)。也就是说要想使pod获得最佳硬件资源必须要使调度器组件能够将容器组pod调度到一个拥有最佳硬件资源的工作节点上,然后由工作节点上的kubelet组件为容器组pod分配硬件资源。

但是,现有的NUMA资源分配方案有如下缺点:缺点(1):容器组pod请求硬件资源的最佳NUMA节点组合由工作节点的kubelet组件计算所得,容器组pod调度到具体的运行节点是由调度组件计算所得,而调度组件并不知道集群内每个节点的NUMA资源情况,因此缺少一种全局视角来作出最佳调度抉择。比如会将容器组pod调度到了一个非NUMA架构的节点或者NUMA中硬件资源无法满足容器组pod需求的节点;缺点(2):kubelet在为pod计算NUMA节点(NUMA node)组合时,是由拓扑管理器模块统筹cpu管理器、内存管理器和设备管理器等几种不相交的管理器,协调不同管理器的细粒度硬件资源分配,从而将资源分配到同一个或多个NUMA节点中。具体做法是:第一步,cpu管理器计算出满足容器组pod cpu资源需求的NUMA节点组合,同时内存管理器和设备管理器也分别计算出本资源下满足容器组pod 需求的NUMA节点组合;如图1中(a)所示,4CPU NUMA0(用0表示)和4CPUNUMA1(用1表示)两种NUMA节点具有{01}、{10}和{11}三种NUMA节点组合方式,cpu管理器根据请求可用8个CPU、3个CPU的资源需求,计算出{01}、{10}和{11}三种NUMA节点组合方式均满足要求,然后通过内存管理器和设备管理器均可进一步分别计算满足容器组pod 需求的NUMA节点组合,最终分别得到cpu管理器、内存管理器和设备管理器对应的计算结果,例如计算结果为{01true}、{10 true}和{11 false}表示仅前面两种符合要求,true和false分别表示NUMA节点组合是否符合要求。第一步针对每一种资源求取NUMA节点组合,是使用数学中的组合概率求出结果:共m个NUMA节点,需要n个满足容器组pod要求,那么求NUMA节点组合数公式为:

发明内容

本发明要解决的技术问题:针对现有技术的上述问题,提供一种基于k8s的NUMA感知调度方法及系统,本发明旨在精准地将容器组pod调度到能够满足自身NUMA资源需求的节点,同时加快容器组启动成功的时间。

为了解决上述技术问题,本发明采用的技术方案为:

一种基于k8s的NUMA感知调度方法,包括:

步骤101:为k8s集群在管理节点上部署调度插件,在各个工作节点上部署用于收集和更新NUMA配置信息并保存到配置数据库ETCD中的资源管理组件,在收到创建目标容器组pod的请求时跳转步骤S102;

步骤102:利用调度插件结合配置数据库ETCD中记录的NUMA配置信息将目标容器组pod调度到符合要求的工作节点,生成目标容器组pod需要的NUMA节点组合信息并更新到目标容器组pod的注解中;

步骤103:利用kubelet组件创建目标容器组pod,同时根据目标容器组pod的注解中记录的NUMA节点组合信息给容器组pod分配对应NUMA节点组合中的硬件资源。

可选地,步骤102包括:

步骤201:根据配置数据库ETCD中记录的NUMA配置信息,过滤掉不满足目标容器组pod的资源需求的工作节点;

步骤202:对过滤后剩余的工作节点打分并选出得分最高的工作节点,并计算工作节点满足目标容器组pod的资源需求的最佳NUMA节点组合;

步骤203:将计算得到的工作节点满足目标容器组pod的资源需求的最佳NUMA节点组合更新到目标容器组pod的注解中。

可选地,所述NUMA配置信息包括工作节点在分配NUMA资源时只支持单NUMA节点或者支持多NUMA 节点;步骤201中过滤掉不满足目标容器组pod的资源需求的工作节点包括:若目标容器组pod的资源需求要求目标容器组pod的资源必须属于一个NUMA节点,则将支持多NUMA 节点的工作节点过滤;若目标容器组pod的资源需求要求目标容器组pod的资源需要多个NUMA节点,则将只支持单NUMA节点的工作节点过滤。

可选地,步骤202中对过滤后剩余的工作节点打分时,若目标容器组pod的资源需求要求目标容器组pod的资源必须属于一个NUMA节点,则针对每一个工作节点打分包括:依次遍历该工作节点的每个NUMA 节点,筛选出满足目标容器组pod请求的NUMA 节点,最终对所有满足目标容器组pod请求的NUMA 节点根据NUMA 节点的资源数量作为NUMA 节点的得分,并将该工作节点最高的NUMA 节点的得分作为该工作节点的分数。

可选地,步骤202中对过滤后剩余的工作节点打分时,若目标容器组pod的资源需求要求目标容器组pod的资源需要多个NUMA节点,则针对每一个工作节点打分包括:该工作节点的NUMA节点数量n以及每一个NUMA节点的资源数量,将选择NUMA节点数量从1开始遍历到该工作节点的NUMA节点数量n结束,针对遍历得到的每一种选择NUMA节点数量i,求得n个数中取i个数的NUMA节点组合使用二维数组存储;最终遍历二维数组中的每一种NUMA节点组合中NUMA资源的总额作为对应的NUMA节点组合的得分,并将最高的NUMA节点组合的得分作为该工作节点的分数。

可选地,步骤201中目标容器组pod的资源需求包括CPU资源需求、内存资源需求和外设资源需求中的部分或者全部。

可选地,步骤101中当收到创建容器组pod的请求时还包括判断容器组pod的应用类型,只有容器组pod的应用类型为访存密集型应用时才跳转步骤S102。

可选地,步骤101中收到创建容器组pod的请求是指收到用户便携的收到创建容器组pod的请求yaml或json格式的配置文件或者云平台提交的请求。

此外,本发明还提供一种基于k8s的NUMA感知调度系统,包括相互连接的微处理器和存储器,所述微处理器被编程或配置以执行所述基于k8s的NUMA感知调度方法。

此外,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序用于被微处理器编程或配置以执行所述基于k8s的NUMA感知调度方法。

和现有技术相比,本发明的优势在于:本发明包括为k8s集群在管理节点上部署调度插件,在各个工作节点上部署用于收集和更新NUMA配置信息并保存到配置数据库ETCD中的资源管理组件,在收到创建目标容器组pod的请求时利用调度插件结合配置数据库ETCD中记录的NUMA配置信息将目标容器组pod调度到符合要求的工作节点,生成目标容器组pod需要的NUMA节点组合信息并更新到目标容器组pod的注解中,利用kubelet组件创建目标容器组pod,同时根据目标容器组pod的注解中记录的NUMA节点组合信息给容器组pod分配对应NUMA节点组合中的硬件资源,本发明能够支持k8s集群范围内的NUMA感知调度,用户无需实现知道每个节点的NUMA信息,只需要创建容器组pod,即可将容器组pod运行到最佳的NUMA资源节点上。

附图说明

图1为现有技术中kubelet生成最佳NUMA节点组合的原理示意图。

图2为本发明实施例方法的基本流程示意图。

图3为本发明实施例方法的原理示意图。

图4为本发明实施例中i=1时生成最佳NUMA节点组合的原理示例图。

图5为本发明实施例中i=2时生成最佳NUMA节点组合的原理示例图。

具体实施方式

如图2所示,本实施例基于k8s的NUMA感知调度方法包括:

步骤101:为k8s集群在管理节点上部署调度插件,在各个工作节点上部署用于收集和更新NUMA配置信息并保存到配置数据库ETCD中的资源管理组件,在收到创建目标容器组pod的请求时跳转步骤S102;

步骤102:利用调度插件结合配置数据库ETCD中记录的NUMA配置信息将目标容器组pod调度到符合要求的工作节点,生成目标容器组pod需要的NUMA节点组合信息并更新到目标容器组pod的注解中;

步骤103:利用kubelet组件创建目标容器组pod,同时根据目标容器组pod的注解中记录的NUMA节点组合信息给容器组pod分配对应NUMA节点组合中的硬件资源。

如图3所示,本实施例基于k8s的NUMA感知调度方法能够在pod调度阶段就能感知集群内每个工作节点的NUMA资源情况,精准的将pod调度到能够满足自身NUMA资源需求的节点,保证pod能启动成功。本实施例基于k8s的NUMA感知调度方法具体为如下两方面,一、扩展kubernetes的调度管理组件,实现一个NUMA感知调度插件,包括在过滤阶段过滤掉不合适的工作节点;在打分阶段将合适的节点打高分并将原先的计算出分配给pod请求的NUMA资源(也就是NUMA节点组合)的步骤从工作节点的kubelet侧移到调度器侧,并优化计算NUMA资源的算法,新的算法较之前kubelet侧的算法更简单且高效;在绑定前阶段将打分阶段记录的NUMA节点组合更新到pod的注解中。二、对kubelet组件定制修改,无需kubelet组件进行复杂的求pod所需NUMA资源的运算,只需拿到调度器计算的结果,直接给pod绑定NUMA资源,因此也会间接加快pod的创建时间。针对现有技术的缺点(1),本实施例方法提供一种NUMA信息收集和更新的资源管理组件,该组件能够收集k8s集群内每个节点上的NUMA资源信息,将收集到的资源信息保存到配置数据库ETCD,调度组件便可以感知k8s集群内每个节点的NUMA资源情况。同时节点因为创建pod后资源信息发生变化,该组件还会定期更新资源信息,使集群内各节点的信息始终保持在正确状态,进一步的保证调度组件在调度后面的pod时能够作出正确的调度抉择。针对现有技术的缺点(2),本实施例将原先给pod请求资源计算NUMA节点组合的步骤从工作节点的kubelet侧移到调度器侧,并且重新设计选取NUMA节点组合的算法,新的算法较之前的算法更简单且高效。同时对kubelet侧定制修改,跳过复杂的运算,拿到调度器计算的NUMA节点组合结果,直接给pod绑定NUMA节点组合内的资源,间接的加快了pod创建时间。

本实施例中步骤101包括为k8s集群在管理节点上部署调度插件,在各个工作节点上部署用于收集和更新NUMA配置信息并保存到配置数据库ETCD中的资源管理组件,资源管理组件收集和更新k8s集群内每个节点上包含NUMA配置信息的硬件资源信息并保存到配置数据库ETCD中;资源管理组件保存节点信息时会同时将节点分类,记录哪些节点在分配NUMA资源时只支持单NUMA节点(只允许资源在同一个NUMA节点中)、哪些节点在分配NUMA资源时支持多NUMA节点(在一个NUMA节点不满足资源需求时允许资源分别在多个NUMA节点中)、哪些节点只支持容器独享NUMA节点资源、哪些节点支持多个容器共享NUMA节点资源;由于需要收集节点硬件资源,因此需要在k8s集群中每个节点上部署资源管理组件。调度插件在调度pod时执行,因此调度插件和k8s集群的其他管理组件一样,只需要部署在集群的管理节点上。

作为一种可选的实施方式,本实施例步骤101中当收到创建容器组pod的请求时还包括判断容器组pod的应用类型,只有容器组pod的应用类型为访存密集型应用时才跳转步骤S102。作为一种可选的实施方式,本实施例步骤101中收到创建容器组pod的请求是指收到用户便携的收到创建容器组pod的请求yaml或json格式的配置文件或者云平台提交的请求。用户编写应用Pod的yaml或json格式的配置文件或者使用麒麟容器云平台创建Pod,创建Pod时,用户知晓访存密集型应用的Pod才需要NUMA感知。

本实施例中步骤102包括:

步骤201:根据配置数据库ETCD中记录的NUMA配置信息,过滤掉不满足目标容器组pod的资源需求的工作节点;目标容器组pod的资源需求可包括CPU资源需求、内存资源需求和外设资源需求中的部分或者全部,同理NUMA资源也表示NUMA的CPU资源、内存资源和外设资源,外设资源可包括磁盘资源等;

步骤202:对过滤后剩余的工作节点打分并选出得分最高的工作节点,并计算工作节点满足目标容器组pod的资源需求的最佳NUMA节点组合;

步骤203:将计算得到的工作节点满足目标容器组pod的资源需求的最佳NUMA节点组合更新到目标容器组pod的注解中。

本实施例中NUMA配置信息包括工作节点在分配NUMA资源时只支持单NUMA节点或者支持多NUMA 节点;步骤201中过滤掉不满足目标容器组pod的资源需求的工作节点包括:若目标容器组pod的资源需求要求目标容器组pod的资源必须属于一个NUMA节点,则将支持多NUMA 节点的工作节点过滤;若目标容器组pod的资源需求要求目标容器组pod的资源需要多个NUMA节点,则将只支持单NUMA节点的工作节点过滤,通过上述方式,调度插件在调度pod时会根据pod的不同需求将k8s集群内不满足需求的节点先过滤掉,能够减少后续步骤的节点数,间接减少不必要的运算量。一些场景中,pod所需的资源必须属于一个NUMA节点,此时调度插件会将其他类型的节点过滤掉;一些场景中,pod所需的资源需要多个NUMA节点才能满足,此时调度插件会将其他类型的节点过滤掉。

针对给容器组pod生成NUMA节点组合资源的算法,本实施例中使用一种新的简单的算法代替之前kubelet的复杂算法,并将生成NUMA节点组合的过程移到调度组件中执行,kubelet创建pod时无需再计算NUMA节点组合,能够减少创建pod的时间。具体地,调度插件针对步骤S4过滤剩下的节点打分,选出得分最高的节点同时记录下每个节点的满足pod资源请求的最佳NUMA节点组合。

一些场景中,pod所需的资源必须属于一个NUMA节点。此时打分规则是依次遍历节点的每个NUMA节点,判断NUMA节点中的资源是否满足pod请求,并在NUMA节点维度对每个NUMA节点进行打分,满足pod资源请求最充分的NUMA节点得分最高。同时将该NUMA节点的得分作为该节点的分数,并记录下该NUMA节点的id;在该场景下,步骤202中对过滤后剩余的工作节点打分时,若目标容器组pod的资源需求要求目标容器组pod的资源必须属于一个NUMA节点,则针对每一个工作节点打分包括:依次遍历该工作节点的每个NUMA 节点,筛选出满足目标容器组pod请求的NUMA 节点,最终对所有满足目标容器组pod请求的NUMA 节点根据NUMA 节点的资源数量作为NUMA 节点的得分,并将该工作节点最高的NUMA 节点的得分作为该工作节点的分数。

一些场景中,pod所需的资源需要多个NUMA节点才能满足。在该场景下,步骤202中对过滤后剩余的工作节点打分时,若目标容器组pod的资源需求要求目标容器组pod的资源需要多个NUMA节点,则针对每一个工作节点打分包括:该工作节点的NUMA节点数量n以及每一个NUMA节点的资源数量,将选择NUMA节点数量从1开始遍历到该工作节点的NUMA节点数量n结束,针对遍历得到的每一种选择NUMA节点数量i,求得n个数中取i个数的NUMA节点组合使用二维数组存储,比如3个数中取1个数的组合为[[1], [2], [3]],取2个数的组合为[[1, 2], [1, 3], [2, 3]];最终遍历二维数组中的每一种NUMA节点组合中NUMA资源的总额作为对应的NUMA节点组合的得分,并将最高的NUMA节点组合的得分作为该工作节点的分数。判断总额能否满足pod请求,满足则返回该组合,遍历到最后仍然没有找到满足请求的组合则返回空值。求出返回的组合数组长度m,表示需要m个NUMA节点满足pod资源请求,m值越小的节点得分越高。记录下该组合的元素值代表NUMA节点的id。例如,待打分节点有两个NUMA节点,每个NUMA节点有4个cpu和8g内存,pod请求3个cpu和4g内存;如图4所示,i=1时,2个数中取1个数的组合情况为[[1], [2]],组合为[1]时(表示NUMA节点1),该组合中NUMA资源的总额为4个cpu和8g内存,能满足pod请求,因此返回[1]作为NUMA节点组合。如图5所示,i=2时,若NUMA节点组合[1 2]能满足pod请求,因此返回[1 2]作为NUMA节点组合。最终遍历二维数组中的每一种NUMA节点组合中NUMA资源的总额作为对应的NUMA节点组合的得分,并将最高的NUMA节点组合的得分作为该工作节点的分数。

调度插件在打分阶段执行完后,确定将pod调度到哪个节点。因此在绑定前阶段已经知道运行pod的节点,根据节点可以获取到步骤5记录的NUMA节点信息,将该信息更新到pod的注解中。定制修改后的kubelet组件创建pod时,拿到pod注解中记录的NUMA节点组合信息,跳过计算以及合并NUMA节点组合的复杂运算,直接将拿到的NUMA节点组合信息分配该NUMA节点组合中的硬件资源给pod。

综上所述,本实施例基于k8s的NUMA感知调度方法能够支持kubernetes集群范围内的NUMA感知调度,用户无需实现知道每个节点的NUMA信息,只需要创建pod,即可将pod运行到最佳的NUMA资源节点上;针对给pod生成NUMA node组合资源的算法,本实施例方法中使用一种新的简单的算法代替之前kubelet的复杂算法,并将生成NUMA node组合的过程移到调度组件中执行,kubelet创建pod时无需再计算NUMA node组合,能够减少创建pod的时间。目前kubernetes系统中为pod分配硬件资源的组件是kubelet组件,且kubelet组件计算NUMA节点组合算法过于复杂。现有的NUMA感知调度方案都没有跨出用kubelet计算硬件资源的NUMA节点组合。针对上述问题,本实施例基于k8s的NUMA感知调度方法基于k8s的NUMA感知调度方法创造性地将计算硬件资源的NUMA节点组合过程放到调度器部分来执行,因此可以重新设计一种简单的方法来计算NUMA节点组合。

此外,本实施例还提供一种基于k8s的NUMA感知调度系统,包括相互连接的微处理器和存储器,所述微处理器被编程或配置以执行所述基于k8s的NUMA感知调度方法。本实施例还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序用于被微处理器编程或配置以执行所述基于k8s的NUMA感知调度方法。

本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可读存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

技术分类

06120116550940