大数跨境
0
0

Kubernetes Job和CronJob

Kubernetes Job和CronJob 开发运维devops
2025-11-20
0
导读:Kubernetes Job和CronJob

Kubernetes Job和CronJob

首先介绍一下job和cronjob

在Kubernetes集群提供了Job和CronJob两种资源对象

Job负责处理任务,即仅执行一次的任务,它保障批处理任务的一个或多个Pod成功结束

CronJob则就是在Job上加上了时间调度

Job 演示

这里使用job资源对象创建一个任务,用于倒计时

cat >>Job.yaml<<EOF---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"EOF

执行并检查job

[root@abcdocker yaml]# kubectl create -f job.yamljob.batch/job-demo created
[root@abcdocker yaml]# kubectl get jobNAME       COMPLETIONS   DURATION   AGEjob-demo   0/1           2s         4s
#COMPLETIONS 任务状态#DURATION 持续时间

可以在查看一下pod状态

[root@abcdocker yaml]# kubectl get podNAME             READY   STATUS      RESTARTS   AGEjob-demo-7xb9r   0/1     Completed   0          2m11s
#job任务执行完毕后状态就变更为Completed(完成状态),不会像其他pod属于running状态

还可以使describe查看job的详细信息 


还可以通过pod日志,查看pod运行状态 

只有job执行完毕后,STATUS状态才为Completed,没有执行完毕的状态为Running

Job Pod类型中的RestartPolicy (pod重启策略)仅支持Never和OnFailure两种,不支持Always,Job就相当于来执行一批处理任务,执行完就结束,如果支持Always(一直重启,直到pod健康)就会陷入死循环

CronJob演示

Cronjob其实就是在Job的基础上加上了时间调度,我们可以在指定的时间点运行一个类似于任务,也可以周期性的在指定时间点运行。这个实际上和Linux中的crontab非常类似。一个CronJob对象其实就是对应crontab中的一行,根据时间配置格式周期运行一个Job,配置格式和crontab相同

crontab的格式如下

# Example of job definition:# .---------------- minute (0 - 59)# |  .------------- hour (0 - 23)# |  |  .---------- day of month (1 - 31)# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat# |  |  |  |  |# *  *  *  *  * user-name  command to be executed
* * * * *分时日月周

接下来创建一个每隔30分钟打印数字的定时任务

---apiVersion: batch/v1beta1kind: CronJobmetadata:  name: cronjob-demospec:  schedule: "*/30 * * * *"     #这里需要添加一个时间调度的周期,和crontab调度是一样的,这也是主要和job任务的区别,同时这里也不需要添加执行的命令  jobTemplate:            #cronjob实际上下面就是用的job配置,这里可以直接将上面job的配置复制过来即可    spec:      template:        metadata:          name: cronjob-demo      #pod名称        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"

创建完毕后可以通过下面的方式进行查看

[root@abcdocker ~]# kubectl get cronjobNAME           SCHEDULE       SUSPEND   ACTIVE   LAST SCHEDULE   AGEcronjob-demo   */30 * * * *   False     0        15m             20h
[root@abcdocker ~]# kubectl get podNAME                            READY   STATUS      RESTARTS   AGEcronjob-demo-1574141400-xfk86   0/1     Completed   0          75mcronjob-demo-1574143200-gzf47   0/1     Completed   0          45mcronjob-demo-1574145000-dhz7m   0/1     Completed   0          15m
[root@abcdocker ~]# kubectl get jobsNAME                      COMPLETIONS   DURATION   AGEcronjob-demo-1574141400   1/1           11s        75mcronjob-demo-1574143200   1/1           9s         45mcronjob-demo-1574145000   1/1           8s         15mjob-demo                  1/1           32s        20h
#每30分钟执行一次job,执行完毕job后状态会进行保留。通过get jobs和get pod都可以看到

我们需要给cronjob设置一个历史记录限制,否则jobs会一直增加

在spec下面添加如下2条内容,自定义历史记录限制successfulJobsHistoryLimit: 5   #成功保留次数failedJobsHistoryLimit: 10      #失败保留次数

  

【声明】内容源于网络
0
0
开发运维devops
10+老运维,devops相关文档精华。
内容 96
粉丝 0
开发运维devops 10+老运维,devops相关文档精华。
总阅读174
粉丝0
内容96