kubernetes(k8s)Job 和 Cronjob 的使用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kubernetes(k8s)Job 和 Cronjob 的使用相关的知识,希望对你有一定的参考价值。
参考技术A Job,我们在日常的工作中经常都会遇到一些需要进行批量数据处理和分析的需求,当然也会有按时间来进行调度的工作,在Kubernetes集群中为我们提供了Job和CronJob两种资源对象来应对这种需求。Job负责处理任务,即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束。而CronJob则就是在Job上加上了时间调度。
Job的apiVersion是batch/v1用Job这个资源对象来创建一个倒计时的任务,定义YAML文件:
注意Job的RestartPolicy仅支持Never和OnFailure两种,不支持Always,Job就相当于来执行一个批处理任务,执行完就结束了,如果支持Always的话会陷入了死循环了。
然后来创建该Job,保存为job-demo.yaml:
然后可以查看当前的Job资源对象:
注意查看Pod的状态,同样可以通过kubectl logs来查看当前任务的执行结果。
CronJob其实就是在Job的基础上加上了时间调度,我们可以:在给定的时间点运行一个任务,也可以周期性地在给定时间点运行。这个实际上和Linux中的crontab就非常类似了。
一个CronJob对象其实就对应crontab文件中的一行,它根据配置的时间格式周期性地运行一个Job,格式和crontab也是一样的。
crontab的格式如下:
分 小时 日 月 周 要运行的命令 第1列分钟(0~59) 第2列小时(0~23) 第3列日(1~31) 第4列月(1~12) 第5列星期(0~7)(0和7表示星期天) 第6列要运行的命令
现在,我们用CronJob来管理我们上面的Job任务,
这里的Kind是CronJob了,要注意的是.spec.schedule字段是必须填写的,用来指定任务运行的周期,格式就和crontab一样,另外一个字段是.spec.jobTemplate, 用来指定需要运行的任务,格式当然和Job是一致的。
还有一些值得我们关注的字段.spec.successfulJobsHistoryLimit和.spec.failedJobsHistoryLimit,表示历史限制,是可选的字段。它们指定了可以保留多少完成和失败的Job,默认没有限制,所有成功和失败的Job都会被保留。然而,当运行一个Cron Job时,Job可以很快就堆积很多,所以一般推荐设置这两个字段的值。如果设置限制的值为 0,那么相关类型的Job完成后将不会被保留。
创建这个cronjob
当然,也可以用kubectl run来创建一个CronJob:
一旦不再需要 Cron Job,简单地可以使用 kubectl 命令删除它:
这将会终止正在创建的 Job。然而,运行中的 Job 将不会被终止,不会删除 Job 或 它们的 Pod。为了清理那些 Job 和 Pod,需要列出该 Cron Job 创建的全部 Job,然后删除它们:
以上是关于kubernetes(k8s)Job 和 Cronjob 的使用的主要内容,如果未能解决你的问题,请参考以下文章
kubernetes(k8s)Job 和 Cronjob 的使用