iT邦幫忙

2025 iThome 鐵人賽

DAY 8
0
DevOps

新創視角下的 DevOps × AI 探索系列 第 8

Day8: Job 與 CronJob:批次任務與排程任務

  • 分享至 

  • xImage
  •  

前言

在 Day7 中,我們學習了 ReplicaSet 與 Deployment,這兩者主要用於 長時間運行的服務,並且具備自動擴展與滾動更新的能力。

不過,真實世界中除了服務型應用之外,我們常常還需要執行一些 一次性任務 或 週期性任務。
例如:

  • 一次性執行資料庫 migration
  • 每小時備份或對服務做 health check
  • 每天排程處理資料更新

這時候,k8s 的 Job 與 CronJob 就是一個很好的選擇。

Job:一次性批次任務

設計理念

  • Job 主要是確保一個 Pod(或多個 Pod)可以 成功執行並完成任務。
  • 和 Deployment 不同,它不會長時間持續運行,而是執行完就結束。

使用場景

  • 資料庫 migration
  • 一次性資料分析
  • 批次轉檔、壓縮、上傳

常見參數

  • completions:總共要完成多少次任務
  • parallelism:允許同時跑幾個 Pod
  • backoffLimit:失敗後最多重試幾次
  • restartPolicy:通常設為 OnFailure

實作範例:一次性 Job

建立一個 Job,執行一次簡單的批次計算:

apiVersion: batch/v1
kind: Job
metadata:
  name: fibonacci-job
spec:
  template:
    spec:
      containers:
      - name: fibonacci
        image: busybox
        command: ["sh", "-c", "echo '計算斐波那契數列'; sleep 5; echo '完成!'"]
      restartPolicy: OnFailure

操作:

kubectl apply -f fibonacci-job.yaml
kubectl get jobs
kubectl logs job/fibonacci-job

CronJob:排程任務

設計理念

  • CronJob 是在 Job 的基礎上,加入排程功能。
  • 它的排程語法與 Linux cron 相同。

使用場景

  • 每天凌晨執行資料備份
  • 每小時檢查系統 health check 並回報
  • 每天跑資料更新

常見參數

  • schedule:cron 表達式,例如 "*/5 * * * *"
  • startingDeadlineSeconds:允許延遲多久啟動
  • concurrencyPolicy:控制是否允許任務重疊
  • Allow(預設):允許同時執行多個
  • Forbid:禁止重疊
  • Replace:新任務取代舊任務

實作範例:CronJob

建立一個 CronJob,每分鐘輸出一次時間戳記:

apiVersion: batch/v1
kind: CronJob
metadata:
  name: timestamp-cron
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: timestamp
            image: busybox
            command: ["sh", "-c", "date; echo Hello from CronJob"]
          restartPolicy: OnFailure

操作:

kubectl apply -f timestamp-cron.yaml
kubectl get cronjobs
kubectl get jobs --watch
kubectl logs job/<job-name>

Job 與 CronJob 的最佳實務

  • 為 Job 設定 backoffLimit 避免無限重試。
  • 為 CronJob 設定合適的 concurrencyPolicy,避免同時執行造成資源爭奪。
  • 建議搭配 Resource Requests / Limits,避免批次任務吃光資源。
  • 使用 kubectl describe cronjob 觀察 CronJob 行為。

總結

  • Job:一次性批次任務。
  • CronJob:週期性排程任務。
  • 與其他 Kubernetes 工作負載比較:
    • ReplicaSet / Deployment:長時間服務
    • Job / CronJob:短期批次或排程
    • (明天的主題)DaemonSet:系統層級,常駐運行

Job 與 CronJob 是 Kubernetes 中 不可或缺的拼圖,讓自動化、數據處理、AI workflow 得以順暢運行。


上一篇
Day7: ReplicaSet 與 Deployment:自動擴展與滾動更新
下一篇
Day9: DaemonSet:系統級服務的部署(如 log agent)
系列文
新創視角下的 DevOps × AI 探索11
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言