[英]kubernetes cronjob only runs once?
我使用以下時間表創建了一個 k8s CronJob(每分鍾運行一次):
schedule: "*/1 * * * *"
我看到我的 CronJob 創建了:
NAMESPACE NAME READY STATUS RESTARTS AGE
job-staging job-1593017820-tt2sn 2/3 Running 0 10m
我的工作只是對日志執行 Printf 一次,然后退出。
當我執行kubernetes get cronjob
時,我看到:
NAMESPACE NAME READY STATUS RESTARTS AGE
job-staging job */1 * * * * False 1 19m 19m
當我查看日志時,它看起來只運行了一次,這是第一次運行。 我需要阻止我的程序退出嗎?
我以為 k8s 會重新啟動我的程序,但也許這是一個錯誤的假設。
您對 Kubernetes (“重新啟動程序”)行為的假設是正確的。
您可能知道,Job 基本上是一個 Kubernetes Pod,它執行一些進程並在以零退出代碼退出時成功完成。 CronJob 的“Cron”部分是最明顯的,它安排 Job 以特定的時間模式執行。
Most YAML objects for CronJobs include the restartPolicy: OnFailure
key that prevents Kubernetes from rescheduling the Job for a non-zero exit code (the hello-world YAML file in Kubernetes documentation uses this flag).
根據我在您的kubectl
指令獲得的日志中看到的內容,您的 Job 似乎失敗了 - 因為Status 1
。 我建議您使用kubectl logs -f -n default job-1593017820-tt2sn
檢查 CronJob 的日志,以了解腳本執行中是否存在任何可能的錯誤(如果您的腳本以退出代碼顯式退出,請檢查可能的非-零代碼)。
[更新]
CronJobs 也有限制:
cron 作業在其計划的每個執行時間大約創建一次作業 object。 我們說“約”是因為在某些情況下可能會創造兩個工作崗位,或者可能不會創造任何工作崗位。 我們試圖使這些罕見,但不完全阻止它們。 因此,作業應該是冪等的。
我認為這些是非常罕見的情況,但也許你已經發現自己處於這些罕見的情況中。 文檔在這里。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.