2023年7月6日发(作者:)
k8sJob、Cronjob的使⽤Job负责处理任务,即仅执⾏⼀次的任务,它保证批处理任务的⼀个或多个Pod成功结束。⽽CronJob则就是在Job上加上了时间调度。Job我们⽤Job这个资源对象来创建⼀个任务,我们定⼀个Job来执⾏⼀个倒计时的任务,定义YAML⽂件:apiVersion: batch/v1kind: Jobmetadata: name: job-demospec: template: metadata: name: job-demo spec: restartPolicy: Never containers: - name: counter image: busybox command: - "bin/sh" - "-c" - "for i in 9 8 7 6 5 4 3 2 1; do echo $i; done"
注意Job的RestartPolicy仅⽀持Never和OnFailure两种,不⽀持Always,我们知道Job就相当于来执⾏⼀个批处理任务,执⾏完就结束了,如果⽀持Always的话是不是就陷⼊了死循环了?然后来创建该Job,保存为:$ kubectl create -f ./b "job-demo" created然后我们可以查看当前的Job资源对象:$ kubectl get jobs注意查看我们的Pod的状态,同样我们可以通过kubectl logs来查看当前任务的执⾏结果。CronJobCronJob其实就是在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任务,apiVersion: batch/v2alpha1kind: CronJobmetadata: name: cronjob-demospec: schedule: "*/1 * * * *" jobTemplate: spec: template: spec: restartPolicy: OnFailure containers: - name: hello image: busybox args: - "bin/sh" - "-c" - "for i in 9 8 7 6 5 4 3 2 1; do echo $i; done" 我们这⾥的Kind是CronJob了,要注意的是.le字段是必须填写的,⽤来指定任务运⾏的周期,格式就和crontab⼀样,另外⼀个字段是.plate, ⽤来指定需要运⾏的任务,格式当然和Job是⼀致的。还有⼀些值得我们关注的字段.sfulJobsHistoryLimit和.JobsHistoryLimit,表⽰历史限制,是可选的字段。它们指定了可以保留多少完成和失败的Job,默认没有限制,所有成功和失败的Job都会被保留。然⽽,当运⾏⼀个Cron Job时,Job可以很快就堆积很多,所以⼀般推荐设置这两个字段的值。如果设置限制的值为 0,那么相关类型的Job完成后将不会被保留。接下来我们来创建这个cronjob$ kubectl create -f onjob "cronjob-demo" created当然,也可以⽤kubectl run来创建⼀个CronJob:kubectl run hello --schedule="*/1 * * * *" --restart=OnFailure --image=busybox -- /bin/sh -c "date; echo Hello from the Kubernetes cluster"$ kubectl get cronjobNAME SCHEDULE SUSPEND ACTIVE LAST-SCHEDULEhello */1 * * * * False 0
⼀旦不再需要 Cron Job,简单地可以使⽤ kubectl 命令删除它:$ kubectl delete cronjob hellocronjob "hello" deleted这将会终⽌正在创建的 Job。然⽽,运⾏中的 Job 将不会被终⽌,不会删除 Job 或 它们的 Pod。为了清理那些 Job 和 Pod,需要列出该Cron Job 创建的全部 Job,然后删除它们:$ kubectl get jobsNAME DESIRED SUCCESSFUL AGEhello-1201907962 1 1 11mhello-1202039034 1 1 8m [root@k8s-master01 jobs]# kubectl get
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGEcronjob-demo */1 * * * * False 1 9s 4m
$ kubectl delete jobs hello-1201907962 hello-1202039034 ...job "hello-1201907962" deletedjob "hello-1202039034" deleted ⼀旦 Job 被删除,由 Job 创建的 Pod 也会被删除。注意,所有由名称为 “hello” 的 Cron Job 创建的 Job 会以前缀字符串 “hello-” 进⾏命名。如果想要删除当前 Namespace 中的所有 Job,可以通过命令 kubectl delete jobs --all ⽴刻删除它们。
发布者:admin,转转请注明出处:http://www.yc00.com/news/1688594202a153202.html
评论列表(0条)