首页 > 其他分享 >Job/CronJob:为什么不直接用Pod来处理业务

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

时间:2023-07-13 21:32:37浏览次数:29  
标签:容器 CronJob Kubernetes 对象 Job Pod

面向对象的设计有许多基本原则,其中有两条我认为比较恰当地描述了 Kubernetes 对象设计思路,一个是“单一职责”,另一个是“组合优于继承”。

“单一职责”的意思是对象应该只专注于做好一件事情,不要贪大求全,保持足够小的粒度才更方便复用和管理。

“组合优于继承”的意思是应该尽量让对象在运行时产生联系,保持松耦合,而不要用硬编码的方式固定对象的关系。

应用这两条原则,我们再来看 Kubernetes 的资源对象就会很清晰了。因为 Pod 已经是一个相对完善的对象,专门负责管理容器,那么我们就不应该再“画蛇添足”地盲目为它扩充功能,而是要保持它的独立性,容器之外的功能就需要定义其他的对象,把 Pod 作为它的一个成员“组合”进去。

这样每种 Kubernetes 对象就可以只关注自己的业务领域,只做自己最擅长的事情,其他的工作交给其他对象来处理,既不“缺位”也不“越位”,既有分工又有协作,从而以最小成本实现最大收益。

对应到 Kubernetes 里,“临时任务”就是 API 对象 Job,“定时任务”就是 API 对象 CronJob,使用这两个对象你就能够在 Kubernetes 里调度管理任意的离线业务了。

job 的 YAML“文件头”部分还是那几个必备字段,简单说一下:

  • apiVersion 不是 v1,而是 batch/v1。
  • kind 是 Job,这个和对象的名字是一致的。
  • metadata 里仍然要有 name 标记名字,也可以用 labels 添加任意的标签.

列出几个控制离线作业的重要字段。

  • activeDeadlineSeconds,设置 Pod 运行的超时时间。
  • backoffLimit,设置 Pod 的失败重试次数。
  • completions,Job 完成需要运行多少个 Pod,默认是 1 个。
  • parallelism,它与 completions 相关,表示允许并发运行的 Pod 数量,避免过多占用资源。

CronJob 使用定时规则控制 Job,Job 使用并发数量控制 Pod,Pod 再定义参数控制容器,容器再隔离控制进程,进程最终实现业务功能,层层递进的形式有点像设计模式里的 Decorator(装饰模式),链条里的每个环节都各司其职,在 Kubernetes 的统一指挥下完成任务。

CronJob 除了定义 Job 对象的“jobTemplate”字段之外,CronJob 还有一个新字段就是“schedule”,用来定义任务周期运行的规则。它使用的是标准的 Cron 语法,指定分钟、小时、天、月、周,和 Linux 上的 crontab 是一样的。


标签:容器,CronJob,Kubernetes,对象,Job,Pod
From: https://blog.51cto.com/key3feng/6716199

相关文章

  • 【Azure App Service】Web Job 报错 UNC paths are not supported. Defaulting to Win
    问题描述PHP的WebJob,通过artisan来配置路径启动PHP任务,相关启动脚本如下:artisan_path="d:\\home\\site\\wwwroot";cd${artisan_path}echo"\n"pwdphpartisanschedule:run但是,在运行的时候遇见报错:[07/06/202301:57:31>0f21a2:INFO]/d/home/site/wwwroo......
  • Jenkins远程管理K8S集群实现自动POD部署
    Jenkins远程管理K8S集群实现自动POD部署大致思路修改.kube/config文件,增加新集群的context建立隧道将集群控制端口映射到Jenkins服务器本地端口测试jenkin切换到新context是否能控制该集群新集群配置对接Harbor仓库测试helm部署podJenkins测试配置流水线自动发版1.......
  • xxl-job部署
    XXL-JOB安装、配置、启动、停止教程安装xxl-jobstep1:上传step2:解压step3:初始化数据库step4:修改xxl-job配置文件step4.1:修改调度中心配置文件application.propertiesstep4.2:修改logback.xml(配置xxl-job的日志路径)step4.3:修改执行器配置文件application.propertiesstep4.4:修改logb......
  • 解决docker报错Job for docker.service failed because start of the service was att
    转载自:https://blog.csdn.net/Along_168163/article/details/124118833=================== docker安装之后重新安装报错如下:Jobfordocker.servicefailedbecausestartoftheservicewasattemptedtoooften.See"systemctlstatusdocker.service"and"journa......
  • XXL-JOB 打包成war部署
    1、修改配置xxl-job.pom.xml<failOnMissingWebXml>false</failOnMissingWebXml> 2、修改xxl-job-admin.pom.xml<packaging>war</packaging> <plugin><groupId>org.apache.maven.plugins</groupId><artifactId&g......
  • kubernetes之 Pod控制器
    第五部分Pod控制器1、pod回顾apiVersion,kind,metadata,spec,status(只读)spec:containersnodeSelectornodeNamerestartPolicy:Always,Never,OnFailurecontainers:nameimageimagePullPolicy:Always、Never、IfNotPresentports:......
  • ORACLE杀掉正在运行的job
    问题处理:有定时job执行完毕后,却一直是running状态:过程:查看正在运行中的job以及对应的sid号:select*fromdba_jobs_running;查询对应的session信息:selectsid,serial#fromv$sessionwheresidin('458');杀死对应的session:altersystemkillsession'458,16551';补充:可......
  • C# JObject.Add方法代码示例
    本文整理汇总了C#中Newtonsoft.Json.Linq.JObject.Add方法的典型用法代码示例。如果您正苦于以下问题:C#JObject.Add方法的具体用法?C#JObject.Add怎么用?C#JObject.Add使用的例子?那么恭喜您,这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Newtons......
  • k8s 深入篇———— Job与CronJob[十]
    开篇简要演练一下job和cronjob正文实际上,它们主要编排的对象,都是“在线业务”,即:LongRunningTask(长作业)。比如,我在前面举例时常用的Nginx、Tomcat,以及MySQL等等。这些应用一旦运行起来,除非出错或者停止,它的容器进程会一直保持在Running状态。但是,有一类作业显然不满足......
  • 在 kubernets pod 里使用 perf 直接调试 rust 程序
     我们想要了解我们程序在运行时候的真实情况,但是感觉rust性能方面的调试真的比go麻烦非常多。首先在rustcargo.toml中添加[profile.release]debug=true 直接在pod里面进行调试限制比较多,首先我们可能需要安装一些必要的东西比如perf本体在ubuntu的环境......