所属技术领域:
kubernetes
|名词定义|
首先 kubernetes 的 Job 是一个管理任务的控制器,它可以创建一个或多个 Pod 来指定 Pod 的数量,并可以监控它是否成功地运行或终止;
我们可以根据 Pod 的状态来给 Job 设置重置的方式及重试的次数;
我们还可以根据依赖关系,保证上一个任务运行完成之后再运行下一个任务;
同时还可以控制任务的并行度,根据并行度来确保 Pod 运行过程中的并行次数和总体完成大小。
|技术特点|
Job 语法
上图是 Job 最简单的一个 yaml 格式,这里主要新引入了一个 kind 叫 Job,这个 Job 其实就是 job-controller 里面的一种类型。然后 metadata 里面的 name 来指定这个 Job 的名称,下面 spec.template 里面其实就是 pod 的 spec。
Job 状态
$ kubectl create -f jon.html
$ kubectl get jobs
Job 创建完成之后,我们就可以通过 kubectl get jobs 这个命令,来查看当前 job 的运行状态。得到的值里面,基本就有 Job 的名称、当前完成了多少个 Pod,进行多长时间。
查看 Pod
$kubectl get pods pi-4cfrp -o yaml
它比普通的 Pod 多了一个叫 ownerReferences,这个东西来声明此 pod 是归哪个上一层 controller 来管理。可以看到这里的 ownerReferences 是归 batch/v1,也就是上一个 Job 来管理的。这里就声明了它的 controller 是谁,然后可以通过pod 返查到它的控制器是谁,同时也能根据 Job 来查一下它下属有哪些 Pod。
并行运行 Job
我们有时候有些需求:希望 Job 运行的时候可以最大化的并行,并行出 n 个 Pod 去快速地执行。同时,由于我们的节点数有限制,可能也不希望同时并行的 Pod 数过多,有那么一个管道的概念,我们可以希望最大的并行度是多少,Job 控制器都可以帮我们来做到。
这里主要看两个参数:一个是 completions,一个是 parallelism。
首先第一个参数是用来指定本 Pod 队列执行次数。第二个参数代表这个并行执行的个数。
查看并行 Job 运行
1.pod age 表明每次job同时创建了两个pod
2.本job一共运行了四个批次,一共运行8个pod
Cronjob 语法
CronJob 其实和 Job 大体是相似的,唯一的不同点就是它可以设计一个时间。比如说可以定时在几点几分执行,特别适合晚上做一些清理任务,还有可以几分钟执行一次,几小时执行一次等等,这就叫定时任务。
架构设计
Job 管理模式
Job 控制器