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

基于容器化的资源调度方法及装置

文献发布时间:2023-06-19 10:57:17


基于容器化的资源调度方法及装置

技术领域

本发明涉及云计算技术领域,具体地,涉及一种基于容器化的资源调度方法及装置。

背景技术

软件开发一路走来先后经历了不同的发展阶段,从瀑布式方法到敏捷交付,再到DevOps(Development和Operations的组合词,过程、方法与系统的统称),软件开发从未停止前进的步伐。随着企业朝着DevOps的方式迈进,提升持续集成和持续交付(CI/CD)的能力,将有助于企业产品快速开发、快速上线、快速试错和快速恢复。

目前传统的构建发布系统会存在以下两种问题:第一种是CI/CD系统在没有构建任务时,其物理机或者虚拟机会处在空闲状态,没有完全释放掉资源,导致大量的机器空闲,造成资源的浪费。第二种是当有大量的构建任务时,会出现任务资源调度不均衡,导致某些构建节点上的任务出现排队等待执行,而某些构建节点却处于空闲或只有少量的任务在其上面运行。

综上,目前亟需一种能动态合理利用资源及负载均衡任务调度的方案。以解决使用者在CI/CD流水线使用过程中遇到的资源使用不合理的问题。

发明内容

本发明实施例的主要目的在于提供一种基于容器化的资源调度方法及装置,以均衡调度资源,保证资源的充分利用。

为了实现上述目的,本发明实施例提供一种基于容器化的资源调度方法,包括:

接收流水线模板下发请求,根据流水线模板下发请求创建流水线模板;

按照流水线模板中的任务调度顺序依次将各任务转换为对应的容器;

在容器中挂载对应任务的资源;

将挂载资源后的容器部署在预先确定的目标节点上,以实现资源调度。

本发明实施例还提供一种基于容器化的资源调度装置,包括:

流水线模板模块,用于接收流水线模板下发请求,根据流水线模板下发请求创建流水线模板;

容器生成模块,用于按照流水线模板中的任务调度顺序依次将各任务转换为对应的容器;

资源挂载模块,用于在容器中挂载对应任务的资源;

容器部署模块,用于将挂载资源后的容器部署在预先确定的目标节点上,以实现资源调度。

本发明实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并在处理器上运行的计算机程序,处理器执行计算机程序时实现所述的基于容器化的资源调度方法的步骤。

本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现所述的基于容器化的资源调度方法的步骤。

本发明实施例的基于容器化的资源调度方法及装置先根据流水线模板下发请求创建流水线模板,再按照流水线模板中的任务调度顺序依次将各任务转换为对应的容器,然后在容器中挂载对应任务的资源,将挂载资源后的容器部署在目标节点上,可以均衡调度资源,保证资源的充分利用。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明一实施例中基于容器化的资源调度方法的流程图;

图2是本发明另一实施例中基于容器化的资源调度方法的流程图;

图3是本发明实施例中创建流水线模板的流程图;

图4是本发明实施例中基于容器化的资源调度装置的结构框图;

图5是本发明另一实施例中自定义资源模板装置的结构框图;

图6是本发明另一实施例中自定义资源控制器的结构框图;

图7是本发明另一实施例中监控装置的结构框图;

图8是本发明另一实施例中日志装置的结构框图;

图9是本发明实施例中计算机设备的结构框图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本领域技术人员知道,本发明的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。

鉴于现有技术的资源使用不合理,资源分配不均衡,本发明实施例提供一种基于容器化的资源调度方法,可以均衡调度资源,保证资源的充分利用。以下结合附图对本发明进行详细说明。

在云计算领域,容器本身为使用者提供了独立操作系统、运行环境、文件存储等能力,基于Google开源的Kubernetes容器编排方案的技术实现,保证了容器在使用时候的负载均衡、生命周期管理和弹性伸缩等。故本发明基于Kubernetes和容器化技术的特点,提出一种基于Kubernetes原生的CI/CD(持续集成和持续交付)系统。通过Kubernetes自定义资源(CRD),设计多种CI/CD的CRD资源,如Task(任务)、PipelineResource(流水线资源,资源)、Pipeline(流水线)和PipelineRun(流水线运行)。通过编写流水线模板,将任务、资源编排组合出所需的流水线,当流水线运行时,将流水线的任务生成对应的容器(pod)运行在Kubernetes集群,当任务运行完,采集运行日志并删除容器,实现运行资源即用即生成,任务执行完就被销毁的技术方案。同时基于Kubernetes的负载均衡策略,运行任务的容器会被合理的调度到各个空闲的节点上,保证了各虚拟机资源的充分利用。本发明将Kubernetes原生和CI/CD技术结合,创造出了一种新的流水线作业方案,实现了云原生的理念。

图1是本发明一实施例中基于容器化的资源调度方法的流程图。图2是本发明另一实施例中基于容器化的资源调度方法的流程图。如图1-图2所示,基于容器化的资源调度方法包括:

S101:接收流水线模板下发请求,根据流水线模板下发请求创建流水线模板。

图3是本发明实施例中创建流水线模板的流程图。如图3所示,创建流水线模板包括:

S201:根据流水线模板下发请求获取任务调度顺序。

在执行S201之前,还包括:安装自定义资源控制器。将自定义资源控制器预先安装到Kubernetes集群中,主要用来解析和管理自定义资源。自定义资源控制器是容器化运行任务的核心装置,需要一直运行在Kubernetes集群中,当接收到自定义资源模板信息(CI/CD流水线的CRD模板信息,流水线模板)时,会校验和解析流水线的CRD模板信息,当模板格式和内容通过校验时,会解析流水线模板(流水线,Pipeline),根据流水线模板中编排的任务顺序,依次启动对应的容器完成任务的执行。

自定义资源控制器包括自定义资源校验单元(Pipeline-Webhook)和自定义资源控制单元(Pipeline-Controller)。自定义资源控制单元用于监控CRD资源的解析、创建、删除、修改和查询事件。

S202:根据任务调度顺序获取各任务和各任务的资源。

在执行S202之前,还包括:定义任务、任务对应的资源和任务调度顺序。

具体实施时,可以通过自定义资源模板装置存储CI/CD流水线的CRD模板信息,定义流水线模板的组成、功能和输入输出信息(资源)。其中模板的CRD资源类型包括:Task(任务)、PipelineResource(流水线资源,资源)、Pipeline(流水线)和PipelineRun(流水线运行)。

通过任务单元定义待执行的任务(如编译代码、构建镜像和推送镜像等),任务是流水线中最小的可配置单元,每个任务实际以容器的形式运行在kubernetes集群中。任务执行成功,对应的容器状态会变成Completed(完成),否则为Failed(失败)。

通过流水线资源管理单元定义流水线资源的输入输出信息,流水线通过引入需要的资源名即可使用。

S203:根据任务调度顺序、各任务和各任务的资源创建流水线模板。

流水线模板(流水线)是一个或多个任务、资源和自定义参数的组合。流水线模板中定义了待调度的任务和资源的名字,当自定义资源控制单元(Pipeline-Controller)解析模板后,会依据任务名和资源名字,创建对应的任务。

具体实施时,用户通过编写流水线模板,将Task(任务)、PipelineResource(资源)、Pipeline(流水线)和PipelineRun(流水线运行)进行整合,将流水线模板下发到Kubernetes集群中,Kubernetes集群中的自定义资源控制器接收到流水线模板下发请求,由PipelineRun的CRD资源开始启动运行流水线作业,直到Pipeline最后一个任务容器运行结束截止,完成一次流水线作业任务。

S102:按照流水线模板中的任务调度顺序依次将各任务转换为对应的容器。

在执行S102之前,还包括:通过自定义资源校验单元校验流水线模板格式的正确性。当流水线模板格式正确时,执行S102-S104,通过PipelineRun触发指定的流水线运行,通过自定义资源控制单元解析流水线模板中设置的任务调度顺序,依次将各任务转换为对应的容器,同时将资源挂载到容器中。

S103:在容器中挂载对应任务的资源。

S104:将挂载资源后的容器部署在预先确定的目标节点上,以实现资源调度。

一实施例中,执行S104之前还包括:根据负载均衡策略确定目标节点。

具体实施时,Kubernetes集群的调度器(kube-scheduler)组件会监控各虚拟机节点(node)上的资源运行情况,通过预选和优选负载均衡策略,将任务容器部署到选择出来的目标节点上运行,保证节点资源的充分使用。

一实施例中,执行S104之后还包括:

1、在目标节点上运行容器,得到任务执行结果。

2、当用户发起发布部署请求时,任务执行结果为镜像,此时将镜像上传至镜像仓库,用于后续的发布工作。

3、接收应用启动指令,并根据应用启动指令从镜像仓库中拉取对应的镜像并运行以启动应用程序。

例如,用户发起发布部署请求,将发布的流水线模板下发给Kubernetes集群,集群中的自定义资源控制器解析发布的流水线模板格式,根据负载均衡策略将模板部署到对应的集群环境上。在部署的过程中根据应用实际情况,会从镜像仓库中拉取对应的镜像来启动应用程序。

一实施例中,还包括:实时采集任务运行过程中的日志信息;存储采集到的日志信息,并展示给使用者。

一实施例中,还包括:实时监控流水线的运行状态(如任务运行成功或运行失败)和监控任务运行的日志信息。在日志采集完毕且任务运行完成后删除容器,释放出构建资源给其他任务使用,进而达到资源的合理利用。

图1所示的基于容器化的资源调度方法的执行主体可以为计算机。由图1所示的流程可知,本发明实施例的基于容器化的资源调度方法先根据流水线模板下发请求创建流水线模板,再按照流水线模板中的任务调度顺序依次将各任务转换为对应的容器,然后在容器中挂载对应任务的资源,将挂载资源后的容器部署在目标节点上,可以均衡调度资源,保证资源的充分利用。

本发明实施例的具体流程如下:

1、接收流水线模板下发请求,根据流水线模板下发请求获取任务调度顺序。

2、根据任务调度顺序获取各任务和各任务的资源。

3、根据任务调度顺序、各任务和各任务的资源创建流水线模板。

4、按照流水线模板中的任务调度顺序依次将各任务转换为对应的容器。

5、在容器中挂载对应任务的资源。

6、将挂载资源后的容器部署在预先确定的目标节点上,以实现资源调度。

7、目标节点上运行容器,得到任务执行结果;当任务执行结果为镜像时,将镜像上传至镜像仓库,接收应用启动指令。

8、根据应用启动指令从镜像仓库中拉取对应的镜像并运行以启动应用程序。

综上,本发明实施例提供的基于容器化的资源调度方法具有以下有益效果:

1、能够将流水线的任务以容器的方式运行在Kubernetes集群中,利用Kubernetes的调度器(kube-scheduler)预选和优选策略的能力,使各个任务能被分发到空闲节点上执行,充分使用各节点的计算资源,完成CI/CD流水线任务。

2、通过自定义资源控制器将流水线的控制和自定义资源CRD的运行都在Kubernetes集群中完成,用户只需要有Kubernetes集群环境就可以方便的安装和运行CI/CD流水线,避免了像传统CI/CD流程中需申请、配置执行环境的工作,紧密结合云生态。

3、本发明通过自定义资源模板装置先定义待执行的任务,再将任务编排组织成为一个流水线,具备了灵活编排,任务可重复使用的特点,同时也方便使用者之间的共享和修改。

4、本发明监控任务的运行状态和日志信息,使使用者能实时的查看到任务的运行信息,对异常的任务能及时发现问题并修复。同时,本发明会清理运行完成的任务,进一步释放计算资源,保证资源的充分利用。

5、容器化:本发明的核心是将构建任务容器化,并与Kubernetes原生相结合,CI/CD流程的安装、任务运行都在Kubernetes集群内完成,用户无需搭建额外的构建环境,只要拥有Kubernetes集群,即可实现CI/CD流水的作业。同时,相比于传统的构建流水线,本发明的系统运行任务即用即销毁,不会残留历史运行的任务资源。

6、轻量级:本发明中的构建任务无需额外插件,只需要用户在编写任务(Task)资源时,引入适合应用的构建镜像即可。如用户准备编译的是java环境下的代码,那就选择java:1.8镜像作为基础镜像;预编译的环境为golang环境时,可以选择golang:1.4,每个任务的运行都有自己的镜像环境,相互之间不会干扰。

7、稳定性强:自定义资源控制器在Kubernetes集群中以Deployment(Kubernetes的一种资源,会根据用户填写的信息启动对应数量的容器)的方式运行,当控制器的容器被删除或者异常时,Kubernetes会自动创建新副本,保证副本数与设置的个数一致。

基于同一发明构思,本发明实施例还提供了一种基于容器化的资源调度装置,由于该装置解决问题的原理与基于容器化的资源调度方法相似,因此该装置的实施可以参见方法的实施,重复之处不再赘述。

图4是本发明实施例中基于容器化的资源调度装置的结构框图。图5是本发明另一实施例中自定义资源模板装置的结构框图。图6是本发明另一实施例中自定义资源控制器的结构框图。图7是本发明另一实施例中监控装置的结构框图。图8是本发明另一实施例中日志装置的结构框图。如图4-图8所示,基于容器化的资源调度装置包括:

流水线模板模块,用于接收流水线模板下发请求,根据流水线模板下发请求创建流水线模板;

容器生成模块,用于按照流水线模板中的任务调度顺序依次将各任务转换为对应的容器;

资源挂载模块,用于在容器中挂载对应任务的资源;

容器部署模块,用于将挂载资源后的容器部署在预先确定的目标节点上,以实现资源调度。

在其中一种实施例中,流水线模板模块包括:

任务调度顺序单元,用于根据流水线模板下发请求获取任务调度顺序;

任务资源获取单元,用于根据任务调度顺序获取各任务和各任务的资源;

流水线模板创建单元,用于根据任务调度顺序、各任务和各任务的资源创建流水线模板。

在其中一种实施例中,还包括:

容器运行模块,用于在目标节点上运行容器,得到任务执行结果。

在其中一种实施例中,还包括:

镜像上传模块,用于当任务执行结果为镜像时,将镜像上传至镜像仓库。

在其中一种实施例中,还包括:

镜像拉取模块,用于接收应用启动指令,并根据应用启动指令从镜像仓库中拉取对应的镜像并运行以启动应用程序。

在其中一种实施例中,还包括:

容器删除模块,用于删除各任务对应的容器以释放各任务对应的资源。

在其中一种实施例中,还包括:

目标节点确定模块,用于根据负载均衡策略确定目标节点。

如图5-图8所示,在实际应用中,基于容器化的资源调度装置包括自定义资源模板装置、自定义资源控制器、监控装置和日志装置。

自定义资源模板装置包括流水线资源管理单元、任务单元、流水线单元和流水线运行单元。

任务单元定义待执行的任务(如编译代码、构建镜像和推送镜像等),任务是流水线中最小的可配置单元,每个任务实际以容器的形式运行在kubernetes集群中。任务执行成功,对应的容器状态会变成Completed(完成),否则为Failed(失败)。

流水线资源管理单元定义流水线资源的输入输出信息,流水线通过引入需要的资源名即可使用。

流水线单元是一个或多个任务、资源和自定义参数的组合,包括流水线模板模块。流水线模板中定义了待调度的任务和资源的名字,当自定义资源控制单元(Pipeline-Controller)解析模板后,会依据任务名和资源名字,创建对应的任务。

流水线运行单元用于触发指定的流水线运行,并输出流水线的运行结果。

自定义资源控制器包括自定义资源校验单元和自定义资源控制单元。

自定义资源校验单元用于校验流水线模板格式的正确性。

自定义资源控制单元包括容器生成模块、资源挂载模块、容器部署模块、容器运行模块、镜像上传模块、镜像拉取模块和目标节点确定模块,用于监控CRD资源的解析、创建、删除、修改和查询事件。当自定义资源校验单元校验通过时,解析流水线模板中设置的任务调度顺序,依次将各任务生成对应的容器,同时将资源挂载到容器中Kubernetes集群的调度器(kube-scheduler)组件会监控各虚拟机节点(node)上的资源运行情况,通过预选和优选负载均衡策略,将任务容器部署到选择出来的目标节点上运行,保证节点资源的充分使用。

监控装置包括监控单元和删除单元,用于实时监控流水线的运行状态(如任务运行成功或运行失败)和监控任务运行的日志信息。在日志采集完毕且任务运行完成后删除容器,释放出构建资源给其他任务使用,进而达到资源的合理利用。

监控单元用于实时监控流水线的运行状态。

删除单元包括容器删除模块,用于在任务运行完成后删除容器。

日志装置包括日志采集单元和日志存储单元,用于在流水线运行时进行日志信息的采集和存储。每次运行的流水线的日志信息将会被日志采集单元采集,采集到日志信息被日志存储单元存储。

综上,本发明实施例的基于容器化的资源调度装置先根据流水线模板下发请求创建流水线模板,再按照流水线模板中的任务调度顺序依次将各任务转换为对应的容器,然后在容器中挂载对应任务的资源,将挂载资源后的容器部署在目标节点上,可以均衡调度资源,保证资源的充分利用。

本发明实施例还提供能够实现上述实施例中的基于容器化的资源调度方法中全部步骤的一种计算机设备的具体实施方式。图9是本发明实施例中计算机设备的结构框图,参见图9,所述计算机设备具体包括如下内容:

处理器(processor)901和存储器(memory)902。

所述处理器901用于调用所述存储器902中的计算机程序,所述处理器执行所述计算机程序时实现上述实施例中的基于容器化的资源调度方法中的全部步骤,例如,所述处理器执行所述计算机程序时实现下述步骤:

接收流水线模板下发请求,根据流水线模板下发请求创建流水线模板;

按照流水线模板中的任务调度顺序依次将各任务转换为对应的容器;

在容器中挂载对应任务的资源;

将挂载资源后的容器部署在预先确定的目标节点上,以实现资源调度。

综上,本发明实施例的计算机设备先根据流水线模板下发请求创建流水线模板,再按照流水线模板中的任务调度顺序依次将各任务转换为对应的容器,然后在容器中挂载对应任务的资源,将挂载资源后的容器部署在目标节点上,可以均衡调度资源,保证资源的充分利用。

本发明实施例还提供能够实现上述实施例中的基于容器化的资源调度方法中全部步骤的一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述实施例中的基于容器化的资源调度方法的全部步骤,例如,所述处理器执行所述计算机程序时实现下述步骤:

接收流水线模板下发请求,根据流水线模板下发请求创建流水线模板;

按照流水线模板中的任务调度顺序依次将各任务转换为对应的容器;

在容器中挂载对应任务的资源;

将挂载资源后的容器部署在预先确定的目标节点上,以实现资源调度。

综上,本发明实施例的计算机可读存储介质先根据流水线模板下发请求创建流水线模板,再按照流水线模板中的任务调度顺序依次将各任务转换为对应的容器,然后在容器中挂载对应任务的资源,将挂载资源后的容器部署在目标节点上,可以均衡调度资源,保证资源的充分利用。

以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

本领域技术人员还可以了解到本发明实施例列出的各种说明性逻辑块(illustrative logical block),单元,和步骤可以通过电子硬件、电脑软件,或两者的结合进行实现。为清楚展示硬件和软件的可替换性(interchangeability),上述的各种说明性部件(illustrative components),单元和步骤已经通用地描述了它们的功能。这样的功能是通过硬件还是软件来实现取决于特定的应用和整个系统的设计要求。本领域技术人员可以对于每种特定的应用,可以使用各种方法实现所述的功能,但这种实现不应被理解为超出本发明实施例保护的范围。

本发明实施例中所描述的各种说明性的逻辑块,或单元,或装置都可以通过通用处理器,数字信号处理器,专用集成电路(ASIC),现场可编程门阵列或其它可编程逻辑装置,离散门或晶体管逻辑,离散硬件部件,或上述任何组合的设计来实现或操作所描述的功能。通用处理器可以为微处理器,可选地,该通用处理器也可以为任何传统的处理器、控制器、微控制器或状态机。处理器也可以通过计算装置的组合来实现,例如数字信号处理器和微处理器,多个微处理器,一个或多个微处理器联合一个数字信号处理器核,或任何其它类似的配置来实现。

本发明实施例中所描述的方法或算法的步骤可以直接嵌入硬件、处理器执行的软件模块、或者这两者的结合。软件模块可以存储于RAM存储器、闪存、ROM存储器、EPROM存储器、EEPROM存储器、寄存器、硬盘、可移动磁盘、CD-ROM或本领域中其它任意形式的存储媒介中。示例性地,存储媒介可以与处理器连接,以使得处理器可以从存储媒介中读取信息,并可以向存储媒介存写信息。可选地,存储媒介还可以集成到处理器中。处理器和存储媒介可以设置于ASIC中,ASIC可以设置于用户终端中。可选地,处理器和存储媒介也可以设置于用户终端中的不同的部件中。

在一个或多个示例性的设计中,本发明实施例所描述的上述功能可以在硬件、软件、固件或这三者的任意组合来实现。如果在软件中实现,这些功能可以存储与电脑可读的媒介上,或以一个或多个指令或代码形式传输于电脑可读的媒介上。电脑可读媒介包括电脑存储媒介和便于使得让电脑程序从一个地方转移到其它地方的通信媒介。存储媒介可以是任何通用或特殊电脑可以接入访问的可用媒体。例如,这样的电脑可读媒体可以包括但不限于RAM、ROM、EEPROM、CD-ROM或其它光盘存储、磁盘存储或其它磁性存储装置,或其它任何可以用于承载或存储以指令或数据结构和其它可被通用或特殊电脑、或通用或特殊处理器读取形式的程序代码的媒介。此外,任何连接都可以被适当地定义为电脑可读媒介,例如,如果软件是从一个网站站点、服务器或其它远程资源通过一个同轴电缆、光纤电缆、双绞线、数字用户线(DSL)或以例如红外、无线和微波等无线方式传输的也被包含在所定义的电脑可读媒介中。所述的碟片(disk)和磁盘(disc)包括压缩磁盘、镭射盘、光盘、DVD、软盘和蓝光光盘,磁盘通常以磁性复制数据,而碟片通常以激光进行光学复制数据。上述的组合也可以包含在电脑可读媒介中。

相关技术
  • 基于容器化的资源调度方法及装置
  • 基于容器的资源调度方法、装置及容器集群管理装置
技术分类

06120112740926