iT邦幫忙

2026 iThome 鐵人賽

DAY 25
0

先建立一個輸出時間的 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、排程行為


上一篇
DAY 24
系列文
我的 Pod 又掛了:30 天學會 Kubernetes 共 25 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言