[英]Run Scheduled Cron method in Spring from single pod if multiple pods exist on Kubernetes
[英]How to run quartz task on single pod in kubernetes cluster?
我有一個 Spring MVC 項目,其中石英任務當前綁定到 mysql 表中的虛擬機,並且基於這些映射,我們在相應的服務器上執行任務。
例如:
任務 1:admin-3002
任務 2:admin-4001
現在我們已將此應用程序移至 kube.netes 集群中,但由於 kube.netes 中的主機名不是 static,因此每個任務都在所有可用的 pod 上執行。
任何人都可以建議這個問題的最佳解決方案。 一致性哈希是實現這一目標的好解決方案嗎?
我們目前正在運行單個 pod 以避免在所有 pod 上運行任務,但需要找到更好的方法來解決此問題。
最簡單的方法是在 MySQL 數據庫中創建一個鎖表,並將作業名稱作為唯一標識符。
當作業開始時,嘗試向該表寫入一條記錄。
當你的工作已經有記錄時,就停止處理你的工作。
當沒有鎖創建並提交鎖時,處理作業並在最后刪除鎖。
一個很好的解決方案是領導者選舉,可能使用 kube api。不太干凈但可能同樣成功的是使用 StatefulSet 並僅在帶有-0
后綴的 pod 上執行某些邏輯,因為 sts pod 按順序編號,始終從 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.