1、Job
1.1 理论基础
Job是马上运行的一次性任务, job会创建一个或者多个 Pods,并确保指定数量的 Pods 成功终止。 随着 Pods 成功结束,Job 跟踪记录成功完成的 Pods 个数。 当数量达到指定的成功个数阈值时,任务(即 Job)结束。 删除 Job 的操作会清除所创建的全部 Pods。所以Job类型Pod的**restartPolicy**通常是**Never**或者**OnFailure**。
一种简单的使用场景下,你会创建一个 Job 对象以便以一种可靠的方式运行某 Pod 直到完成。 当第一个 Pod 失败或者被删除(比如因为节点硬件失效或者重启)时,Job 对象会启动一个新的 Pod。
1.2 命令行创建Job
[root@clientvm ~]# kubectl create job -hCreate a job with the specified name.Usage:kubectl create job NAME --image=image [--from=cronjob/name] -- [COMMAND] [args...] [options]Examples:# Create a jobkubectl create job my-job --image=busybox# Create a job with commandkubectl create job my-job --image=busybox -- date# Create a job from a CronJob named "a-cronjob"kubectl create job test-job --from=cronjob/a-cronjob
操作范例;
[root@clientvm ~]# kubectl create job my-job -n mytest --image=busybox -- echo hellojob.batch/my-job created[root@clientvm ~]# kubectl get pod -n mytestNAME READY STATUS RESTARTS AGEmy-job-4twr8 0/1 ContainerCreating 0 3s[root@clientvm ~]# kubectl get pod -n mytestNAME READY STATUS RESTARTS AGEmy-job-4twr8 0/1 Completed 0 5s[root@clientvm ~]# kubectl logs my-job-4twr8 -n mytesthello[root@clientvm ~]# kubectl get jobs.batch -n mytestNAME COMPLETIONS DURATION AGEmy-job 1/1 4s 70s##删除Pod会自动创建[root@clientvm ~]# kubectl delete pod my-job-jp794 -n mytestpod "my-job-jp794" deleted[root@clientvm ~]#[root@clientvm ~]# kubectl get pod -n mytestNAME READY STATUS RESTARTS AGEmy-job-c72bq 1/1 Running 0 46s
1.3 使用yaml创建job
生成yaml文件
[root@clientvm ~]# kubectl create job my-job -n mytest --image=busybox --dry-run=client -o yaml -- sleep 200apiVersion: batch/v1kind: Jobmetadata:creationTimestamp: nullname: my-jobnamespace: mytestspec:template:metadata:creationTimestamp: nullspec:containers:- command:- sleep- "200"image: busyboxname: my-jobresources: {}restartPolicy: Neverstatus: {}
创建Job
[root@clientvm ~]# kubectl apply -f job.yamljob.batch/my-job created[root@clientvm ~]# kubectl get jobs.batch -n mytestNAME COMPLETIONS DURATION AGEmy-job 0/1 38s 38s[root@clientvm ~]# kubectl get pod -n mytestNAME READY STATUS RESTARTS AGEmy-job-n2z45 1/1 Running 0 49s
1.4 设置并行与完成次数
completions:设置完成次数
parallelism: 设置并行
[root@clientvm ~]# kubectl explain job.specKIND: JobVERSION: batch/v1......completions <integer>Specifies the desired number of successfully finished pods the job shouldbe run with.parallelism <integer>Specifies the maximum desired number of pods the job should run at anygiven time.
2、CronJob
Cron Job 创建基于时间调度的 Jobs。
一个 CronJob 对象就像 crontab (cron table) 文件中的一行。 它用 Cron 格式进行编写, 并周期性地在给定的调度时间执行 Job。
CronJobs 对于创建周期性的、反复重复的任务很有用,例如执行数据备份或者发送邮件。 CronJobs 也可以用来计划在指定时间来执行的独立任务,例如计划当集群看起来很空闲时 执行某个 Job。
2.1 命令行创建CronJob
[root@clientvm ~]# kubectl create cronjob -hCreate a cronjob with the specified name.Usage:kubectl create cronjob NAME --image=image --schedule='0/5 * * * ?' -- [COMMAND] [args...] [flags] [options]Aliases:cronjob, cjExamples:# Create a cronjobkubectl create cronjob my-job --image=busybox --schedule="*/1 * * * *"# Create a cronjob with commandkubectl create cronjob my-job --image=busybox --schedule="*/1 * * * *" -- date
范例:
[root@clientvm ~]# kubectl create cronjob my-job -n mytest --image=busybox --schedule="*/1 * * * *" -- datecronjob.batch/my-job created[root@clientvm ~]# kubectl get cronjobs.batch -n mytestNAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGEmy-job */1 * * * * False 0 <none> 12s[root@clientvm ~]# kubectl get cronjobs.batch -n mytestNAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGEmy-job */1 * * * * False 1 10s 63s[root@clientvm ~]#[root@clientvm ~]#[root@clientvm ~]# kubectl get pod -n mytestNAME READY STATUS RESTARTS AGEmy-job-1607481720-5dvr2 0/1 ContainerCreating 0 17s[root@clientvm ~]# kubectl get pod -n mytestNAME READY STATUS RESTARTS AGEmy-job-1607481720-5dvr2 0/1 Completed 0 35s[root@clientvm ~]# kubectl get pod -n mytestNAME READY STATUS RESTARTS AGEmy-job-1607481720-5dvr2 0/1 Completed 0 80smy-job-1607481780-sszc5 0/1 Completed 0 20s[root@clientvm ~]# kubectl logs my-job-1607481720-5dvr2 -n mytestWed Dec 9 02:42:26 UTC 2020[root@clientvm ~]# kubectl describe cronjobs.batch -n mytest my-jobName: my-jobNamespace: mytestLabels: <none>Annotations: <none>Schedule: */1 * * * *......Events:Type Reason Age From Message---- ------ ---- ---- -------Normal SuccessfulCreate 2m12s cronjob-controller Created job my-job-1607481720Normal SawCompletedJob 111s cronjob-controller Saw completed job: my-job-1607481720, status: CompleteNormal SuccessfulCreate 71s cronjob-controller Created job my-job-1607481780Normal SawCompletedJob 51s cronjob-controller Saw completed job: my-job-1607481780, status: CompleteNormal SuccessfulCreate 11s cronjob-controller Created job my-job-1607481840## 删除[root@clientvm ~]# kubectl delete cronjobs.batch -n mytest my-jobcronjob.batch "my-job" deleted
2.2 使用yaml创建CronJob
生成配置文件范例
[root@clientvm ~]# kubectl create cronjob my-job -n mytest --image=busybox --dry-run=client -o yaml --schedule="*/1 * * * *" -- dateapiVersion: batch/v1beta1kind: CronJobmetadata:creationTimestamp: nullname: my-jobnamespace: mytestspec:jobTemplate:metadata:creationTimestamp: nullname: my-jobspec:template:metadata:creationTimestamp: nullspec:containers:- command:- dateimage: busyboxname: my-jobresources: {}restartPolicy: OnFailureschedule: '*/1 * * * *'status: {}
创建CronJob
[root@clientvm ~]# kubectl apply -f cronjob.yamlcronjob.batch/my-job created[root@clientvm ~]# kubectl get cronjobs.batch -n mytestNAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGEmy-job */1 * * * * False 0 <none> 7s
