K8s新手系列之CronJob
概述
官方文檔:https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/cron-jobs/
CronJob控制器以 Job控制器資源為其管控對象,并借助它管理pod資源對象,Job控制器定義的作業任務在其控制器資源創建之后便會立即執行,但CronJob可以以類似于Linux操作系統的周期性任務作業計劃的方式控制其運行時間點及重復運行的方式。也就是說,CronJob可以在特定的時間點(反復的)去運行job任務。
學習Job可以閱讀這篇文章:http://www.rzrgm.cn/huangSir-devops/p/18904493

CronJob作用
- 按照指定時間周期(如每小時、每天、每周)創建 Job 對象。
- Job 負責運行 Pod 執行具體任務,任務完成后 Pod 自動終止。
CronJob資源清單文件
apiVersion: batch/v1
kind: CronJob
metadata:
name: backup-job
spec:
schedule: "0 2 * * *" # 每天凌晨2點執行
concurrencyPolicy: Forbid # 禁止并發執行
startingDeadlineSeconds: 300 # 任務啟動超時時間
successfulJobsHistoryLimit: 3 # 保留成功的Job數量
failedJobsHistoryLimit: 1 # 保留失敗的Job數量
jobTemplate: # Job模板
spec:
template:
spec:
containers:
- name: backup
image: my-backup-image
command: ["/bin/sh", "-c", "backup-script.sh"]
restartPolicy: OnFailure # 失敗時重啟
字段說明
schedule:Cron 表達式,格式為 分鐘 小時 日期 月份 星期
- 示例:
- 0 2 * * *:每天凌晨 2 點。
- */15 * * * *:每 15 分鐘。
- 0 0 * * 0:每周日午夜。
concurrencyPolicy:控制并發執行策略
- Allow(默認):允許并發運行多個 Job。
- Forbid:禁止并發,若前一個未完成則跳過本次調度。
- Replace:替換未完成的 Job,啟動新 Job。
startingDeadlineSeconds
任務啟動超時時間,若超過此時間仍未啟動,則標記為失敗。
jobTemplate
Job 的模板定義,包含 Pod 規范,與獨立 Job 資源的 spec 字段相同。
實戰案例
[root@master ~/cronjob]# cat cronjob.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: hello-cron
spec:
# 每分鐘執行一次
schedule: "* * * * *"
# 禁止并發執行
concurrencyPolicy: Forbid
# 任務啟動超時時間
startingDeadlineSeconds: 300
# 保留成功的Job數量
successfulJobsHistoryLimit: 10
# 保留失敗的Job數量
failedJobsHistoryLimit: 3
jobTemplate:
spec:
template:
spec:
containers:
- name: cj-busybox
image: busybox
args:
- /bin/sh
- -c
- echo "Hello, CronJob!"
restartPolicy: Never
# 創建cronjob
[root@master ~/cronjob]# kubectl apply -f cronjob.yaml
cronjob.batch/hello-cron created
查看資源
# 查看cronjob
# SUSPEND表示是否暫停調度(False表示正常運行)
# ACTIVE:當前活躍的 Job 數量(0表示沒有正在運行的 Job)
# LAST SCHEDULE:上一次調度 Job 的時間(57s前)
[root@master ~/cronjob]# kubectl get cj
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
hello-cron * * * * * False 0 57s 18m
# 查看job
[root@master ~/cronjob]# kubectl get job
NAME COMPLETIONS DURATION AGE
hello-cron-29156032 1/1 6s 9m8s
hello-cron-29156033 1/1 6s 8m8s
hello-cron-29156034 1/1 5s 7m8s
hello-cron-29156035 1/1 6s 6m8s
hello-cron-29156036 1/1 6s 5m8s
hello-cron-29156037 1/1 5s 4m8s
hello-cron-29156038 1/1 6s 3m8s
hello-cron-29156039 1/1 5s 2m8s
hello-cron-29156040 1/1 5s 68s
hello-cron-29156041 1/1 5s 8s
# 查看Pod
[root@master ~/cronjob]# kubectl get po
NAME READY STATUS RESTARTS AGE
hello-cron-29156031-jnck2 0/1 Completed 0 10m
hello-cron-29156032-cxbsk 0/1 Completed 0 9m4s
hello-cron-29156033-bw6kf 0/1 Completed 0 8m4s
hello-cron-29156034-kkwc2 0/1 Completed 0 7m4s
hello-cron-29156035-bhzkv 0/1 Completed 0 6m4s
hello-cron-29156036-vlxrz 0/1 Completed 0 5m4s
hello-cron-29156037-v968r 0/1 Completed 0 4m4s
hello-cron-29156038-gj9c5 0/1 Completed 0 3m4s
hello-cron-29156039-7lnb4 0/1 Completed 0 2m4s
hello-cron-29156040-lqtfv 0/1 Completed 0 64s
hello-cron-29156041-bndq5 0/1 Completed 0 4s
本文來自博客園,作者:huangSir-devops,轉載請注明原文鏈接:http://www.rzrgm.cn/huangSir-devops/p/18919321,微信Vac666666,歡迎交流

浙公網安備 33010602011771號