使用 CronJob 執行自動化任務

此頁面展示瞭如何使用 Kubernetes CronJob 物件來執行自動化任務。

準備工作

  • 你需要擁有一個 Kubernetes 叢集,並且 kubectl 命令列工具已配置為與你的叢集通訊。建議在至少有兩個不充當控制平面主機的節點的叢集上執行本教程。如果你還沒有叢集,可以使用 minikube 建立一個,或者使用以下 Kubernetes 演練場之一。

建立 CronJob

Cron 作業需要一個配置檔案。這是一個 CronJob 的清單,它每分鐘執行一個簡單的演示任務。

apiVersion: batch/v1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "* * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox:1.28
            imagePullPolicy: IfNotPresent
            command:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure

使用以下命令執行示例 CronJob:

kubectl create -f https://k8s.io/examples/application/job/cronjob.yaml

輸出類似於:

cronjob.batch/hello created

建立 cron 作業後,使用此命令獲取其狀態:

kubectl get cronjob hello

輸出類似於:

NAME    SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
hello   */1 * * * *   False     0        <none>          10s

從命令結果中可以看出,cron 作業尚未排程或執行任何作業。在一分鐘左右的時間內監視作業的建立:

kubectl get jobs --watch

輸出類似於:

NAME               COMPLETIONS   DURATION   AGE
hello-4111706356   0/1                      0s
hello-4111706356   0/1           0s         0s
hello-4111706356   1/1           5s         5s

現在你已經看到了一個由“hello”cron 作業排程執行的作業。你可以停止監視作業並再次檢視 cron 作業,以檢視它排程了該作業。

kubectl get cronjob hello

輸出類似於:

NAME    SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
hello   */1 * * * *   False     0        50s             75s

你應該會看到 cron 作業 `hello` 在 `LAST SCHEDULE` 中指定的時間成功排程了一個作業。當前有 0 個活躍作業,這意味著該作業已完成或失敗。

現在,查詢上次排程作業建立的 Pod,並檢視其中一個 Pod 的標準輸出。

# Replace "hello-4111706356" with the job name in your system
pods=$(kubectl get pods --selector=job-name=hello-4111706356 --output=jsonpath={.items[*].metadata.name})

顯示 Pod 日誌:

kubectl logs $pods

輸出類似於:

Fri Feb 22 11:02:09 UTC 2019
Hello from the Kubernetes cluster

刪除 CronJob

當你不再需要 cron 作業時,可以使用 `kubectl delete cronjob ` 刪除它。

kubectl delete cronjob hello

刪除 cron 作業會移除它建立的所有作業和 Pod,並阻止它建立額外的作業。你可以在垃圾收集中閱讀更多關於刪除作業的資訊。

上次修改時間:2024 年 7 月 4 日晚上 7:39 PST:為 k/docs 中的 watch 新增詞彙表工具提示 (5053a95f53)