?
This document uses PHP Chinese website manual Release
在本教程的前一個步驟中,您縮放了服務(wù)實(shí)例的數(shù)量。在本教程的這一部分中,您將部署基于 Redis 3.0.6容器映像的服務(wù)。然后,您使用滾動更新升級服務(wù)以使用 Redis 3.0.7容器映像。
1. 如果您還沒有,請打開一個終端并將 ssh 放入運(yùn)行管理器節(jié)點(diǎn)的機(jī)器中。例如,本教程使用名為manager1
的計(jì)算機(jī)。
2. 將 Redis 3.0.6部署到群集,并配置10秒更新延遲的群集:
$ docker service create \ --replicas 3 \ --name redis \ --update-delay 10s \ redis:3.0.6 0u6a4s31ybk7yw2wyvtikmu50
您可以在服務(wù)部署時配置滾動更新策略。
--update-delay
標(biāo)志配置更新服務(wù)任務(wù)或多組任務(wù)之間的時間延遲。您可以將時間描述T
為秒數(shù)Ts
,分鐘數(shù)Tm
或小時數(shù)的組合Th
。因此10m30s
表示延遲10分30秒。
默認(rèn)情況下,調(diào)度程序一次更新1個任務(wù)。您可以通過此--update-parallelism
標(biāo)志來配置調(diào)度程序同時更新的最大服務(wù)任務(wù)數(shù)。
默認(rèn)情況下,當(dāng)對單個任務(wù)的更新返回RUNNING
狀態(tài)時,調(diào)度程序調(diào)度另一個任務(wù)以更新,直到所有任務(wù)都更新。如果在任務(wù)更新期間的任何時間返回FAILED
,調(diào)度程序會暫停更新。您可以使用--update-failure-action
標(biāo)志來控制docker service create
或docker service update
行為。
1. 檢查redis
服務(wù):
$ 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
2. 現(xiàn)在您可以更新redis
容器圖像了。swarm manager 根據(jù)UpdateConfig
策略將更新應(yīng)用于節(jié)點(diǎn):
$ docker 服務(wù)更新--image redis:3.0.7 redis redis
調(diào)度程序默認(rèn)應(yīng)用滾動更新,如下所示:
- Stop the first task.- Schedule update for the stopped task.- Start the container for the updated task.- If the update to a task returns `RUNNING`, wait for the specified delay period then start the next task.- If, at any time during the update, a task returns `FAILED`, pause the update.
1. 運(yùn)行docker service inspect --pretty redis
,看看在期望的狀態(tài)的新的圖像:$ 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...
重新啟動暫停的更新運(yùn)行docker service update <SERVICE-ID>
。例如:docker服務(wù)更新 redis 為避免重復(fù)某些更新失敗,您可能需要通過傳遞標(biāo)志到docker service update
來重新配置服務(wù)。
2. 運(yùn)行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 更新所有任務(wù)之前,您可以看到有些正在運(yùn)行redis:3.0.6
而另一些正在運(yùn)行redis:3.0.7
。上面的輸出顯示滾動更新完成后的狀態(tài)。
接下來,了解如何排除群中的節(jié)點(diǎn)。