Kubernetes 入门实战课
罗剑锋
Kong 高级工程师,Nginx/OpenResty 开源项目贡献者
19527 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 41 讲
Kubernetes 入门实战课
15
15
1.0x
00:00/00:00
登录|注册

13|Job/CronJob:为什么不直接用Pod来处理业务?

你好,我是 Chrono。
在上次的课里我们学习了 Kubernetes 的核心对象 Pod,用来编排一个或多个容器,让这些容器共享网络、存储等资源,总是共同调度,从而紧密协同工作。
因为 Pod 比容器更能够表示实际的应用,所以 Kubernetes 不会在容器层面来编排业务,而是把 Pod 作为在集群里调度运维的最小单位。
前面我们也看到了一张 Kubernetes 的资源对象关系图,以 Pod 为中心,延伸出了很多表示各种业务的其他资源对象。那么你会不会有这样的疑问:Pod 的功能已经足够完善了,为什么还要定义这些额外的对象呢?为什么不直接在 Pod 里添加功能,来处理业务需求呢?
这个问题体现了 Google 对大规模计算集群管理的深度思考,今天我就说说 Kubernetes 基于 Pod 的设计理念,先从最简单的两种对象——Job 和 CronJob 讲起。

为什么不直接使用 Pod

现在你应该知道,Kubernetes 使用的是 RESTful API,把集群中的各种业务都抽象为 HTTP 资源对象,那么在这个层次之上,我们就可以使用面向对象的方式来考虑问题。
如果你有一些编程方面的经验,就会知道面向对象编程(OOP),它把一切都视为高内聚的对象,强调对象之间互相通信来完成任务。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Kubernetes中的Job和CronJob对象为离线业务的处理提供了便利。文章从面向对象编程的角度解释了为什么不直接使用Pod来处理业务,而是引入了Job和CronJob对象。它们将Pod作为成员组合进去,实现了对离线业务的管理。Job对象通过YAML描述,使用组合模式将Pod嵌入其中,实现了对离线业务的控制和管理。CronJob则用于周期性运行离线业务,为Kubernetes集群的业务调度提供了更灵活的方式。这种设计理念体现了Kubernetes对象设计的清晰性和高内聚性,使得每种对象只关注自己的业务领域,实现最小成本的最大收益。文章通过简洁的语言和实例说明,帮助读者快速了解了Kubernetes中Job和CronJob对象的设计理念和使用方法。文章还介绍了如何在Kubernetes里操作Job和CronJob,以及如何使用YAML描述CronJob。通过对Job和CronJob的具体应用场景的讨论,读者可以深入了解这两种对象的实际应用和解决的问题。整体而言,本文通过对Kubernetes中Job和CronJob对象的介绍和实际操作,帮助读者更好地理解和应用这两种对象,为他们在Kubernetes集群中进行离线业务处理提供了指导和帮助。

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

全部留言(39)

  • 最新
  • 精选
  • psoracle
    回答一下今天的作业: 1. 你是怎么理解 Kubernetes 组合对象的方式的?它带来了什么好处? Kubernetes中组合对象,类似于面向对象编程中的继承,即不破坏父对象的功能,又扩展了自己领域场景中的功能,在API层面也简单了,只需要处理自己扩展的功能即可,比在一个对象上做加法进入逻辑判断要优雅很多。 2. Job 和 CronJob 的具体应用场景有哪些?能够解决什么样的问题? Job与CronJob分别对应一次性调用的任务与周期性定时任务;前者任务只运行一次,比如用在手工触发的场景如数据库备份、恢复与还原,数据同步,安全检查,巡检等;后者用于定时任务,非手工触发,由CronJobController每隔10s遍历需要执行的CronJob,同样也使用在如数据库备份、恢复与还原、数据同步、安全检查、定期巡检以及所有周期性的运维任务。 Job与CronJob解决了任务的管理,如执行超时、失败尝试、执行数量与并行数量、任务结果记录等等,方便对任务执行的监控与管理;另外,Pod解决了批处理任务关联打包统一调度,容器解决了任务运行时环境。

    作者回复: great

    2022-07-20
    2
    27
  • Geek_b9dad2
    课外小贴士里第4条和第6条感觉是有冲突的,这个怎么理解呢?

    作者回复: 一个是Job,一个是CronJob,而且CronJob是能够控制Job的,官大一级压死人。

    2022-07-20
    16
  • 花花大脸猫
    不得不服这个设计,为后续扩展带来了无限的可能,而且又不影响现有的pod体系功能!原来面向对象的思想还能在YAML中这么用。

    作者回复: 这个正是Kubernetes能够战胜swarm、mesos的根本原因。

    2022-07-29归属地:陕西
    10
  • 三溪
    我想补充一下关于job配置的一个细节,大家可能复制黏贴罗老师的配置所以不会发现这个问题。 job.spec.containers.template.spec.containers.image是不能指定镜像版本号的,只能指定镜像:完整的镜像:版本号只能由pod定义,否则会从互联网拉取镜像,如果能联网当然没事,离线环境会直接报错无法拉取镜像,虽然你本地确实存在该版本的镜像且imagePullPolicy设置为Never或IfNotPresent。 比如我是离线环境,job里image配置为:- image: busybox:1.35.0,那么就会报错无法拉取镜像。

    作者回复: 这个小细节确实比较重要,因为我是一直联网,也没太注意。

    2022-07-28归属地:陕西
    5
    5
  • Sports
    终于知道老师昵称的由来了

    作者回复: 有那么一点关系,笑。

    2022-07-20
    2
    5
  • Geek_7ba156
    666,超爱这种讲课方式。老师你一定要多出课啊,笔芯~

    作者回复: thanks

    2023-02-08归属地:江苏
    4
  • aoe
    原来一直奇怪为什么有那么多spec、template不停的嵌套?今天终于明白了:不同层级自己描述自己的,相互不影响,不合陌生人说话

    作者回复: 是的,就是对象套对象的组合,把它转换成图形也许会好理解一些。

    2022-08-10归属地:北京
    4
  • 密码123456
    Command 用双引号里写命令,不能有空格。

    作者回复: good

    2022-07-20
    3
    4
  • Demon.Lee
    最近在把业务服务迁移到 Kubernetes 上部署,其中就有一个定时服务,包含 30 个定时 job。我想着直接搬到 Kubernetes 的 CronJob 上来,这样开发团队就少维护一个第三方的开源框架了(用于定时任务调度)。 但我发现一个问题,导致迁移不了,就是触发频率:kubernetes cronjob 只支持到分钟,不能到秒级调度,即最高是每分钟运行一次任务;但他们的定时任务,有些是每 10 秒运行一次,15 秒一次,或 30 秒一次。 这种分钟内的调度,搞不定,感觉非常遗憾。 我在想,标准的 cron 只支持到分钟级别,那么分钟级别以内的定时调度呢?可能就是常驻进程了。

    作者回复: 分钟以下级别的还真不能用crontab来调度,得想另外的办法了,比如用shell+sleep。

    2022-12-29归属地:上海
    2
    2
  • 西门吹牛
    组合的方式能少写很多代码,Java 很多中间件都这么搞,组合优于继承,基于接口而非实现编程,自由组合

    作者回复: great

    2022-07-25
    2
收起评论
显示
设置
留言
39
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部