在本教程的上一步中,您伸縮了服務實例的數量。在本部分中,您將基於Redis 3.0.6容器標籤部署服務。然後,通過滾動更新將服務升級爲使用Redis 3.0.7容器映像。
-
如果還沒有,請打開一個終端並SSH到運行管理器節點的計算機中。例如,本教程使用名爲
manager1
的計算機。 -
將Redis標記部署到羣集,並以10秒鐘的更新延遲配置羣集。請注意,以下示例顯示了較舊的Redis標記:
$ docker service create \ --replicas 3 \ --name redis \ --update-delay 10s \ redis:3.0.6 0u6a4s31ybk7yw2wyvtikmu50
您在服務部署時配置滾動更新策略。
該
--update-delay
標誌配置在更新一個服務任務或一組任務之間的時間延遲。您可以將時間數T
描述爲秒Ts
,分鐘Tm
或小時Th
的組合。因此10m30s
表示延遲10分鐘30秒。默認情況下,調度程序一次更新1個任務。您可以傳遞該
--update-parallelism
標誌來配置計劃程序同時更新的最大服務任務數。默認情況下,當對單個任務的更新返回狀態爲時
RUNNING
,調度程序將調度另一個任務進行更新,直到所有任務都被更新爲止。如果在更新期間的任何時候有任務返回FAILED
,則調度程序將暫停更新。您可以使用--update-failure-action標誌來控制docker service create
或dockerservice update的
行爲。 -
檢查
redis
服務:$ docker service inspect --pretty redis ID: 0u6a4s31ybk7yw2wyvtikmu50 Name: redis Service Mode: Replicated Replicas: 3 Placement: Strategy: Spread UpdateConfig: Parallelism: 1 Delay: 10s ContainerSpec: Image: redis:3.0.6 Resources: Endpoint Mode: vip
-
現在,您可以更新
redis
的容器映像。羣集管理器根據以下UpdateConfig
策略將更新應用於節點:$ docker service update --image redis:3.0.7 redis redis
調度程序默認情況下應用滾動更新,如下所示:
- 停止第一個任務。
- 調度已停止任務的更新。
- 啓動更新任務後的容器。
- 如果對任務的更新返回
RUNNING
,請等待指定的延遲時間,然後開始下一個任務。 - 如果在更新期間的任何時間有任務返回
FAILED
,請暫停更新。
-
運行
docker service inspect --pretty redis
以查看所需狀態的新圖像:$ docker service inspect --pretty redis ID: 0u6a4s31ybk7yw2wyvtikmu50 Name: redis Service Mode: Replicated Replicas: 3 Placement: Strategy: Spread UpdateConfig: Parallelism: 1 Delay: 10s ContainerSpec: Image: redis:3.0.7 Resources: Endpoint Mode: vip
下面
service inspect
的輸出顯示您的更新是否由於失敗而暫停:$ docker service inspect --pretty redis ID: 0u6a4s31ybk7yw2wyvtikmu50 Name: redis ...snip... Update status: State: paused Started: 11 seconds ago Message: update paused due to failure or early termination of task 9p7ith557h8ndf0ui9s0q951b ...snip...
要重新啓動暫停的更新,請運行
docker service update <SERVICE-ID>
。例如:docker service update redis
爲避免重複某些更新失敗,您可能需要將passing標誌傳遞到
docker service update來
重新配置服務。 -
運行
docker service ps <SERVICE-ID>
以查看滾動更新:$ docker service ps redis NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR redis.1.dos1zffgeofhagnve8w864fco redis:3.0.7 worker1 Running Running 37 seconds \_ redis.1.88rdo6pa52ki8oqx6dogf04fh redis:3.0.6 worker2 Shutdown Shutdown 56 seconds ago redis.2.9l3i4j85517skba5o7tn5m8g0 redis:3.0.7 worker2 Running Running About a minute \_ redis.2.66k185wilg8ele7ntu8f6nj6i redis:3.0.6 worker1 Shutdown Shutdown 2 minutes ago redis.3.egiuiqpzrdbxks3wxgn8qib1g redis:3.0.7 worker1 Running Running 48 seconds \_ redis.3.ctzktfddb2tepkr45qcmqln04 redis:3.0.6 mmanager1 Shutdown Shutdown 2 minutes ago
在Swarm更新所有任務之前,您可以看到其中一些正在運行,
redis:3.0.6
而另一些正在運行redis:3.0.7
。上面顯示滾動更新完成後的輸出狀態。