深入剖析 Kubernetes
张磊
Kubernetes 社区资深成员与项目维护者
116705 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 57 讲
再谈开源与社区 (1讲)
结束语 (1讲)
深入剖析 Kubernetes
15
15
1.0x
00:00/00:00
登录|注册

22 | 撬动离线业务:Job与CronJob

指定并行度,不设置固定的completions值
拥有固定任务数目的并行Job
外部管理器+Job模板
控制方法示例
并行控制参数
控制方法
创建和管理Job
API对象定义
错误处理
处理策略
控制器关系
API对象定义
定时任务
调谐操作
控制对象
Job
离线业务
DaemonSet
StatefulSet
Deployment
CronJob
Job Controller
Batch Job
Long Running Task
思考题
撬动离线业务
撬动离线业务之Job与CronJob

该思维导图由 AI 生成,仅供参考

你好,我是张磊。今天我和你分享的主题是:撬动离线业务之 Job 与 CronJob。
在前面的几篇文章中,我和你详细分享了 Deployment、StatefulSet,以及 DaemonSet 这三个编排概念。你有没有发现它们的共同之处呢?
实际上,它们主要编排的对象,都是“在线业务”,即:Long Running Task(长作业)。比如,我在前面举例时常用的 Nginx、Tomcat,以及 MySQL 等等。这些应用一旦运行起来,除非出错或者停止,它的容器进程会一直保持在 Running 状态。
但是,有一类作业显然不满足这样的条件,这就是“离线业务”,或者叫作 Batch Job(计算业务)。这种业务在计算完成后就直接退出了,而此时如果你依然用 Deployment 来管理这种业务的话,就会发现 Pod 会在计算结束后退出,然后被 Deployment Controller 不断地重启;而像“滚动更新”这样的编排功能,更无从谈起了。
所以,早在 Borg 项目中,Google 就已经对作业进行了分类处理,提出了 LRS(Long Running Service)和 Batch Jobs 两种作业形态,对它们进行“分别管理”和“混合调度”。
不过,在 2015 年 Borg 论文刚刚发布的时候,Kubernetes 项目并不支持对 Batch Job 的管理。直到 v1.4 版本之后,社区才逐步设计出了一个用来描述离线业务的 API 对象,它的名字就是:Job。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Kubernetes中的Job和CronJob是管理离线业务的重要API对象。Job对象通过简单的YAML定义,可以轻松创建离线任务,并具有重试和超时控制功能。文章介绍了如何创建和管理Job对象,以及处理离线任务的失败和超时情况。此外,还介绍了Job Controller对并行作业的控制方法,包括并行数和最小完成数的定义,以及并行任务的创建和完成过程。文章还分享了三种常用的使用Job对象的方法,包括外部管理器+Job模板、拥有固定任务数目的并行Job以及指定并行度但不设置固定任务数目的Job。最后,文章介绍了CronJob,作为定时任务的控制器。这些内容帮助读者快速了解Kubernetes中管理离线业务的方法和技术特点。 CronJob是一个专门用来管理Job对象的控制器,通过schedule字段定义的标准格式的表达式来创建和删除Job。Cron表达式中的五个部分分别代表:分钟、小时、日、月、星期,通过这些字段的组合可以实现定时任务的调度。读者可以通过本文了解到Kubernetes中管理离线业务的方法和技术特点,以及如何利用Job和CronJob来实现离线任务的管理和调度。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入剖析 Kubernetes》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(48)

  • 最新
  • 精选
  • 刘孟
    需要创建的 Pod 数目 = 最终需要的 Pod 数目 - 实际在 Running 状态 Pod 数目 - 已经成功退出的 Pod 数目 = 2 - 0 - 0= 2。而parallelism数量为4,2小于4,所以应该会创建2个。

    作者回复: 聪明宝宝

    2018-10-12
    4
    116
  • DJH
    说到pod的重新启动,我想再请教一个问题:假设我把deployment的restart policy设置成always,假设某个pod中的容器运行失败,那么是重新创建了一个新的pod,还是仅仅重启了pod里的容器?pod的名称和ip地址会变化吗?

    作者回复: restartpoliccy当然是针对容器。pod没有重启这个说法。至于ip,那跟用户容器没关系,那是infra container

    2018-10-12
    5
    43
  • 柯察金
    问个不相关的问题:configmap 更新,怎么做到不重启 pod 生效

    作者回复: 这得看应用咋写的。configmap volume里的内容已经就是自动更新的。但应用能做到监视文件的更新吗?

    2019-01-03
    5
    27
  • 柯察金
    job 执行结束,处于 completed 状态之后,还会占用系统资源吗,可以让它执行结束后自动退出吗

    作者回复: 需要删除掉,或者设置规则

    2019-01-03
    18
  • jssfy
    请问job成功结束后一直处于completed状态吗?需要手动清吗?

    作者回复: 对

    2018-11-25
    15
  • abc
    请问老师:miss的数目100是默认的吗?哪个参数可以修改呢

    作者回复: 这个是写死的

    2018-10-12
    14
  • silver
    Job的第三种方法中是不是需要有其他process最后去Kill这个Job,否则Job会在Pod退出后不断创建新的Pod?

    作者回复: 不需要的。completion没设置默认等于1,所以任何一个pod判断到队列为空退出进入succeed状态,Job controller就不会再创建新pod了。

    2018-10-14
    2
    9
  • 参悟
    最近实践遇到的问题,盼请赐教,多套分支的开发,测试环境,是按一套k8s集群按命名空间分区,还是按多套集群,实践方案哪种更好,有何优缺点?如果按一套多空间,会有nodeport冲突的问题,比如数据库需要暴露稳定的端口,方便运维。

    作者回复: 多套集群。

    2018-10-12
    8
  • 虎虎❤️
    并发度为4,意味着可以同时启动不超过4个job。 completion2 - running0 - completed0 = 2 所以会启动2个job

    作者回复: 不错

    2018-10-12
    6
  • DJH
    另外我想请教一下,CronJob是定期产生新的Job,还是定期重启同一个Job任务?

    作者回复: 当然是产生新的job

    2018-10-12
    4
收起评论
显示
设置
留言
48
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部