资源调度方法、装置、计算机设备和存储介质与流程

文档序号:31714430发布日期:2022-10-04 21:08阅读:32来源:国知局
1.本技术涉及云原生
技术领域
:,特别是涉及一种资源调度方法、装置、计算机设备和存储介质。
背景技术
::2.kubernetes(简称k8s)是一个开源的容器集群管理系统,能够提供容器编排,资源调度,弹性伸缩,部署管理和服务发现等一系列功能,使容器化应用的部署工作更加简单和高效。调度器(scheduler)作为云原生k8s架构中的核心组件,其作用是对编排的应用合理分配资源,调度到合适的计算节点。3.在k8s集群中可以通过资源配额的方式来管理各个团队或者用户可使用资源的额度,以确保不会使用超过其分配份额的集群资源。由于资源调度是k8s调度器分配节点的过程,在分配各种资源时,没有实现调度资源实时的更新,特别是在一些高并发的情况下,可能存在资源分配与实际创建不一致的问题。4.针对相关技术中存在资源分配与实际创建不一致的问题,目前还没有提出有效的解决方案。技术实现要素:5.在本实施例中提供了一种资源调度方法、装置、计算机设备和存储介质,以解决相关技术中存在资源分配与实际创建不一致的问题。6.第一个方面,在本实施例中提供了一种资源调度方法,应用于容器云平台,所述容器云平台包括kubernetes集群;所述集群包括主控节点和若干工作节点,所述主控节点包括扩展调度器;所述资源调度方法适用于所述扩展调度器;所述资源调度方法包括:获取所述kubernetes集群中各工作节点中生成的crd资源;响应于接收到的有状态应用的创建请求,基于记录的资源列表,在各工作节点中选择与有状态应用适配的至少一个目标节点;所述资源列表包括各工作节点的crd资源、以及已记录的各工作节点已被分配且用于创建pod的资源情况;在所述至少一个目标节点的资源中,选择与所述有状态应用适配的目标资源;基于选择出的目标资源,在所述至少一个目标节点上创建用于承载所述有状态应用的pod。7.在其中的一些实施例中,当所述crd资源为本地磁盘时,每个工作节点上的agent进程基于该工作节点上的配置文件生成该工作节点上的所述crd资源;当所述crd资源为处理资源时,每个工作节点上的agent进程获取该工作节点上的处理资源并进行资源转换得到该工作节点上的所述crd资源。8.在其中的一些实施例中,所述响应于接收到的有状态应用的创建请求,基于记录的资源列表,在各工作节点中选择与有状态应用适配的至少一个目标节点,包括:根据所述创建请求中的存储需求,创建声明所述有状态应用的存储需求的pvc;基于记录的资源列表,在各工作节点中选择适配所述存储需求的至少一个目标节点。9.在其中的一些实施例中,所述pvc包括静态pvc和动态pvc;所述动态pvc在所述pod创建之后,与所述目标资源进行绑定;所述静态pvc在list-watch机制监控下创建后,直接与所述目标资源进行绑定。10.在其中的一些实施例中,上述方法还包括:在创建所述pod后,在所述资源列表中,添加并记录用于创建所述pod的所述目标资源。11.在其中的一些实施例中,上述方法还包括:在确定所述目标资源后,锁定所述目标资源。12.在其中的一些实施例中,所述目标资源的确定过程包括prefilter、filter、reserve/unreserve以及prebind阶段;通过在所述filter阶段进行扩展,以实现响应于接收到的有状态应用的创建请求,基于记录的资源列表,在各工作节点中选择与有状态应用适配的至少一个目标节点的步骤;通过在所述reserve/unreserve阶段进行扩展,以实现在所述至少一个目标节点的资源中,选择与所述有状态应用适配的目标资源以及在确定所述目标资源后,锁定所述目标资源的步骤。13.第二个方面,在本实施例中提供了一种资源调度装置,应用于容器云平台,所述容器云平台包括kubernetes集群;所述集群包括主控节点和若干工作节点,所述主控节点包括扩展调度器;所述装置包括:资源上报模块、资源调度模块以及资源分配模块;所述资源上报模块,用于获取所述kubernetes集群中各工作节点中生成的crd资源;所述资源调度模块,用于响应于接收到的有状态应用的创建请求,基于记录的资源列表,在各工作节点中选择与有状态应用适配的至少一个目标节点;所述资源列表包括各工作节点的crd资源、以及已记录的各工作节点已被分配且用于创建pod的资源情况;在所述至少一个目标节点的资源中,选择与所述有状态应用适配的目标资源;所述资源分配模块,用于基于选择出的目标资源,在所述至少一个目标节点上创建用于承载所述有状态应用的pod。14.第三个方面,在本实施例中提供了一种计算机设备,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述第一个方面所述的资源调度方法。15.第四个方面,在本实施例中提供了一种存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述第一个方面所述的资源调度方法。16.与相关技术相比,在本实施例中提供的资源调度方法、装置、计算机设备和存储介质,应用于容器云平台,所述容器云平台包括kubernetes集群;所述集群包括主控节点和若干工作节点,所述主控节点包括扩展调度器;所述资源调度方法适用于所述扩展调度器;所述资源调度方法包括:获取所述kubernetes集群中各工作节点中生成的crd资源;响应于接收到的有状态应用的创建请求,基于记录的资源列表,在各工作节点中选择与有状态应用适配的至少一个目标节点;所述资源列表包括各工作节点的crd资源、以及已记录的各工作节点已被分配且用于创建pod的资源情况;在所述至少一个目标节点的资源中,选择与所述有状态应用适配的目标资源;基于选择出的目标资源,在所述至少一个目标节点上创建用于承载所述有状态应用的pod,能够将各工作节点的资源情况记录在资源列表中,并基于资源列表进行调度,保证每次调度的资源是实时的,在分配的目标节点中创建pod,解决了资源分配与实际创建不一致的问题。17.本技术的一个或多个实施例的细节在以下附图和描述中提出,以使本技术的其他特征、目的和优点更加简明易懂。附图说明18.此处所说明的附图用来提供对本技术的进一步理解,构成本技术的一部分,本技术的示意性实施例及其说明用于解释本技术,并不构成对本技术的不当限定。在附图中:图1是一个实施例中资源调度方法的终端的硬件结构框图;图2是一个实施例中kubernetes集群的架构示意图;图3是一个实施例中资源调度方法的流程图;图4是一个优选实施例中资源调度方法的流程图;图5是一个实施例中资源调度装置的结构框图。19.图中:102、处理器;104、存储器;106、传输设备;108、输入输出设备;10、资源上报模块;20、资源调度模块;30、资源分配模块。具体实施方式20.为更清楚地理解本技术的目的、技术方案和优点,下面结合附图和实施例,对本技术进行了描述和说明。21.除另作定义外,本技术所涉及的技术术语或者科学术语应具有本技术所属
技术领域
:具备一般技能的人所理解的一般含义。在本技术中的“一”、“一个”、“一种”、“该”、“这些”等类似的词并不表示数量上的限制,它们可以是单数或者复数。在本技术中所涉及的术语“包括”、“包含”、“具有”及其任何变体,其目的是涵盖不排他的包含;例如,包含一系列步骤或模块(单元)的过程、方法和系统、产品或设备并未限定于列出的步骤或模块(单元),而可包括未列出的步骤或模块(单元),或者可包括这些过程、方法、产品或设备固有的其他步骤或模块(单元)。在本技术中所涉及的“连接”、“相连”、“耦接”等类似的词语并不限定于物理的或机械连接,而可以包括电气连接,无论是直接连接还是间接连接。在本技术中所涉及的“多个”是指两个或两个以上。“和/或”描述关联对象的关联关系,表示可以存在三种关系,例如,“a和/或b”可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。通常情况下,字符“/”表示前后关联的对象是一种“或”的关系。在本技术中所涉及的术语“第一”、“第二”、“第三”等,只是对相似对象进行区分,并不代表针对对象的特定排序。22.在本实施例中提供的方法实施例可以在终端、计算机或者类似的运算装置中执行。比如在终端上运行,图1是本实施例的资源调度方法的终端的硬件结构框图。如图1所示,终端可以包括一个或多个(图1中仅示出一个)处理器102和用于存储数据的存储器104,其中,处理器102可以包括但不限于微处理器mcu或可编程逻辑器件fpga等的处理装置。上述终端还可以包括用于通信功能的传输设备106以及输入输出设备108。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述终端的结构造成限制。例如,终端还可包括比图1中所示更多或者更少的组件,或者具有与图1所示出的不同配置。23.存储器104可用于存储计算机程序,例如,应用软件的软件程序以及模块,如在本实施例中的资源调度方法对应的计算机程序,处理器102通过运行存储在存储器104内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。24.传输设备106用于经由一个网络接收或者发送数据。上述的网络包括终端的通信供应商提供的无线网络。在一个实例中,传输设备106包括一个网络适配器(networkinterfacecontroller,简称为nic),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输设备106可以为射频(radiofrequency,简称为rf)模块,其用于通过无线方式与互联网进行通讯。25.容器云平台是依靠容器技术,结合云原生技术,采用容器、容器编排、服务网格,无服务等技术构建的一种轻量化paas平台,目标是支撑企业数字化,构建相应的数字云平台。kubernetes(简称k8s)是一个开源的容器集群管理系统,属于容器云平台,能够提供容器编排,资源调度,弹性伸缩,部署管理和服务发现等一系列功能,使容器化应用的部署工作更加简单和高效。26.图2是kubernetes集群的架构示意图,如图2所示,kubernetes集群中包括主控节点和工作节点,节点可以是虚拟机或物理机。pod(容器组)是kubernetes集群中可以创建和管理调度的最小单元,一个pod里面可装载至少一个容器。27.工作节点包括kubelet(主控节点代理程序)、proxy(网络代理程序)以及docker(容器引擎),其中kubelet用于在node节点上执行主控节点安排的任务,它将每个pod转换成一组容器,用于管理本节点运行容器的生命周期,包括创建容器、pod挂载数据卷、下载secret、获取容器和节点状态等工作;proxy用于在node节点上实现pod网络代理,负责为service提供cluster内部的服务发现、网络规划和负载均衡;docker负责所有具体的映像下载和容器运行。28.主控节点中包括apiserver(集群统一入口)、controllermanager(控制器管理程序)以及scheduler(调度器),其中apiserver作为各组件的协调者,提供认证、授权、访问控制、api注册和发现等机制,以restfulapi的方式提供接口服务,所有对象资源的增删改查和监听都由apiserver处理后提交给etcd存储;controllermanager负责控制器的管理,控制器和资源一一对应,控制器用于维护集群的状态,包括故障检测、自动扩展、滚动更新等常规后台任务;scheduler调度器作为云原生k8s集群中的核心组件,其作用是对编排的应用合理分配资源,调度到合适的计算节点。29.在k8s集群中可以通过资源配额的方式来管理各个团队或者用户可使用资源的额度,以确保不会使用超过其分配份额的集群资源。由于资源调度是k8s调度器分配工作节点的过程,在分配各种资源时,没有实现调度资源实时的更新,特别是在一些高并发的情况下资源比较紧张,由于缺乏对调度资源的维护,可能存在资源分配与实际创建不一致的问题。30.为了解决以上问题,在以下实施例中提供了一种应用于上述容器云平台的资源调度方法,能够将各工作节点的资源情况记录在资源列表中,并基于资源列表进行调度,保证每次调度的资源是实时的,在分配的目标节点中创建pod,解决了资源分配与实际创建不一致的问题。31.在本实施例中提供了一种资源调度方法,图3是本实施例中资源调度方法的流程图,如图3所示,该方法包括以下步骤:步骤s310,获取kubernetes集群中各工作节点中生成的crd资源。32.具体地,通过在kubernetes集群中各工作节点部署agent进程(代理进程)获取各工作节点中相应的crd资源(customresourcedefinition,用户自定义资源)。kubernetes主控节点中有原生调度器和扩展调度器,本实施例中方法适用于扩展调度器,扩展调度器可与原生调度器同时运行,主要用于调度业务节点的存储资源,比如本地磁盘资源、cpu处理资源、gpu处理资源等。其中,扩展调度器也会监控各工作节点上的crd资源,crd资源是静态的,只保持总大小,不会动态更新实际可用大小。33.进一步地,扩展调度器负责将资源的相关属性记录在资源列表中,在部署需要相应可用资源的有状态应用时,基于资源列表中资源情况分配可用的相应资源。比如,在部署需要本地磁盘资源的有状态应用时,会从资源列表中记录的磁盘数据中分配可用的磁盘资源。34.步骤s320,响应于接收到的有状态应用的创建请求,基于记录的资源列表,在各工作节点中选择与有状态应用适配的至少一个目标节点;资源列表包括各工作节点的crd资源、以及已记录的各工作节点已被分配且用于创建pod的资源情况。35.具体地,在需要为待调度pod申请可用资源时,用户提交给主控节点apiserver的应用类型以有状态应用呈现,有状态应用的创建请求中包括相应的资源存储需求,同时指定了调度需要的pvc(persistentvolumeclaim,持久化卷声明),以通过pvc绑定可用资源,为有状态应用分配可用资源。36.根据pvc中声明的存储需求,结合步骤s310中记录的资源列表,在扩展调度器的filter(过滤)阶段筛选适配有状态应用的至少一个目标节点。其中,资源列表中包括通过上述各工作节点上agent进程生成的静态crd资源,以及已记录的工作节点已分配用于创建pod的资源情况,并且为有状态应用创建pod后,用于创建该pod的目标资源也会记录在资源列表中。37.步骤s330,在至少一个目标节点的资源中,选择与有状态应用适配的目标资源。38.具体地,在扩展调度器的reserve(预留)阶段,根据步骤s320中筛选得到的至少一个目标节点中,进一步有状态应用对应pvc声明的存储需求,选择目标节点上合适的相应可用资源进行分配,得到与有状态应用适配的目标资源,通常是分配最空闲的资源,以保证资源能够均匀分配。39.步骤s340,基于选择出的目标资源,在至少一个目标节点上创建用于承载有状态应用的pod。40.具体地,根据选择出的目标资源,通过在目标资源上创建目录,并将目录挂载在pod的容器中,即可利用目标资源在至少一个目标节点中创建承载有状态应用的pod。41.上述步骤中的本地磁盘作为存储的一种表现形式,指在本地提供存储服务的磁盘,按照存储介质可划分为固态类和机械类,固态类如固态驱动器(solidstatedrive,ssd),机械类如硬盘驱动器(harddiskdrive,hdd),其相对于ceph等远程存储具有高速稳定的特点。然而,kubernetes原生调度器只关心应用的cpu、内存和gpu等资源的消耗,对本地磁盘的分配使用并不敏感。实际上,对于mysql、rabbitmq、redis等中间件,选择固态类的本地磁盘作为后端存储更加有利于应用的运行。42.上述步骤通过扩展调度器,能够将各工作节点的资源情况记录在资源列表中,并基于资源列表进行调度,保证每次调度的资源是实时的,在分配的目标节点中创建pod,解决了资源分配与实际创建不一致的问题。43.进一步地,在资源列表中记录并更新被分配用于创建pod的资源情况,无需更新各工作节点上总体的静态的crd资源,能够提高整体性能,减少更新crd资源消耗的时间。同时还作为一种具有通用性的资源调度方法,不仅仅适用于本地磁盘资源,同样适用于cpu的numa以及gpu等处理资源。44.在其中的一些实施例中,在通过agent进程上报各工作节点的crd资源中,在kubernetes集群的各工作节点中部署agent进程,agent进程获取对应的可用资源并上报给主控节点的apiserver,扩展调度器通过apiserver获取各工作节点上的crd资源。45.当crd资源为本地磁盘时,每个工作节点上的agent进程基于该工作节点上的配置文件生成该工作节点上的crd资源。46.具体地,用户可以通过生成挂载路径,对一个块设备或者本地磁盘进行挂载,生成相应的文件系统目录,而在kubernetes集群中,有状态应用往往需要一个可用的存储资源,那么文件系统目录可以作为相应pod的挂载点。47.agent进程需通过扫描每个工作节点中的配置文件,并将配置文件转换为kubernetes集群可用的资源,也就是生成crd资源,该crd资源需要记录每一个磁盘的信息,例如,磁盘的大小、磁盘的类型(ssd和hdd)、磁盘的可用状态(健康程度)等。48.其中,配置文件记录着磁盘的后续使用功能,配置文件具体如下:[ꢀꢀꢀꢀ{ꢀꢀꢀꢀꢀꢀꢀꢀ"disk":[ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ{ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ"disklabel":"3"ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ},ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ{ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ"disklabel":"1"ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ}ꢀꢀꢀꢀꢀꢀꢀꢀ],ꢀꢀꢀꢀꢀꢀꢀꢀ"disktypename":"localpath-hdd"ꢀꢀꢀꢀ},ꢀꢀꢀꢀ{ꢀꢀꢀꢀꢀꢀꢀꢀ"disk":[ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ{ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ"disklabel":"4"ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ},ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ{ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ"disklabel":"2"ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ}ꢀꢀꢀꢀꢀꢀꢀꢀ],ꢀꢀꢀꢀꢀꢀꢀꢀ"disktypename":"lvm-hdd"ꢀꢀꢀꢀ}],其中localpath表示本地磁盘、lvm表示lvm块设备,每个磁盘都会通过一个唯一的标识进行记录,也就相当于给磁盘打上相应的标签,保证磁盘不会发生变化。[0049]当crd资源为处理资源时,每个工作节点上的agent进程获取该工作节点上的处理资源并进行资源转换得到该工作节点上的crd资源。[0050]具体地,agent进程可以直接获取相应的cpu和gpu资源,并进行资源转换后进行上报,得到crd资源。[0051]扩展调度器获取并记录在资源列表中的crd资源是静态的,只保持磁盘资源或处理资源的总大小,并不会实时更新crd资源的可用大小。扩展调度器负责将crd资源保存到调度器的资源列表中,其中也包括crd资源记录的磁盘和cpu的相关信息,在部署需要本地磁盘或cpu等资源的有状态应用时,会根据资源列表分配可用的资源进行调度。[0052]进一步地,可以将资源列表记录在扩展调度器的缓存中,相比于更新各工作节点上总体的crd资源,能够减少动态更新的耗时,进而提升整体调度性能。[0053]通过本实施例中在每个工作节点部署agent进程以实现工作节点可用资源的上报,再通过扩展调度器监控各工作节点的crd资源,并记录在资源列表中,以在部署需要相应资源的有状态应用时,根据记录的资源列表为有状态应用分配可用的磁盘、cpu或gpu资源。[0054]在其中的一些实施例中,上述响应于接收到的有状态应用的创建请求,基于记录的资源列表,在各工作节点中选择与有状态应用适配的至少一个目标节点,包括以下步骤:根据创建请求中的存储需求,创建声明有状态应用的存储需求的pvc;基于记录的资源列表,在各工作节点中选择适配存储需求的至少一个目标节点。[0055]具体地,在需要为待调度pod申请可用资源时,用户提交给apiserver的应用类型以有状态应用即statefulset呈现,有状态应用指定了调度需要的pv(persistentvolumeclaim,持久化卷声明),即根据有状态应用的创建请求中的存储需求,创建相应的pvc,并且pvc中声明有该存储需求。[0056]其中,pvc的annotation中包括有以key1:value1形式表达的应用需求,原生pvc中包含有磁盘大小信息,而介质类型可通过原生pvc的storageclass来指定,在storageclass中,local-hdd代表需要hdd磁盘,local-ssd代表需要ssd磁盘。[0057]在扩展调度器中通过插件扩展filter阶段,根据资源列表中记录的各工作节点的crd资源、以及各工作节点已被分配且用于创建pod的资源情况,对每一个pvc声明的存储需求进行计算,从资源列表的crd资源中筛选出符合条件的工作节点,对于可能会筛选出多个符合条件的结果的情况,再对各工作节点进行评分,筛选出评分最高的节点作为与有状态应用适配的至少一个目标节点。[0058]若将资源列表保存在扩展调度器的缓存中,以crd资源为本地磁盘为例,从snapshot快照中获取缓存数据,缓存数据具体如下:typenodetopologyresourcestruct{ꢀꢀꢀꢀtopologyresourceinfo*v1.topologyresourceinfoꢀꢀꢀꢀrequestedꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀmap[v1.resourcetype]map[v1.resourcename]*resource.quantityꢀꢀꢀꢀallocatableꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀmap[v1.resourcetype]map[v1.resourcename]*resource.quantityꢀꢀꢀꢀgenerationꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀint64},其中,topologyresourceinfo是crd资源,可以记录各种数据,这里主要是记录节点上每一块磁盘的挂载路径、大小以及介质等属性信息,request记录缓存中磁盘资源的使用量情况,allocatable记录磁盘资源的总量,generation称为代,目的是为了更新snapshot,保证资源列表中每次调度的可用资源数据是实时的。[0059]进一步地,在扩展调度器通过插件扩展的reserve阶段,此时已经确定了至少一个目标节点,再进一步为有状态应用分配最合适的目标资源。[0060]以本地磁盘为例,首先需要对目标节点上各磁盘的现有容器按照各容器缓存量进行排序,之后根据排序结果往目标节点中可以正常使用的各个磁盘上调度。调度过程中优先往空闲存储空间大的磁盘上调度容器缓存量小的容器,还需要考虑各个磁盘的均匀分配以及各个磁盘的单磁盘容器数限制,以保证节点上每一块磁盘可分配量方差最小。[0061]最后,基于选择出的目标资源,在适配的至少一个工作节点上相应创建pod。[0062]另外,在创建pod后,在资源列表中,添加并记录用于pod的目标资源,以将每次创建pod后,各工作节点中资源的分配和使用情况更新并记录在资源列表中,以在每次调度有状态应用时,能够根据实时更新的资源列表进行调度,减少延迟造成的分配和创建不一致的情况。[0063]通过本实施例中根据有状态应用声明相应的pvc,以根据pvc的存储需求,结合记录的资源列表为有状态应用筛选和分配目标节点,进一步再选择得到目标资源,以在适配的至少一个工作节点上创建pod,减少分配与创建不一致问题。[0064]在其中的一些实施例中,上述pvc包括静态pvc和动态pvc。[0065]在k8s集群中,pv(persistentvolume,持久卷)是对集群资源抽象后的表达,管理员通过创建pv提供存储功能。另一方面,用户创建pvc声明所需的存储资源,根据pvc(要求的存储大小和访问模式)来寻找pv,如果寻找到相匹配的pv,则将pvc和pv进行绑定,以实现pvc和资源的绑定,并将资源提供给相应的pod使用。[0066]其中,动态pvc在pod创建之后,与适配的目标资源进行绑定。[0067]在创建动态pvc后,该动态pvc处于未就绪状态,不与目标资源进行绑定,也就是不绑定相匹配的pv。当对应pod创建后,该动态pvc处于就绪状态,与目标资源进行绑定。[0068]其中,静态pvc在list-watch机制监控下创建后,直接与目标资源进行绑定。[0069]静态pvc并不依赖于pod调度,所以理论上调度器无法监控此类pvc的创建。list-watch(资源监听)机制是kubernetes中的一种异步消息传递方式,通过list-watch机制监控到有静态pvc创建后,则该静态pvc直接与目标资源进行绑定,也就是寻找相匹配的pv进行绑定。[0070]通过本实施例能够兼顾动态pvc和静态pvc的创建,并且将使用的目标资源都记录在资源列表中,以保证可用资源分配的准确性。[0071]在其中的一些实施例中,上述目标资源的确定过程包括prefilter、filter、reserve/unreserve以及prebind阶段。[0072]其中,在prefilter(预过滤)阶段校验pvc状态,在prebind(预调度)阶段其具体功能与在原生调度器中的功能一致。[0073]kubernetes集群提供了在不改变原生调度器源码的基础上,通过实现相关插件来开发扩展调度器的方案。[0074]通过在filter阶段进行扩展,以实现上述实施例中响应于接收到的有状态应用的创建请求,基于记录的资源列表,在各工作节点中选择与有状态应用适配的至少一个目标节点的步骤。[0075]通过在reserve(预留)/unreserve(释放预留)阶段进行扩展,以实现上述实施例中在至少一个目标节点的资源中,选择与有状态应用适配的目标资源的步骤。[0076]进一步地,在确定目标资源后,锁定目标资源。[0077]通过锁定目标资源,以在创建pod过程中,该目标资源不会被其他创建请求抢占,具体可以通过为该目标资源进行标记以实现锁定。[0078]进一步地,如果最终在该目标资源中pod创建成功,则清除标记,并将该目标资源更新到资源列表中;如果最终pod创建失败,扩展调度器会调度unreserve插件对标记的目标资源进行释放,释放预占用的目标资源,以节省存储空间。[0079]通过本实施例中通过kubernetes调度框架对filter、reserve以及unreserve阶段进行扩展,能够不作侵入式改动,使其能适配以上实施例中本地磁盘、处理资源的调度分配。[0080]下面通过优选实施例对本实施例进行描述和说明。[0081]图4是本优选实施例的资源调度方法的流程图,如图4所示,该方法包括以下步骤:步骤s410,获取各工作节点中的agent进程获取对应的可用资源,并转换得到的crd资源。[0082]步骤s420,将crd资源和已记录的各工作节点已被分配且用于创建pod的资源情况记录在资源列表中。[0083]步骤s430,响应于接收到的有状态应用的创建请求,创建声明有创建请求中存储需求的pvc。[0084]步骤s440,结合记录的资源列表,在各工作节点中选择适配存储需求的至少一个目标节点。[0085]步骤s450,在至少一个目标节点的资源中,选择与有状态应用适配的目标资源并锁定该目标资源。[0086]步骤s460,基于选择出的目标资源,在至少一个目标节点上创建用于承载有状态应用的pod,并将该目标资源记录在资源列表中。[0087]需要说明的是,在上述流程中或者附图的流程图中示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。[0088]在本实施例中还提供了一种资源调度装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。以下所使用的术语“模块”、“单元”、“子单元”等可以实现预定功能的软件和/或硬件的组合。尽管在以下实施例中所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。[0089]图5是本实施例的资源调度装置的结构框图,如图5所示,该装置包括:资源上报模块10、资源调度模块20以及资源分配模块30。[0090]资源上报模块10,用于获取kubernetes集群中各工作节点中生成的crd资源。[0091]资源调度模块20,用于响应于接收到的有状态应用的创建请求,基于记录的资源列表,在各工作节点中选择与有状态应用适配的至少一个目标节点;资源列表包括各工作节点的crd资源、以及已记录的各工作节点已被分配且用于创建pod的资源情况;在至少一个目标节点的资源中,选择与有状态应用适配的目标资源。[0092]资源分配模块30,用于基于选择出的目标资源,在至少一个目标节点上创建用于承载有状态应用的pod。[0093]通过本实施例中提供的装置,在扩展调度器中,能够将各工作节点的资源情况记录在资源列表中,并基于资源列表进行调度,保证每次调度的资源是实时的,在分配的目标节点中创建pod,解决了资源分配与实际创建不一致的问题。[0094]进一步地,在资源列表中记录并更新被分配用于创建pod的资源情况,无需更新各工作节点上总体的静态的crd资源,能够提高整体性能,减少更新crd资源消耗的时间。同时还作为一种具有通用性的资源调度方法,不仅仅适用于本地磁盘资源,同样适用于cpu的numa以及gpu等处理资源。[0095]需要说明的是,上述各个模块可以是功能模块也可以是程序模块,既可以通过软件来实现,也可以通过硬件来实现。对于通过硬件来实现的模块而言,上述各个模块可以位于同一处理器中;或者上述各个模块还可以按照任意组合的形式分别位于不同的处理器中。[0096]在本实施例中还提供了一种计算机设备,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。[0097]可选地,上述计算机设备还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。[0098]需要说明的是,在本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,在本实施例中不再赘述。[0099]此外,结合上述实施例中提供的资源调度方法,在本实施例中还可以提供一种存储介质来实现。该存储介质上存储有计算机程序;该计算机程序被处理器执行时实现上述实施例中的任意一种资源调度方法。[0100]应该明白的是,这里描述的具体实施例只是用来解释这个应用,而不是用来对它进行限定。根据本技术提供的实施例,本领域普通技术人员在不进行创造性劳动的情况下得到的所有其它实施例,均属本技术保护范围。[0101]显然,附图只是本技术的一些例子或实施例,对本领域的普通技术人员来说,也可以根据这些附图将本技术适用于其他类似情况,但无需付出创造性劳动。另外,可以理解的是,尽管在此开发过程中所做的工作可能是复杂和漫长的,但是,对于本领域的普通技术人员来说,根据本技术披露的技术内容进行的某些设计、制造或生产等更改仅是常规的技术手段,不应被视为本技术公开的内容不足。[0102]“实施例”一词在本技术中指的是结合实施例描述的具体特征、结构或特性可以包括在本技术的至少一个实施例中。该短语出现在说明书中的各个位置并不一定意味着相同的实施例,也不意味着与其它实施例相互排斥而具有独立性或可供选择。本领域的普通技术人员能够清楚或隐含地理解的是,本技术中描述的实施例在没有冲突的情况下,可以与其它实施例结合。[0103]以上所述实施例仅表达了本技术的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对专利保护范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。因此,本技术的保护范围应以所附权利要求为准。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1