CronJob

CronJob对于创建定期和重复任务非常有用,例如运行备份或发送电子邮件。

image-20200120191642423

创建CronJob示例:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: cronjob
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: pods
            image: busybox
            args:
            - /bin/sh
            - -c
            - date; echo Hello from the kubernetes cluster.
          restartPolicy: OnFailure
            

[@BDSZYF000132741:pod]$ kubectl get cronjobs
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
cronjob */1 * * * * False 0 23s 5m55s

[@BDSZYF000132741:pod]$ kubectl get pods
NAME READY STATUS RESTARTS AGE
cronjob-1579519500-chzvs 0/1 Completed 0 2m29s
cronjob-1579519560-lplv6 0/1 Completed 0 88s
cronjob-1579519620-rzpr2 0/1 Completed 0 28s
frontend-5778f7c84d-4lzr4 1/1 Running 0 26h
frontend-5778f7c84d-9krnn 1/1 Running 0 26h
frontend-5778f7c84d-ctlg9 1/1 Running 0 26h
frontend-5778f7c84d-klrqw 1/1 Running 0 26h
frontend-5778f7c84d-tj7xf 1/1 Running 0 26h
job1-klf4p 0/1 Completed 0 21h
liveness2 1/1 Running 0 23h
mycontainer 1/1 Running 0 46h
nginx2-dbf77bdb7-6j8ts 1/1 Running 0 34h
redis-master-6fbbc44567-jj8kt 1/1 Running 0 129d
redis-slave-74ccb764fc-j8vsx 1/1 Running 0 129d

CronJob cucurrency policy

image-20200318225339313

背景

如果一个cronjob代码出了问题——则每个job可能一直运行;

此时如果它一直启新的任务,则就会有一大批job在运行——直到耗尽pod资源。就像上图一样。

解决方案:设置Concurrency Policy

Concurrency Policy

.spec.concurrencyPolicy 字段是可选的。它指定如何处理由该 cron 作业创建的作业的并发执行。需要指定以下并发策略之一:

  • Allow(默认):cronjob允许同时运行作业
  • Forbid: cron 作业不允许并发运行;如果到了新作业运行的时间并且之前的作业运行尚未完成,则 cron 作业会跳过新作业运行
  • Replace:如果到了新作业运行的时间并且之前的作业运行尚未完成,则 cron 作业将用新的作业运行替换当前正在运行的作业运行

请注意,并发策略仅适用于同一 cronjob创建的作业。如果有多个 cronjob,则始终允许它们各自的作业同时运行。

Jobs History Limits

.spec.successfulJobsHistoryLimit.spec.failedJobsHistoryLimit 字段是可选的。这些字段指定应保留多少已完成和失败的作业。默认情况下,它们分别设置为 3 和 1。将限制设置为“0”相当于在完成后不保留任何相应类型的作业。