![](/img/trans.png)
[英]Kubernetes - StatfulSets, how to peg stateful instances to nodes?
[英]few instances of same stateful application - not database - in Kubernetes - how is it managed?
我有我的主應用程序,它有自己獨特的 state,我們稱它為應用程序 A。此應用程序 A 啟動了幾個進程,這些進程執行一些解析工作,然后收集它並將其發送到 Kuberentes 集群之外的數據庫服務器。
我想在不同的 pod 中運行此應用程序 A 的幾個副本。 然而,每個實例都是唯一的,不能被替換,因為它有自己的 state。這意味着每個客戶端只能與它開始與 http 請求通信的同一個實例交談。
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.