美文网首页数客联盟
容器化Batch Job调度方法

容器化Batch Job调度方法

作者: 许鑫_22d4 | 来源:发表于2019-07-18 17:20 被阅读58次

一.  集群Job的几种分类

      集群中运行的Job一般可分为三种类型:

      1. deployment Job: 提供持续监听服务,需要一直运行,比如 server,daemon 等

       2. batch Job: 负责批处理任务,即仅需要成功执行一次的任务。

       3. cron Job: 负责定时触发任务执行,该任务可以是deployment或者batch类型。

二.  容器化Batch Job应用

       对于Batch Job,将其容器化,并保证批处理任务只成功执行一次,需考虑以下几点:

      1.  通过容器化保证Job之间的资源隔离以及每个Job的资源配比

      2.  新的Job在集群中被分配到的节点策略及负载均衡策略

      2.  任务执行中容器本身即内部实际业务处理的状态监控

      3.  任务执行成功后资源释放的状态反馈

      4.  任务执行失败后的重试机制 

三.  基于Mesos实现Batch Job调度

       Mesos诞生于UC Berkeley的一个研究项目,现已成为Apache Incubator中的项目,当前有一些公司使用Mesos管理集群资源,比如Twitter。

mesos

    Mesos是master/slave结构,master是轻量级的,仅保存了framework和mesos slave的一些状态,而这些状态很容易通过framework和slave重新注册而重构。Mesos master是一个全局资源调度器,采用某种策略将某个slave上的空闲资源分配给某一个framework,各种framework通过自己的调度器向Mesos master注册,以接入到Mesos中;而Mesos slave主要功能是汇报任务的状态和启动各个framework的executor。

     Chronos和Marathon都是基于Mesos比较优秀的定时任务调度和服务类任务调度的Framework,开源并由mesosphere公司维护升级,而对于Batch Job暂时还没有比较知名的基于Mesos的开源框架支撑。但是根据实际业务需要,基于Mesos提供的接口可以很容易实现Batch Job Framework,大致的实现流程如下:

framework实现原理

     具体根据业务需求,参考实例:https://github.com/weiyuanke/run-docker-on-mesos-test-framework

四.  基于k8s实现Batch Job调度

      本文主要将基于K8S的Batch Job, Kubernetes自身已经实现了Deployment,CronJob,BatchJob三种类型任务的调度,并提供了REST API提供第三方应用集成,此处设计实现了一种基于 kubernetes的容器调度及状态监控的应用,具体结构如下:

kubernetes批任务

       1.  通过rancher搭建k8s集群

        Rancher是一个开源的企业级容器管理平台。通过Rancher,不必自己使用一系列的开源软件去从头搭建容器服务平台。Rancher提供了在生产环境中使用的管理Docker和Kubernetes的全栈化容器部署与管理平台。Rancher的环境搭建参考:

        https://www.cnrancher.com/docs/rancher/v2.x/cn/installation/

rancher + k8s

            2.  创建kubernetes的访问密钥

keys

             3.  获取Bearer Token用来Authorization

token

             4.  通过postman发送创建Job任务的请求

             K8S API地址:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#job-v1-batch

             由于采用https,先将postman中的“SSL certificate verification”设置成OFF

SSL

                创建post请求,在authorization中设置Bearer Token为刚刚创建的密钥

authorization

                Hearder中的Content-Type需要设置成 application/yaml

header

            Body中选在raw 以及 Text,并在raw中填写具体的请求体(yaml文件数据)

body

                一个简单的任务提交命令:

submit

             4.  通过Java发送创建Job任务的请求:

               HttpsUtil:

HttpsUtil

                 TaskScheduleService:

taskSchedule

         5.  任务执行过程采集

            由于k8s只能对容器整体的生命周期进行管理,如果容器内的任务又包含了多个stage,需要采集这些stage的执行状态即过程日志的话,需要容器内的业务代码实现。

            实现参考架构图,略。

相关文章

网友评论

    本文标题:容器化Batch Job调度方法

    本文链接:https://www.haomeiwen.com/subject/brpklctx.html