天天看點

如何滾動更新 Service?- 每天5分鐘玩轉 Docker 容器技術(102)

在前面的實驗中,我們部署了多個副本的服務,本節将讨論如何滾動更新每一個副本。

滾動更新降低了應用更新的風險,如果某個副本更新失敗,整個更新将暫停,其他副本則可以繼續提供服務。同時,在更新的過程中,總是有副本在運作的,是以也保證了業務的連續性。

下面我們将部署三副本的服務,鏡像使用 httpd:2.2.31,然後将其更新到 httpd:2.2.32。

建立服務:

将 service 更新到 httpd:2.2.32:

<code>--image</code> 指定新的鏡像。

Swarm 将按照如下步驟執行滾動更新:

停止第一個副本。

排程任務,選擇 worker node。

在 worker 上用新的鏡像啟動副本。

如果副本(容器)運作成功,繼續更新下一個副本;如果失敗,暫停整個更新過程。

<code>docker service ps</code> 檢視更新結果。

三個副本都已經更新到 httpd:2.2.32。

預設配置下,Swarm 一次隻更新一個副本,并且兩個副本之間沒有等待時間。我們可以通過 <code>--update-parallelism</code> 設定并行更新的副本數目,通過 <code>--update-delay</code> 指定滾動更新的間隔時間。

比如執行如下指令:

service 增加到六個副本,每次更新兩個副本,間隔時間一分半鐘。

<code>docker service inspect</code> 檢視 service 的目前配置。

<code>docker service ps</code> 確定6個副本處于正常狀态。

執行如下指令,将鏡像更新到 httpd:2.4.16。

等待一會,檢視更新的狀态。

有4個副本已經更新到 httpd:2.4.16,從啟動時間看,确實是分了兩批進行,之間間隔90秒,每次更新兩個副本。

Swarm 還有個友善的功能是復原,如果更新後效果不理想,可以通過 <code>--rollback</code> 快速恢複到更新之前的狀态。

service 所有副本都已經恢複到 httpd:2.2.32。

請注意,<code>--rollback</code> 隻能復原到上一次執行 <code>docker service update</code> 之前的狀态,并不能無限制地復原。

滾動更新就讨論到這裡,下一節我們學習 Docker Swarm 如何管理資料。

書籍:

1.《每天5分鐘玩轉Docker容器技術》

<a href="https://item.jd.com/16936307278.html" target="_blank">https://item.jd.com/16936307278.html</a>

2.《每天5分鐘玩轉OpenStack》

<a href="https://item.jd.com/12086376.html" target="_blank">https://item.jd.com/12086376.html</a>