在Kubernetes中实现周期任务调度的方法和装置
文献发布时间:2023-06-19 12:27:31
技术领域
本公开的实施例一般涉及软件技术领域,更具体地,涉及在Kubernetes中实现周期任务调度的方法和装置。
背景技术
随着互联网技术的普及,我们在日常工作中经常会遇到一些需要进行批量数据处理和分析的需求,当然也会有按照时间周期计划进行调度的工作。
Kubernetes是一个用于容器集群的自动化部署、扩容以及运维的开源平台。通过Kubernetes,可以快速有效地响应用户需求,快速而有预期地部署你的应用,极速地扩展你的应用,无缝对接新应用功能,节省资源,优化硬件资源的使用。利用Kubernetes中的CronJob控制器可以实现上述需求和调度工作,但是当不再需要Cron Job,需要使用kubectl命令来删除指定Cron Job,而无法在控制器内部指定定时任务结束条件。同时Kubernetes官网指出,“Cron Job在每次调度运行时间内大概会创建一个Job对象。我们之所以说大概,是因为在特定的环境下可能会创建两个Job,或者一个Job都没创建。我们尝试少发生这种情况,但却不能完全避免。”可见,Cron Job也存在一定的安全隐患。
发明内容
本发明的目的在于提供一种在Kubernetes中实现周期任务调度的方法及装置,以解决现有技术中在Kubernetes中采用Cron Job实现任务调度存在的无法在控制器内部指定定时任务结束条件和不安全的问题。
为解决上述问题,本发明第一方面提供了一种在Kubernetes中实现周期任务调度的方法,由APScheduler执行,所述APScheduler包括调度器schedulers、作业存储器jobstores、触发器triggers和执行器executors,该方法包括:
到达预设时间点时,triggers触发;
schedulers从job stores中获取作业并提交至executors,所述作业包括执行指定的Kubernetes任务;
executors根据所述作业调度Kubernetes执行所述指定的Kubernetes任务。
进一步地,所述executors根据所述作业调度Kubernetes执行所述指定的Kubernetes任务中包括:executors执行所述作业,利用Kubernetes api创建Kubernetes任务,由Job控制器执行所述Kubernetes任务。
进一步地,所述Job控制器执行所述Kubernetes任务包括:所述Job控制器创建一个Job,所述Job创建一个或者多个Pod来执行所述任务,当所创建的全部Pod执行结束之后,所述Job标记为结束。
优选地,当所述Job标记为结束时,所述executors通知schedulers。
优选地,所述triggers触发器为trigger date触发器。
本发明的第二方面提供了一种在Kubernetes中实现周期任务调度的装置,包括APScheduler,所述APScheduler包括调度器schedulers、作业存储器job stores、触发器triggers和执行器executors,
所述triggers用于在到达预设时间点时触发;
所述schedulers用于从所述job stores中获取作业并提交至所述executors,所述作业包括执行指定的Kubernetes任务;
所述executors用于根据所述作业调度Kubernetes执行所述指定的Kubernetes任务。
进一步地,根据所述作业调度Kubernetes执行所述指定的Kubernetes任务包括:执行所述作业,利用Kubernetes api创建Kubernetes任务,由Job控制器执行所述Kubernetes任务。
进一步地,所述Job控制器执行所述Kubernetes任务包括:所述Job控制器创建一个Job,所述Job创建一个或者多个Pod来执行所述任务,当所创建的全部Pod执行结束之后,所述Job标记为结束。
进一步地,当Job标记为结束时,所述executors通知所述schedulers。
进一步地,所述triggers触发器为trigger date触发器。
本发明的有益效果为:本发明在Kubernetes中采用Job控制器和APScheduler,在APScheduler中创建作业调度任务,到达作业的指定执行时间时,利用Kubernetes的Job控制器执行任务,这实现了定时任务创建与定时任务执行解耦,与在Kubernetes中使用CronJob调度相比,规避了背景技术中描述的Cron Job调度存在的安全隐患。进一步地,triggers描述作业被触发的条件,可以为date特定的时间点触发,interval固定时间间隔触发,或者cron特定时间周期性地触发,因此APScheduler提供了基于日期、固定时间间隔以及crontab类型的任务,克服了Cron Job无法在控制器内部指定定时任务结束条件的问题;进一步地,采用trigger date触发器,由于date为特定的时间点触发,作业任务只会执行一次,因此,当根据已选定的时间周期,设定一定次数的date任务时,可以实现根据选定的时间周期执行设定次数的任务调度。综上所述,本发明提供的一种Kubernetes中实现周期任务调度的方法和装置,可以实现周期性次数限制的任务调度。
应当理解,发明内容部分中所描述的内容并非旨在限定本公开的实施例的关键或重要特征,亦非用于限制本公开的范围。本公开的其它特征将通过以下的描述变得容易理解。
附图说明
结合附图并参考以下详细说明,本公开各实施例的上述和其他特征、优点及方面将变得更加明显。在附图中,相同或相似的附图标记表示相同或相似的元素,其中:
图1为根据本公开实施例的云平台系统架构图;
图2为根据本公开第一实施例的在Kubernetes中实现周期任务调度的方法流程图;
图3为根据本公开第二实施例的在Kubernetes中实现周期任务调度的方法流程图;
图4为根据本公开第三实施例的在Kubernetes中实现周期任务调度的装置结构图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有作出创造性劳动的前提下所获得的全部其他实施例,都属于本公开保护的范围。
另外,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
在本实施例中,提供了如图1所示的遥感领域的云平台系统架构,包括IaaS层、PaaS层、SaaS层以及交互层。其中,最上层为交互层,其让用户可以与应用程序交互;最下层为IaaS层,其通过网络对外提供计算能力和存储服务;第二层为PaaS层,所有的开发都在这一层进行;第三层SaaS层,为用户提供云服务。该云平台系统架构,可以提供非常易用的用户界面,能隐藏技术实现的细节,帮助用户快速完成业务目标,大大提高用户的工作效率。本发明是针对PaaS层提出了一种在Kubernetes中实现周期任务调度的方法及装置,该装置形成如图1所示的PaaS层中的定时任务处理引擎,具体为利用Kubernetes的Job控制器和python的APScheduler库实现定时调度,APScheduler负责周期定时任务调度,Job控制器负责任务处理。
图2示出了根据本公开的第一实施例的一种在Kubernetes中实现周期任务调度的方法,由APScheduler执行。其中,APScheduler包括四种组件,分别是schedulers(调度器)、job stores(作业存储器)、triggers(触发器)和executors(执行器),方法包括以下步骤:
S201、到达预设时间点时,triggers触发;
其中,schedulers询问job stores,利用triggers检查是否有到期需要执行的作业任务,如果有,计算作业需要运行的时间点,当到达预设时间点时triggers触发下一步操作。
S202、schedulers从job stores中获取作业并提交至executors,作业包括执行指定的Kubernetes任务;
其中,所述作业是在schedulers中预先创建的。schedulers属于控制器角色,在不同的时间点可以创建不同的作业,不仅可以创建作业,还可以修改和移除作业。job stores用于存储所创建的作业。
S203、executors根据作业调度Kubernetes执行指定的Kubernetes任务。
具体地,executors执行作业,利用Kubernetes api创建Kubernetes任务,由Job控制器执行Kubernetes任务;Job控制器根据Kubernetes任务创建一个Job,Job创建一个或者多个Pod来执行任务,当所创建的全部Pod执行结束之后,Job标记为结束。
可选地,在步骤S203之后,还包括步骤:
当Job标记为结束时,executors通知schedulers。
优选地,triggers触发器为trigger date触发器。
date表示特定的时间点触发,作业任务只会执行一次,可以根据已选定的时间周期,设定一定次数的date任务,APScheduler按选定时间周期来执行设定次数的任务调度。
通过以上步骤,APScheduler实现了对Kubernetes任务的调度。
本实施例的第二方面提供了一种在Kubernetes中实现周期任务调度的装置,如图3所示,该装置通过在Kubernetes中的Job控制器和APScheduler实现定时调度,其中APScheduler包括调度器schedulers、作业存储器job stores、触发器triggers和执行器executors,
triggers用于在到达预设时间点时触发;
triggers用于描述作业被触发的条件,job stores内存有作业,schedulers询问job stores,根据triggers检查是否有到期需要执行的作业任务,如果有,计算作业需要运行的时间点,当作业满足triggers的触发条件时被触发。
schedulersr用于从job stores中获取作业并提交至executors,作业包括执行指定的Kubernetes任务;
executors用于根据作业调度Kubernetes执行指定的Kubernetes任务。
进一步地,根据作业调度Kubernetes执行所述指定的Kubernetes任务包括:执行作业,利用Kubernetes api创建Kubernetes任务,由Job控制器执行Kubernetes任务。
更进一步地,Job控制器执行Kubernetes任务包括:Job控制器创建一个Job,Job创建一个或者多个Pod来执行任务,当所创建的全部Pod执行结束之后,所述Job标记为结束。
优选地,当Job标记为结束时,executors通知schedulers。
优选地,triggers触发器为trigger date触发器。
date表示特定的时间点触发,作业任务只会执行一次,可以根据已选定的时间周期,设定一定次数的date任务,schedulers可以实现按选定的时间周期执行设定次数的任务调度。
进一步地,所述schedulers还用于预先创建作业。schedulers属于控制器角色,在不同的时间点可以创建不同的作业,而且还可以用于修改和移除作业。所述job stores用于存储所创建的作业。
综上所述,在Kubernetes中采用Job控制器和APScheduler,在APScheduler中创建作业并实现调度,到达作业的指定执行时间时,利用Kubernetes Job控制器执行任务,实现了定时任务创建与定时任务执行解耦,同时采用APScheduler实现调度时,相比采用CronJob调度避免了创建Job时存在创建数量不确定的问题,规避了Cron Job存在的安全隐患。进一步地,triggers描述作业被触发的条件,可以为date特定的时间点触发,interval固定时间间隔触发或者cron特定时间周期性地触发,因此Apscheduler提供了基于日期、固定时间间隔以及crontab类型的任务,克服了Cron Job无法在控制器内部指定定时任务结束条件的问题;进一步地,采用trigger date触发器,date表示特定的时间点触发,作业任务只会执行一次,我们根据已选定的时间周期,设定一定次数的date任务,可以满足周期性次数限制的任务调度。
实施例1
下面将结合具体应用来阐述本发明,为了便于理解,本实施例采用一种便于理解的简单应用,并不对本发明造成限制。另外,本发明提供了一种在Kubernetes中实现周期任务调度的方法及装置,在该装置中利用Job控制器和APScheduler实现定时调度,APScheduler负责任务创建和实现任务调度,Job控制器负责任务处理,其中,APScheduler包括四种组件,分别是schedulers(调度器)、job stores(作业存储器)、triggers(触发器)和executors(执行器),如图4所示,调度装置实现定时任务的创建以及实现调度的方法包括以下步骤:
S401、在schedulers中创建执行指定的Kubernetes任务的作业;
schedulers属于控制器角色,在不同的时间点可以创建不同的作业,不仅可以创建作业,还可以修改和移除作业,在本实施例中,创建三个指定时间点的作业,分别为time1的第一作业,time2的第二作业,time3的第三作业,time1、time2和time3可以是等间隔设置的时间点,也可以是任意的指定时间点。
S402、job stores保存3个上述作业;
job stores默认保存3个上述步骤创建的作业在内存中,内存对scheduler提供增删改查接口。
S403、到达预设时间点时,triggers触发;
schedulers询问job stores,根据triggers检查是否有到期需要执行的作业任务,如果有,计算作业需要运行的时间点,当作业满足triggers的触发条件时被触发。本施例中的装置采用trigger date触发器,date表示特定的时间点触发,作业任务只会执行一次,因此当到达time1时第一作业被触发,当到达time2时第二作业被触发,当到达time3时第三作业被触发。另外,trigger还包括interval和cron,interval表示循环任务,cron表示定时任务,当采用cron或者interval时,第一作业、第二作业以及第三作业分别形成定时任务或循环任务。
S404、schedulers从job stores中获取作业并提交至executors;
第一作业、第二作业或第三作业依次被触发后,schedulers依次从job stores中获取第一作业、第二作业或第三作业提交给executors中运行。
S405、executors根据作业调度Kubernetes执行指定的Kubernetes任务;
第一作业、第二作业或第三作业依次运行时,executors执行作业,利用Kubernetes api创建Kubernetes任务,Job控制器执行Kubernetes任务,具体为Job控制器根据第一作业、第二作业和第三作业依次对应的创建job1、job2和job3,job1、job2和job3分别创建一个或者多个Pod来执行任务,当所创建的全部Pod执行结束之后,Job标记为结束,Job标记为结束,也即job1、job2和job3依次结束。
S406、当job1标记为结束时,executors通知schedulers,同理地,job2和job3依次结束时,executors通知schedulers。
通过以上步骤,APScheduler实现了对Kubernetes任务的调度,根据预设时间time1、time2以及time3依次执行第一作业、第二作业以及第三作业,多个预设时间可以形成周期性次数限制的时间点,也可以是多个任意指定的时间点。在上述方法中采用的是date触发器,只执行一次任务,因此可以实现按预设时间点的任务调度。另外APScheduler中触发器还有interval、cron可供选择,interval表示循环任务,cron表示定时任务,在其他实施例中采用interval或cron,APScheduler可以实现循环任务调度或者定时任务调度。
综上所述,在APScheduler中创建作业并实现调度,到达作业的指定执行时间时,利用Kubernetes的Job控制器执行任务,实现了定时任务创建与定时任务执行解耦,与在Kubernetes中使用Cron Job调度相比,规避了Cron Job的安全隐患。date触发器表示在特定的时间点触发,只执行一次任务,在APScheduler中创建多个不同时间点的作业,每个作业只执行一次,可以实现限制次数的多次调度;另外triggers还可以是interval固定时间间隔触发或者cron特定时间周期性地触发,在其他实施例中,可以创建多个作业,多个作业可以选择不同类型的trigger相结合,从而能够根据实际需要来实现多种调度,与在Kubernetes中使用Cron Job调度相比,克服了Cron Job无法在控制器内部指定定时任务结束条件的问题。
此外,虽然采用特定次序描绘了各操作,但是这应当理解为要求这样操作以所示出的特定次序或以顺序次序执行,或者要求所有图示的操作应被执行以取得期望的结果。在一定环境下,多任务和并行处理可能是有利的。同样地,虽然在上面论述中包含了若干具体实现细节,但是这些不应当被解释为对本公开的范围的限制。在单独的实施例的上下文中描述的某些特征还可以组合地实现在单个实现中。相反地,在单个实现的上下文中描述的各种特征也可以单独地或以任何合适的子组合的方式实现在多个实现中。
尽管已经采用特定于结构特征和/或方法逻辑动作的语言描述了本主题,但是应当理解所附权利要求书中所限定的主题未必局限于上面描述的特定特征或动作。相反,上面所描述的特定特征和动作仅仅是实现权利要求书的示例形式。
- 在Kubernetes中实现周期任务调度的方法和装置
- 一种在Kubernetes中实现Pod网络流控的方法