Job控制器介绍
Job控制器用于Pod对象运行一次性工作,容器中的过程在失常运行完结后不会对其进行重启,而是将Pod对象置于"Completed"(实现)状态,若容器中的过程因谬误而终止,则须要依照重启策略配置确定是否重启,未运行实现的Pod对象因其所在的节点故障而意外终止后会被调度。
Job控制器的Pod对象的状态转换如下图所示:
Job控制器运行模式
有的作业可能须要运行不止一次,用户能够配置它们以串行或者并行的形式运行。
- 单工作队列(work queue):串行式Job,N个作业须要串行运行N次,直至满足冀望的次数。如下图所示,这次Job也能够了解为并行度为1的作业执行形式,在某个时刻仅存在一个Pod资源对象。
- 多工作队列:并行式Job,这种形式能够设置工作队列数量,即为一次能够执行多个工作队列,每个队列负责一个运行作业,如下图所示,有五个作业,咱们就启动五个工作队列去并行执行,当然五个作业,咱们也能够只启动两个工作队列去串行执行,两个队列每次各执行一个作业,则一个队列须要执行三次,另一个执行两次。
创立Job对象
Job控制器的spec字段内嵌的必要字段只有template
,不须要定义标签选择器,控制器会主动关联,除了这一点与Deployment控制器不同,其它别无二致。
1.创立Job控制器配置清单
应用busybox镜像,而后沉睡120s,实现后即失常退出容器
cat busybox-job.yamlapiVersion: batch/v1kind: Jobmetadata: name: busybox-jobspec: template: spec: containers: - name: busybox image: busybox:latest command: [ "/bin/sh", "-c", "sleep 120s" ] restartPolicy: Never
Pod模版中的spec.restartPolicy
默认为"Always",这对Job控制器来说十分不实用,"Never"和"OnFeailure"才比拟适合Job控制器
2.创立Job控制器
kubectl apply -f busybox-job.yaml
3.查看Job控制器及Pod状态
kubectl get job -o wideNAME COMPLETIONS DURATION AGE CONTAINERS IMAGES SELECTORbusybox-job 0/1 36s 36s busybox busybox:latest controller-uid=8e85200f-43eb-4f24-ab6d-64c545287d51kubectl get pods -o wide | grep busyboxbusybox-job-wtdvf 1/1 Running 0 45s 10.244.3.150 k8s-node01 <none> <none>
120s后,Job控制器创立的Pod对象实现了工作
kubectl get pods -o wide | grep busyboxbusybox-job-wtdvf 0/1 Completed 0 3m38s 10.244.3.150 k8s-node01 <none> <none>
查看Job控制器的详细信息
如下Selector
与Lables
都是Job控制器主动生成后主动关联,控制器主动生成的controller-uid-随机字符串
,控制器携带了前面的字符串是为了避免所治理的Pod产生重合。
上面能够看到Job运行胜利后及实现了操作并没有过程重启,这得助于咱们设置的restartPolicy
。
串行式Job
将并行度属性job.spec.parallelism
的值设置为1,并设置总任务数job.spec.completions
属性便可能让Job控制器以串行形式运行多任务,上面是一个须要串行5此工作的Job控制器示例:
cat busybox-job.yamlapiVersion: batch/v1kind: Jobmetadata: name: busybox-jobspec: parallelism: 1 completions: 5 template: spec: containers: - name: busybox image: busybox:latest command: [ "/bin/sh", "-c", "sleep 20s" ] restartPolicy: OnFailure
创立Job控制器
kubectl apply -f busybox-job.yaml
动静监控Pod对象作业的变动
kubectl get pods -l job-name=busybox-job --watchNAME READY STATUS RESTARTS AGEbusybox-job-q8wqr 0/1 Pending 0 0sbusybox-job-q8wqr 0/1 Pending 0 0sbusybox-job-q8wqr 0/1 ContainerCreating 0 0sbusybox-job-q8wqr 1/1 Running 0 20sbusybox-job-q8wqr 0/1 Completed 0 39sbusybox-job-lppcw 0/1 Pending 0 0sbusybox-job-lppcw 0/1 Pending 0 0sbusybox-job-lppcw 0/1 ContainerCreating 0 0sbusybox-job-lppcw 1/1 Running 0 19sbusybox-job-lppcw 0/1 Completed 0 39sbusybox-job-8jw2q 0/1 Pending 0 0sbusybox-job-8jw2q 0/1 Pending 0 0sbusybox-job-8jw2q 0/1 ContainerCreating 0 0sbusybox-job-8jw2q 1/1 Running 0 19sbusybox-job-8jw2q 0/1 Completed 0 40sbusybox-job-bcxpn 0/1 Pending 0 0sbusybox-job-bcxpn 0/1 Pending 0 0sbusybox-job-bcxpn 0/1 ContainerCreating 0 0sbusybox-job-bcxpn 1/1 Running 0 18sbusybox-job-bcxpn 0/1 Completed 0 38sbusybox-job-5t7xm 0/1 Pending 0 0sbusybox-job-5t7xm 0/1 Pending 0 0sbusybox-job-5t7xm 0/1 ContainerCreating 0 0sbusybox-job-5t7xm 1/1 Running 0 20sbusybox-job-5t7xm 0/1 Completed 0 41s
如上,Job控制器须要执行五次工作,每次一个Pod执行一个工作,顺次执行,执行胜利后的Pod即为实现状态
kubectl get pods -l job-name=busybox-jobNAME READY STATUS RESTARTS AGEbusybox-job-5t7xm 0/1 Completed 0 4m22sbusybox-job-8jw2q 0/1 Completed 0 5m40sbusybox-job-bcxpn 0/1 Completed 0 5mbusybox-job-lppcw 0/1 Completed 0 6m19sbusybox-job-q8wqr 0/1 Completed 0 6m58s
并行式Job
并行式Job咱们只须要批改job.spec.parallelism
属性与job.spec.completions
属性即可;job.spec.parallelism
属性示意了每次启动多少队列执行作业(即为Pod数量)job.spec.completions
属性示意了作业的总数量
如下示例一个5个作业,同时启动5个队列进行作业。
cat busybox-job.yamlapiVersion: batch/v1kind: Jobmetadata: name: busybox-jobspec: parallelism: 5 completions: 5 template: spec: containers: - name: busybox image: busybox:latest command: [ "/bin/sh", "-c", "sleep 20s" ] restartPolicy: OnFailure
kubectl apply -f busybox-job.yaml
查看Job控制器运行状态,如下Job控制器中的Pod对象创立工夫是统一的。
删除Job
Job控制器中的Pod运行实现后,将不再占用系统资源,用户能够依照需要保留或应用资源删除命令将Pod删除,不过如果某控制器的容器利用总是无奈失常完结运行,而其restartPolicy
又设置为了重启,则它可能会始终处于不停地重启和谬误的循环当中。所幸的是,Job控制器提供了两个属性用于克制这种状况的产生,具体如下:
backoffLimit
:将作业标记为失败状态之前的重试次数,默认值为6activeDeadlineSeconds
:Job的deadline,用于为其指定最大流动工夫长度,超出此时长的作业将被终止。
例如,上面的配置清单为,示意其失败重试次数为5此,并且如果超出100秒的工夫依然未运行实现,那么则将其终止:
cat busybox-job.yamlapiVersion: batch/v1kind: Jobmetadata: name: busybox-jobspec: backoffLimit: 5 activeDeadlineSeconds: 100 parallelism: 1 completions: 5 template: spec: containers: - name: busybox image: busybox:latest command: [ "/bin/sh", "-c", "sleep 30s" ] restartPolicy: OnFailure
阿里云K8s实战手册 K8s
阿里云CDN排坑指南 CDN
ECS运维指南 ECS
DevOps实际手册 DevOps
Hadoop大数据实战手册 Hadoop