文章算是一篇读书笔记。看张磊大佬的深入刨析kube的理解吧
-----大佬们。请收下我虔诚的仰视;
cronjob
主要用于离线业务;定时任务;
其yaml中关键词是jobTemplate,这个其实就是job的一个控制器,其创建和删除的依据就schedule中的字段定义的;
标准的unixCron的表达式:分时日月周
kubectl get jobs
kubectl get cronjob
贴一个书中的cronJob的例子;
此处指出来几个注意点:
1.concurrencyPolicy=Allow,此处意味着多个job可以同时存在;
2.concurrencyPolicy=Forbid,意味着不会创建新的pod。该创建周期被跳过;
3.concurrencyPolicy=Replace。这意味着心产生的job会替换旧的。未执行完的job
如果某一次job创建失败。这次创建会标记为miss。在制定的时间窗口内,miss的数量到达100.cronjob会停止再创建job
时间窗口可以由spec.startingDeadlineSeconds字段制定。比如starting-DeadlineSeconds=200.意味着过去200s内。如果miss数量达到100,那么这个job不会再创建;
job
贴一个简单的计算pi的job的yaml:
job中。设置一个podtemplate。定义image。执行command
job对象建立后。会将pod模版上自动加上controller-uid=随机字符,job对象本身被自动加上了这个Label对应的selector。保证job和管理的额 pod的匹配关系;
job 的pod模版中restartPolicy=Never
Deployment对象里。restartPolicy只允许设置为always。
如果job失败了pod会不断的尝试新建一个新的pod。我们可以在job对象中设置重试次数:spec。backoffLimit。。这个字段默认为6
重试时间10s。20s。40s。指数级别增加;
容器如果一直不完成 。不结束。可以限制pod的运行时长:spec。activeDeadlineSeconds字段;
job Controller并行作业控制
spec。aprallelism定义job在任意时间点最多可以启动多少个pod同时运行
spec。complettions定义的是job至少要完成的 pod数量;及job的最小完成数;
kubectl get job。会显示Desired的值是complet定义的最小完成数;
kubectl get pods。显示pod并行运行的pod数量;
一个pod的生命周期:
panding
containerCreating
running
completed
我发现其他的言语都不如这本书写的语言的解说的清晰;直接上图吧。请大佬原谅我抄袭大佬的说辞;