文章目录
- 01 引言
- 02 批处理调度
- 2.1 任务模式分类
- 2.1.1 按实现方式分类
- 2.1.2 按批处理并行分类
- 2.1 案例
- 2.1.1 Job Template Expansion案例
- 2.1.2 Queue with Pod Per Work Item案例
- 2.1.3 Queue with Variable Pod Count案例
- 03 文末
01 引言
声明:本文为《Kubernetes权威指南:从Docker到Kubernetes实践全接触(第5版)》的读书笔记
Kubernetes从1.2版本开始支持批处理类型的应用,我们可以通过Kubernetes Job
资源对象来定义并启动一个批处理任务。
02 批处理调度
批处理任务通常并行(或者串行) 启动多个计算进程去处理一批工作项(Work item
),处理完成后,整个批处理任务结束。
2.1 任务模式分类
2.1.1 按实现方式分类
按照批处理任务实现方式的不同,批处理任务可以分为如图所示的几种模式:
模式分类:
模式名称 | 描述 |
Job Template Expansion | 一个 |
Queue with Pod Per Work Item | 采用一个任务队列存放 |
Queue with Variable Pod Count | 也是采用一个任务队列存放 |
Single Job with Static Work Assignment | 也是一个 |
模式对比:
模式名称 | 是否是一个job | pod的数量少于work item | 用户程序是否要做相应的修改 | kubernetes是否支持 |
Job Template Expansion | / | / | 是 | 是 |
Queue with Pod Per Work Item | 是 | / | 有时候需要 | 是 |
Queue with Variable Pod Count | 是 | / | / | 是 |
Single Job with Static Work Assignment | 是 | / | 是 | / |
2.1.2 按批处理并行分类
考虑到批处理的并行问题,Kubernetes
将Job
分以下三种类型:
类型 | 描述 |
Non-parallel Jobs | 通常一个Job只启动一个Pod,除非Pod异常,才会重启该Pod,一旦此Pod正常结束,Job将结束 |
Parallel Jobs with a fixed completion count | 并行Job会启动多个Pod,此时需要设定Job的 |
Parallel Jobs with a work queue | 任务队列方式的并行Job需要一个独 立的Queue,Work item都在一个Queue中存放,不能设置Job 的 |
2.1 案例
2.1.1 Job Template Expansion案例
首先是Job Template Expansion模式,由于在这种模式下每个Work item
都对应一个Job
实例,所以这种模式首先定义一个Job
模板,模板里的主要参数是Work item
的标识,因为每个Job
都处理不同的Work item
。
如下所示的Job
模板(文件名为job.yaml.txt
)中的 $ITEM 可以作为任务项的标识:
通过下面的操作,生成了3个对应的Job
定义文件并创建Job
:
观察Job的运行情况:
2.1.2 Queue with Pod Per Work Item案例
在这种模式下需要一个任务队列存放Work item
,比如RabbitMQ
客户端程序先把要处理的任务变成Work item
放入任务队列,然后编写Worker
程序、打包镜像并定义成为Job
中的Work Pod
。
Worker
程序的实现逻辑是从任务队列中拉取一个Work item
并处理, 在处理完成后结束进程。并行度为2的Demo如下图所示:
2.1.3 Queue with Variable Pod Count案例
由于这种模式下,Worker
程序需要知道队列中是否还有等待处理的Work item
,如果有就取出来处理,否则就认为所有工作完成并结束进程,所以任务队列通常要采用Redis或者数据库来实现:
03 文末
本文主要讲解Pod
批处理调度的一些概念,根据Worker Item
以及Job
的关系,主要分为 “Job Template Expansion”、“Queue with Pod Per Work Item”、“Queue with Variable Pod Count” 这三种,并简单阐述了其原理及案例,希望能帮助到大家,谢谢大家的阅读,本文完!