CronJob
CronJob 概述
- CronJob 主要用于执行有终止期限的周期性作业式任务;
- CronJob 与 Job 的关系类似于 Deployment 与 ReplicaSet 的关系,即 CronJob 调用 Job 来执行周期性任务
CronJob Explain
apiVersion: batch/v1 # API群组及版本
kind: CronJob # 资源类型特有标识
metadata:
name <string> # 资源名称,在作用域中要唯一
namespace <string> # 名称空间;CronJob资源隶属名称空间级别
spec:
jobTemplate <Object> # job作业模板,必选字段
metadata <object> # 模板元数据
spec <object> # 作业的期望状态
schedule <string> # 调度时间设定,必选字段
concurrencyPolicy <string> # 并发策略,可用值有Allow、Forbid和Replace
failedJobsHistoryLimit <integer> # 失败作业的历史记录数,默认为1
successfulJobsHistoryLimit <integer> # 成功作业的历史记录数,默认为3
startingDeadlineSeconds <integer> # 因错过时间点而未执行的作业的可超期时长
suspend <boolean> # 是否挂起后续的作业,不影响当前作业,默认为falseCronJob Example
范例 - 1
yaml
- cronjob-demo.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: cronjob-demo
namespace: default
spec:
schedule: "*/1 * * * *" # 每两分钟执行一次
jobTemplate: # job的定义
metadata: # job的模板
labels:
controller: cronjob-demo
spec: # job的具体定义
parallelism: 1
completions: 1
ttlSecondsAfterFinished: 600
backoffLimit: 3
activeDeadlineSeconds: 60
template:
spec:
containers:
- name: myjob
image: alpine
command:
- /bin/sh
- -c
- date; echo Hello from CronJob, sleep a while...; sleep 60
restartPolicy: OnFailure
startingDeadlineSeconds: 300验证
# kubectl apply -f cronjob-demo.yaml
cronjob.batch/cronjob-demo created
# 未达到定义的时间点,因此不会创建job
# kubectl get cronjob
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
cronjob-demo */1 * * * * False 0 <none> 12s
# kubectl get job
No resources found in default namespace.
# kubectl get pod
No resources found in default namespace.
# 到定义的时间点,开始执行job
# kubectl get cronjob
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
cronjob-demo */1 * * * * False 1 2s 47s
# kubectl get job
NAME COMPLETIONS DURATION AGE
cronjob-demo-27876414 0/1 4s 4s
# kubectl get pod
NAME READY STATUS RESTARTS AGE
cronjob-demo-27876414-5hlmm 1/1 Running 0 14s
# job执行完毕
# kubectl get pod
NAME READY STATUS RESTARTS AGE
cronjob-demo-27876416-bwnpx 0/1 Terminating 0 67s
cronjob-demo-27876417-n7c5x 0/1 ContainerCreating 0 7s
# 每间隔1分钟执行一次
# kubectl get job
NAME COMPLETIONS DURATION AGE
cronjob-demo-27876416 0/1 105s 105s
cronjob-demo-27876417 0/1 45s 45s
# kubectl get job
NAME COMPLETIONS DURATION AGE
cronjob-demo-27876417 0/1 82s 82s
cronjob-demo-27876418 0/1 22s 22s
# kubectl get job
NAME COMPLETIONS DURATION AGE
cronjob-demo-27876418 0/1 76s 76s
cronjob-demo-27876419 0/1 16s 16s
# 删除cronjobs后,其关联的job也会删除
# kubectl delete cronjobs.batch cronjob-demo
cronjob.batch "cronjob-demo" deleted
# kubectl get job
No resources found in default namespace.
# kubectl get pod
No resources found in default namespace.