當執行docker service update操作時是否對線上的活躍用戶產生影響呢?自己的想法也不知道對不對。我的想法1:有一個docker service ,運行了4個副本,分別是r1,r2, r3, r4 service:r1 聽令,我要更新你,從現在開始Request請求不會打到你那兒去了,你那邊要是還有未返回的Response請抓緊時間返回。r1:收到。所有的Request請求都已經正確返回了。請更新我吧。service:為停止的r1執行更新操作。r1更新完成。繼續加入隊伍。分擔請求。依次執行r2, r3, r4如果我的我的想法成立的話,那就可以說更新一個Docker Service對線上的活躍用戶并不會產生影響。那么問題來了,當我的service只有一個副本的時候呢?我又產生了一個想法。我的想法2:service:哦 當前只有一個副本,在更新之前,我先另啟動一個副本那么這個時候就有兩個副本了,按照想法1依次更新r1, r2 經驗豐富的Docker使用者,請告訴我的想法是否正確。非常感謝!
1 回答

慕的地6264312
TA貢獻1817條經驗 獲得超6個贊
解決這個疑惑需要了解 docker swarm 的 2 個原理:
Load Balancing (推薦閱讀:How does it work? Docker! Part 3: Load balancing, service discovery and security!)
Rolling Updates (推薦閱讀:Rolling updates with Docker Swarm)
我簡單解釋一下:
用戶的請求會轉發到 docker swarm 內置負載均衡(VIP),由負載均衡轉發對應的容器,停止容器時會把容器從負載均衡的轉發列表中移除。
更新容器時,docker swarm 的默認機制是 stop-first ,依次先停止舊容器,然后啟動新容器,如果一個 Service 中有 2 個容器就不會影響正常運行,如果只有 1 個容器就會帶來影響。如果把設置改為 start-first ,即使只有 1 個容器,更新時也不會影響正常運行。
- 1 回答
- 0 關注
- 378 瀏覽
添加回答
舉報
0/150
提交
取消