Cronjobs

本頁面說明如何在 Google Kubernetes Engine 執行 CronJob。

總覽

您可以建立「CronJob」來執行與時間有關的有限工作,這些工作可執行一次或依您指定的時間重複執行。CronJob 可用來適時執行自動工作,如備份、報告和傳送電子郵件等。

CronJob 使用工作物件來完成工作。每次根據時間表執行工作時,CronJob 大致會建立工作物件一次。

CronJob 的建立、管理、資源調度和刪除方式都與工作相同。如要進一步瞭解工作,請參閱執行工作

事前準備

如要準備這項工作,請執行下列步驟:

  • 確認您已啟用 Google Kubernetes Engine API。
  • 啟用 Google Kubernetes Engine API
  • 確認您已安裝 Cloud SDK
  • 設定預設的專案 ID
    gcloud config set project [PROJECT_ID]
  • 如果您使用區域叢集,請設定預設的運算區域
    gcloud config set compute/zone [COMPUTE_ZONE]
  • 如果您使用地區叢集,請設定預設的運算地區
    gcloud config set compute/region [COMPUTE_REGION]
  • gcloud 更新到最新版本:
    gcloud components update

建立 CronJob

以下的 CronJob 範例會每分鐘列印目前的時間和字串:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            args:
            - /bin/sh
            - -c
            - date; echo "Hello, World!"
          restartPolicy: OnFailure

CronJob 使用必填的 jobTemplate 欄位,其中包含 CronJob 建立之工作適用的工作規格 jobTemplate: spec。這個工作規格包含 Pod 規格 spec: template: spec,適用於 CronJob 建立用於執行您指定之工作的 Pod。

CronJob 使用必填的 schedule 欄位,這個欄位接受使用 Unix 標準 crontab 格式的時間。所有的 CronJob 時間都採用世界標準時間:

  • 第一個值代表分鐘 (0 到 59 之間)
  • 第二個值代表小時 (0 到 23 之間)
  • 第三個值代表月份中第幾天 (1 到 31 之間)
  • 第四個值代表月份 (1 到 12 之間)
  • 第五個值代表星期幾 (0 到 6 之間)

schedule 也接受 *? 做為萬用字元值。將 / 結合範圍可指定工作應按照規律的間隔重複。在以上的範例中,*/1 * * * * 代表工作應在每月每日的每分鐘重複。

要建立此 CronJob,請將以上資訊清單另存為 cronjob.yaml,然後執行下列指令:

kubectl apply -f cronjob.yaml

或者,如要建立 CronJob 而不建立資訊清單檔案,可使用 kubectl run

kubectl run hello --schedule="*/1 * * * *" --restart OnFailure \
--image busybox -- /bin/sh -c "date; echo Hello, World\!"

指定期限

選填的 startingDeadlineSeconds 欄位代表 CronJob 因故錯過排定時間的啟動期限 (以秒為單位)。錯過的 CronJob 會被視為失敗。

如要指定期限,請將 startingDeadlineSeconds 值新增到資訊清單檔案中的 CronJob spec 欄位。例如,以下資訊清單會指定 CronJob 在 100 秒後啟動:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"
  startingDeadlineSeconds: 100
  jobTemplate:
    spec:
    ...

如果您未指定 startingDeadlineSeconds 值就不會使用期限。

指定並行政策

選填的 concurrencyPolicy 欄位會指定如何處理 CronJob 控制器建立之工作的並行執行。請在 CronJob 的 spec 欄位中指定 concurrencyPolicy

concurrencyPolicy 接受以下值:

  • Allow:允許並行工作。預設值。
  • Forbid:禁止並行工作,如果上次執行尚未完成,則跳過下次下次執行。
  • Replace:取消目前正在執行的工作並更換為新工作。

暫停後續執行

如果將選填的 suspend 欄位設為 true,將會暫停所有後續的執行,但不會暫停目前的執行。請在 CronJob 的 spec 欄位中指定 suspend

suspend 的預設值為 false

指定記錄限制

選填的 successfulJobsHistoryLimitfailedJobsHistoryLimit 可指定應保持的工作完成數目和工作失敗數目。請在 CronJob 的 spec 欄位中指定這些欄位。

根據預設,successfulJobsHistoryLimit 設為 3,而 failedJobsHistoryLimit 設為 1。如果將其中一個欄位的值設為 0,工作在完成後不會被保留下來。

檢查 CronJob

如要檢查 CronJob 的狀態,請執行下列指令:

kubectl describe cronjob [CRON_JOB]

如要檢視叢集裡所有的 Pod 資源 (包括 CronJob 建立並完成的 Pod),請執行:

kubectl get pods -a

-a 標記會指定系統應顯示指定類型的所有資源 (在這個範例中,類型為 Pod)。

刪除 CronJob

如要刪除 CronJob,請執行下列指令:

kubectl delete cronjob [CRON_JOB]

刪除 CronJob 時,Kubernetes 垃圾收集工具會自動刪除關聯的工作,並且不會啟動任何新工作。

相關資源

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Kubernetes Engine 說明文件