我在 Kubernetes 集群上設定了一個 cron 作業來處理資料庫中的數百萬條記錄。有時對應于 cron 作業的 pod 會被 Evicted 或 OOM Killed。現在我面臨的問題是,每當此 cron 作業再次啟動時,它都會從頭開始處理所有這些記錄。
只是想了解我應該如何在某處存盤此 cron 作業的進度。假設我將它存盤在資料庫中,那么我應該多久呼叫一次資料庫來存盤狀態?
uj5u.com熱心網友回復:
保持 CronJob 的進度
您可以通過運行來檢查作業kubectl describe <your_job>,但這可能不是您的情況的解決方案。
現在我面臨的問題是,每當此 cron 作業再次啟動時,它都會從頭開始處理所有這些記錄。
這是為了CronJob的正確操作。這是為了 CronJob 的正確操作。您需要知道 CronJob 只會及時執行某些任務,不再干擾它們。您的問題的解決方案是干擾由 CronJob 運行的腳本。用戶 Rakesh Gupta在評論中很好地提到了:
嘗試將您的下一次迭代基于已獲取的行的時間戳或 UUID
通常,您必須更改正在處理資料庫的行程。您實際上可以為此使用時間戳或 UUID。基本上,您需要找到一個可以在運行流程之前輕松檢查的識別符號。然后您的流程將從特定位置開始運行,而不是從頭再來。如果行程通過 OOM 終止,另一種解決方案可能是增加可用 RAM。
uj5u.com熱心網友回復:
我知道我參加聚會有點晚了,來自Rakesh gupta和Mikolaj 的建議非常好。
您要么擴展資源限制,要么使用 DB。
我不確定您擁有的實際應用程式的架構,您也可以使用Redis 資料庫或 Redis 部署作為輔助選項。
當您的 cronjobs 運行時,它會將記錄轉儲到Redis并從Redis資料庫內的佇列中對cronjob處理一條記錄。這是不是很多很好的選擇的DB呼叫將在那里的主資料庫。
我不確定你使用的是哪種語言,但這個庫是一個很好的例子,可以與Redis一起使用并管理佇列:https : //github.com/OptimalBits/bull
使用它,您可以管理Redis 佇列并以最少的資料庫呼叫和更改處理記錄。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/394716.html
標籤:Kubernetes 定时任务 kubernetes-cronjob
