我有一個Python程序,我每2小時在Kubernetes集羣上作爲Job運行。我也有一個網絡服務器,只要用戶點擊頁面上的按鈕就可以開始工作。最多確保在Kubernetes上執行的作業的單個實例並寫入Postgresql
我需要確保在任何給定時間最多隻有一個作業實例正在羣集上運行。
鑑於我正在使用Kubernetes來運行作業並從作業內部連接到Postgresql,因此解決方案應該以某種方式利用這兩者。我雖然有點它和附帶以下思路:
- 查找Kubernetes的設置,將設置此限制,嘗試啓動第二個實例,然後將失敗。我無法找到這個設置。
- 創建共享鎖或互斥鎖。缺點是,如果工作崩潰,我可能無法在退出之前解鎖。
- Kubernetes運行ETCD,也許我可以使用
- 在PostgreSQL,創建一個「鎖定」表時,新的實例連接,它會檢查,如果它是唯一一個運行。以某種方式使用交易,以便贏得並繼續,而其他人退出。我還沒有想到這一點,但應該工作。
- 查詢kubernetes我在工作中使用的標籤的API,看看是否有一些實例。這可能不是原子的,所以不止一個實例可能會滑過。
鑑於我所做的平臺選擇,對於這個問題常見的解決方案是什麼?我該怎麼做,這樣我纔不會重新發明輪子並擁有可靠的東西?
謝謝,我會嘗試使用「k8s不會啓動同名的東西」的方法,或者可能是「postgres lock」。 – user7610