使用 CronJob 執行自動化工作

本頁說明如何使用 Kubernetes CronJob 物件執行自動化工作。

開始之前

  • 您需要有一個 Kubernetes 叢集,並且必須將 kubectl 命令列工具配置為與您的叢集進行通訊。建議在至少有兩個節點且這些節點不充當控制平面主機的叢集上執行本教學課程。如果您還沒有叢集,可以使用 minikube 建立一個,或者您可以使用下列 Kubernetes playground 之一

建立 CronJob

CronJob 需要組態檔。以下是 CronJob 的 Manifest,它會每分鐘執行一個簡單的示範任務

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 Job 後,使用此命令取得其狀態

kubectl get cronjob hello

輸出類似於此

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

從指令結果中可以看到,cron job 尚未排程或執行任何工作。 Watch 大約一分鐘後觀察工作是否建立。

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 job 排程的一個執行中工作。您可以停止觀察工作,然後再次檢視 cron job,以查看它已排程了該工作。

kubectl get cronjob hello

輸出類似於此

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

您應該會看到 cron job 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 job 時,請使用 kubectl delete cronjob <cronjob name> 刪除它。

kubectl delete cronjob hello

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

最後修改時間:2024 年 7 月 4 日下午 7:39 PST:Adding glossary tooltip for watch in k/docs (5053a95f53)