13|Job/CronJob:为什么不直接用Pod来处理业务?
为什么不直接使用 Pod
- 深入了解
- 翻译
- 解释
- 总结
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-20227 - Geek_b9dad2课外小贴士里第4条和第6条感觉是有冲突的,这个怎么理解呢?
作者回复: 一个是Job,一个是CronJob,而且CronJob是能够控制Job的,官大一级压死人。
2022-07-2016 - 花花大脸猫不得不服这个设计,为后续扩展带来了无限的可能,而且又不影响现有的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归属地:陕西55 - Sports终于知道老师昵称的由来了
作者回复: 有那么一点关系,笑。
2022-07-2025 - Geek_7ba156666,超爱这种讲课方式。老师你一定要多出课啊,笔芯~
作者回复: thanks
2023-02-08归属地:江苏4 - aoe原来一直奇怪为什么有那么多spec、template不停的嵌套?今天终于明白了:不同层级自己描述自己的,相互不影响,不合陌生人说话
作者回复: 是的,就是对象套对象的组合,把它转换成图形也许会好理解一些。
2022-08-10归属地:北京4 - 密码123456Command 用双引号里写命令,不能有空格。
作者回复: good
2022-07-2034 - Demon.Lee最近在把业务服务迁移到 Kubernetes 上部署,其中就有一个定时服务,包含 30 个定时 job。我想着直接搬到 Kubernetes 的 CronJob 上来,这样开发团队就少维护一个第三方的开源框架了(用于定时任务调度)。 但我发现一个问题,导致迁移不了,就是触发频率:kubernetes cronjob 只支持到分钟,不能到秒级调度,即最高是每分钟运行一次任务;但他们的定时任务,有些是每 10 秒运行一次,15 秒一次,或 30 秒一次。 这种分钟内的调度,搞不定,感觉非常遗憾。 我在想,标准的 cron 只支持到分钟级别,那么分钟级别以内的定时调度呢?可能就是常驻进程了。
作者回复: 分钟以下级别的还真不能用crontab来调度,得想另外的办法了,比如用shell+sleep。
2022-12-29归属地:上海22 - 西门吹牛组合的方式能少写很多代码,Java 很多中间件都这么搞,组合优于继承,基于接口而非实现编程,自由组合
作者回复: great
2022-07-252