先建立一個輸出時間的 Job,等待它完成後讀取日誌。當容器正常結束,Job 的狀態應顯示已完成。這與網站容器長期保持執行不同:對一次性任務而言,成功退出正是預期結果,不需要為了讓畫面一直顯示執行中而加上無限等待。
接著把定期工作設定存成 cron-demo.yaml。範例每分鐘執行一次,使用臺北時區,並禁止同一個 CronJob 的工作重疊。保留少量歷史紀錄,方便查看成功與失敗結果,避免練習時間拉長後累積過多已完成的資源。
套用後等下一個排程時間,再查詢 CronJob 與 Job。新 Job 的名稱通常帶有排程相關後綴,因此讀取日誌時要從查詢結果複製實際名稱。觀察物件間的關係,可以看出 CronJob 負責建立任務,而 Job 再負責追蹤 Pod 完成。
完成觀察後刪除這次建立的 CronJob,停止後續排程,並移除一次性測試 Job。本例只輸出時間,沒有對外部資料造成影響;改寫成真正的報表或資料清理時,還應加入失敗回報、重試限制與避免重複處理的機制。
kubectl create job print-time --image=busybox:1.37 -- date
kubectl wait --for=condition=Complete job/print-time --timeout=120s
kubectl logs job/print-time
cron-demo.yaml:
apiVersion: batch/v1
kind: CronJob
metadata:
name: scheduled-time
spec:
schedule: "* * * * *"
timeZone: Asia/Taipei
concurrencyPolicy: Forbid
successfulJobsHistoryLimit: 1
failedJobsHistoryLimit: 1
jobTemplate:
spec:
backoffLimit: 1
template:
spec:
restartPolicy: Never
containers:
- name: clock
image: busybox:1.37
command: ["date"]
kubectl apply -f cron-demo.yaml
kubectl get cronjobs,jobs
等下一個排程時間再查詢,將 JOB_NAME 換成產生的名稱:
kubectl logs job/JOB_NAME
kubectl delete cronjob scheduled-time
kubectl delete job print-time
參考:建立 Job、排程行為