使用 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 的標準輸出。
注意
工作名稱與 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)