Docker Swarm - 服務(wù)滾動(dòng)部署

文/Anoyi

服務(wù)平滑升級(jí),即服務(wù)不停機(jī)更新,客戶端無(wú)感知。

? 案例演示:Redis 版本升級(jí) 4.0.4 -> 4.0.5

1、創(chuàng)建 overlay 網(wǎng)絡(luò)

docker network create \
  --attachable \
  --driver overlay \
  redis_network

說(shuō)明:添加 --attachable 是為了待會(huì) redis-cli 的連接,生產(chǎn)環(huán)境建議不加

2、創(chuàng)建 redis 服務(wù),版本 4.0.4

docker service create \
  --name redis \
  --replicas 2 \
  --network redis_network \
  redis:4.0.4

3、使用 redis-cli 連接到 redis 服務(wù)

新建一個(gè)終端窗口,執(zhí)行:

docker run -it --network redis_network --rm redis redis-cli -h redis -p 6379

說(shuō)明:此處用的 latest 版本的 redis 鏡像客戶端,與服務(wù)端版本無(wú)關(guān)

4、升級(jí) redis 服務(wù)到 4.0.5 版本

執(zhí)行以下命令,同時(shí)注意觀察 redis-cli 連接的變化:

docker service update --image redis:4.0.5 redis

現(xiàn)象:整個(gè)升級(jí)過(guò)程 redis-cli 沒(méi)有斷開(kāi)連接,說(shuō)明升級(jí)過(guò)程是平滑的,不間斷的。

5、查看 redis 服務(wù)的任務(wù)列表

docker service ps redis

? 附加內(nèi)容

1、任務(wù)或任務(wù)組之間更新延遲時(shí)間的設(shè)置

使用 --update-delay 來(lái)配置,單位 s、m、h,1小時(shí)20分30秒即 1h20m30s

2、任務(wù)調(diào)度器并行任務(wù)數(shù)量的配置

默認(rèn)并行任務(wù)的數(shù)量為 1,如上案例所示,redis 服務(wù)有 2 個(gè)副本,在更新過(guò)程中,會(huì)有 2 個(gè)新的任務(wù)來(lái)執(zhí)行 2 個(gè)副本的更新,由于最大并發(fā)任務(wù)執(zhí)行量是 1,所以 2 個(gè)副本會(huì)依次更新。

可以通過(guò) --update-parallelism 來(lái)配置最大任務(wù)并發(fā)執(zhí)行數(shù)量。

3、任務(wù)更新失敗的情況

默認(rèn)情況下,當(dāng)對(duì)單個(gè)任務(wù)的更新返回 RUNNING 狀態(tài)時(shí),調(diào)度程序開(kāi)始更新另一個(gè)任務(wù),直到所有任務(wù)都更新。如果在更新期間任務(wù)返回 FAILED 狀態(tài),則調(diào)度程序會(huì)暫停更新。

可以使用 docker service createdocker service update--update-failure-action 來(lái)控制失敗后的行為。

4、平滑升級(jí)的條件

服務(wù)平滑升級(jí)需要至少2個(gè)副本,單副本服務(wù)在更新過(guò)程中不可用。

? 相關(guān)資料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。