Job控制器用于调配pod对象运行一次性任务,容器中的进程在正常运行结束后不会对其进行重启,而是将pod对象置于completed状态。若容器中的进程因错误而终止,则需要依据配置确定重启与否,未运行完成的pod对象因其所在的节点故障而意外终止后会被重新调度。

实践中,有的作业任务可能需要运行不止一次,用户可以配置它们以串行或并行的方式运行。这种类型的job控制器对象有两种:

单工作队列的串行式job:即以多个一次性的作业方式串行执行多次作业,直至满足期望的次数

多工作队列的并行式job:这种方式可以设置工作队列数,即作业数,每个队列仅负责运行一个作业。

一、创建job对象

job控制器的spec字段内嵌的必要字段仅为template,它的使用方式与deploy并无不同。job会为其pod对象自动添加“job-name=JOB_NAME”和“controller-uid=UID”标签,并使用标签选择器完成对controller-uid标签的关联。job位于API群组“batch/v1”之内

apiVersion:batch/v1
kind: job
metadata:
name: job-example
spec:
template:
spec:
containers:
- name: myjob
image: alpine
command: ["/bin/sh", "-c", "sleep 120"]
restartPolicy: Never

Pod模板中的spec.restartPolicy默认为Always,这对job控制器来说并不适用,因此需要设定为Never或OnFailure

使用kubectl create或kubectl apply命令创建完成后即可查看相关任务状态

二、并行式job

将并行度属性spec.parallelism的值设置为1,并设置总任务数spec.completion属性便能够让job控制器以串行方式运行多任务:

apiVersion: batch/v1
kind: job
metadata:
name: job-multi
spec:
completions: 5
parallelism: 2
backoffLimit: 5
activeDeadlineSeconds: 100
template:
spec:
containers:
- name: myjob
image: alpine
command: ["/bin/sh", "-c", "sleep 120"]
restartPolicy: OnFailure

三、job扩容

job控制器的spec.parallelism定义的并行度表示同时运行的pod对象数,此属性值支持运行时调整从而改变其队列总数,实现扩容和缩容。使用kubectl scale --replicas命令即可

四、删除job

job控制器待其pod资源运行完成后,将不再占用系统资源,用户可按需保留或使用资源删除命令将其删除。如果job控制器的容器应用总是无法正常结束运行,而restartPolicy又定义了重启,则它可能会一直处于不停地重启和错误的循环中:

spec.activeDeadlineSeconds:job的deadline,用于为其指定最大活动时间长度,超出此时长的作业将被终止

spec.backoffLimit: 将作业标记为失败状态之前的重试次数,默认值为6。

如上文中示例配置中,其失败重试次数为5次,并且如果超出100s时间仍未运行完成,那么其将被终止。

最新文章

  1. win10使用小技巧以及常见问题处理方案
  2. [py]简易pick lucky num程序
  3. java类加载器的层次结构
  4. (一)openwrt源码目录概述
  5. HTML5之canvas
  6. 服务器忘记mysql密码怎么修改?
  7. Python 项目实践二(下载数据)第四篇
  8. js取整数、取余数
  9. [HAOI2008]移动玩具
  10. Can't connect to MySQL server (10060)
  11. 分辨率,PPi,DPI,DPR,物理像素,逻辑像素
  12. MySQL事务(三)
  13. 关于Web应用开发流程的总结
  14. Software-Defined Networking之搬砖的故事
  15. linux服务器的性能分析与优化
  16. 第一阶段Spring个人总结
  17. 5、Redis中对Set类型的操作命令
  18. GO语言基础之struct
  19. 我的octopress配置
  20. 安装sudo apt-get install ros-kinetic-desktop-full,报错mv: 无法获取'/var/lib/ni/licenses.xml.dpkg-old' 的文件状态(stat): 没有。。。。

热门文章

  1. PHP curl出现SSL certificate problem: self signed certificate in certificate chain
  2. LeetCode.1071-字符串最大公约数(Greatest Common Divisor of Strings)
  3. pytorch基础问题
  4. 服务间的通信 RestTemplate和Feign
  5. 通过URLOS安装Redis缓存为wordpress网站提速
  6. SVN(linux版)安装与使用
  7. Git_mergetool_tutorial(转载)
  8. 贡献python prim多源最短路搜索算法 numba加速方法的demo和总结
  9. 【C/C++】对于可重入、线程安全、异步信号安全几个概念的理解
  10. SpringCloud(0) 外行人都能看懂的SpringCloud,错过了血亏!