科技新知

上一期筆者就介紹寺過swarm的相容性,可以任意地刪除其中node、加入新的node,系統會自動同步各機狀態。今日,我們就來討論一下加減的流程吧。

實戰輪調流程

假設我們有5個 node,都為manager,各個 docker 版本都為28.0.4 ,我們將要關掉node 5 (ubuntu 22),並加入node 6 (ubuntu24),輪調流程如下

  1. 如果node5有vvip,login node 5,關掉vvip
    • systemctl stop keepalived
  2. login node1, 把node5降為drain模式,變為worker,並從群集中刪除
    • docker node update --availability drain node5
    • docker node demote node5
      • 若然node5不是直接關機、刪除,只想好好地離開群集,可以 login node5, 在node5上預先執行 docker swarm leave
    • docker node rm --force node5
      • 如果之前node5有好好地離開群集,而且狀態已經轉為down,那麼就不用"force"了,用最保守的刪除指令就可以 docker node rm node5
  3. login node1, 取得manager token
    • docker swarm join-token manager
  4. node5關機,新增node6,使用相容的ip段,或者使用node5的ip
  5. login node6, 加入群集,設定vvip
    • docker swarm join --token xxxx XX_IP:XX_PORT
    • systemctl stop keepalived

這陷阱這陷阱 偏我遇上

上述的操作,有一些可能的陷阱,筆者就剛好踩過,未來不知道會不會有官方保證

  • docker的版本需要相同,不同版本可能不能加入群集,例如
    • docker 28.0.4 不能加到 docker 27.5.1。
    • docker 27.2.x 不能加到 docker 27.5.1。
  • docker swarm,官方雖然宣稱支援不同版本共存,但這指的是已加入的node,在不解綁的情況下原機升級。
  • 在swarm已有多版本共存的情況下,有一個node選擇完全脫離,它想再加入,也是會失敗的。可能這不是docker自身的限制,而是底層library的相容性問題。筆者在實測不同版本時,就得到這樣的error。docker credentials: cannot check peer: missing selected ALPN property

馬交野