CronJob

CronJob 即定时任务,就类似于 Linux 系统的 crontab,在指定的时间周期运行指定的任务。

API 版本对照表

Kubernetes 版本 Batch API 版本 默认开启
v1.5-v1.7 batch/v2alpha1
v1.8-v1.9 batch/v1beta1

注意:使用默认未开启的 API 时需要在 kube-apiserver 中配置 --runtime-config=batch/v2alpha1

CronJob Spec

  • .spec.schedule 指定任务运行周期,格式同 Cron
  • .spec.jobTemplate 指定需要运行的任务,格式同 Job
  • .spec.startingDeadlineSeconds 指定任务开始的截止期限
  • .spec.concurrencyPolicy 指定任务的并发策略,支持 Allow、Forbid 和 Replace 三个选项
  1. apiVersion: batch/v1beta1
  2. kind: CronJob
  3. metadata:
  4. name: hello
  5. spec:
  6. schedule: "*/1 * * * *"
  7. jobTemplate:
  8. spec:
  9. template:
  10. spec:
  11. containers:
  12. - name: hello
  13. image: busybox
  14. args:
  15. - /bin/sh
  16. - -c
  17. - date; echo Hello from the Kubernetes cluster
  18. restartPolicy: OnFailure
  1. $ kubectl create -f cronjob.yaml
  2. cronjob "hello" created

当然,也可以用 kubectl run 来创建一个 CronJob:

  1. kubectl run hello --schedule="*/1 * * * *" --restart=OnFailure --image=busybox -- /bin/sh -c "date; echo Hello from the Kubernetes cluster"
  1. $ kubectl get cronjob
  2. NAME SCHEDULE SUSPEND ACTIVE LAST-SCHEDULE
  3. hello */1 * * * * False 0 <none>
  4. $ kubectl get jobs
  5. NAME DESIRED SUCCESSFUL AGE
  6. hello-1202039034 1 1 49s
  7. $ pods=$(kubectl get pods --selector=job-name=hello-1202039034 --output=jsonpath={.items..metadata.name} -a)
  8. $ kubectl logs $pods
  9. Mon Aug 29 21:34:09 UTC 2016
  10. Hello from the Kubernetes cluster
  11. # 注意,删除 cronjob 的时候不会自动删除 job,这些 job 可以用 kubectl delete job 来删除
  12. $ kubectl delete cronjob hello
  13. cronjob "hello" deleted

参考文档