簡體   English   中英

在 Kube.netes 中幾乎沒有相同狀態應用程序的實例 - 不是數據庫 - 它是如何管理的?

[英]few instances of same stateful application - not database - in Kubernetes - how is it managed?

我有我的主應用程序,它有自己獨特的 state,我們稱它為應用程序 A。此應用程序 A 啟動了幾個進程,這些進程執行一些解析工作,然后收集它並將其發送到 Kuberentes 集群之外的數據庫服務器。

我想在不同的 pod 中運行此應用程序 A 的幾個副本。 然而,每個實例都是唯一的,不能被替換,因為它有自己的 state。這意味着每個客戶端只能與它開始與 http 請求通信的同一個實例交談。

  1. 在 Kube.netes 中如何實現?
  2. 我需要定義StatefulSet組件嗎?
  3. 我如何管理每個客戶端(來自集群外部)每次都會與他在相同的 object id 上開始通信的同一個實例交談? 例如獲取 object 的狀態。
  4. 萬一豆莢死了我不想恢復。 那可能嗎?

1:是的,有點

2:不一定,但可能會簡化一些事情

3:如果你使用入口,你可以使用不同的方法來維護后端親和力,即。 基於 cookie,基於源 IP 等(nginx 示例: https://kube.netes.github.io/ingress-nginx/examples/affinity/cookie/

4:您可能希望將 restartPolicy 設置為 Never

盡管如此,這聽起來確實是個壞主意。 您應該允許共享 state(即 redis),或者能夠使用從本地存儲加載的相同 state 重新啟動的 statefulset。 您需要記住,即使使用最優化的設置,這樣的事情也可能會中斷(即,當支持 pod 出現故障時切換到不同的 pod,由於集群擴展而重新安排節點等)

對於第 4 個問題。 您只需要設置container-restart-policy 我使用這個標志創建了一個具有這個特性的 pod:-- --restart=Never

恕我直言,這不是 Kube.netes 問題。 您可以在其他環境中遇到這種情況。 這個想法是使用粘性會話來對您的所有請求產生親和力。 您可能需要在 ingress controller 文檔中搜索此設置。 例如Nginx 入口

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM