?
このドキュメントでは、 php中國(guó)語(yǔ)ネットマニュアル リリース
在本教程的前一個(gè)步驟中,您縮放了服務(wù)實(shí)例的數(shù)量。在本教程的這一部分中,您將部署基于 Redis 3.0.6容器映像的服務(wù)。然后,您使用滾動(dòng)更新升級(jí)服務(wù)以使用 Redis 3.0.7容器映像。
1. 如果您還沒有,請(qǐng)打開一個(gè)終端并將 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ù)部署時(shí)配置滾動(dòng)更新策略。
--update-delay
標(biāo)志配置更新服務(wù)任務(wù)或多組任務(wù)之間的時(shí)間延遲。您可以將時(shí)間描述T
為秒數(shù)Ts
,分鐘數(shù)Tm
或小時(shí)數(shù)的組合Th
。因此10m30s
表示延遲10分30秒。
默認(rèn)情況下,調(diào)度程序一次更新1個(gè)任務(wù)。您可以通過此--update-parallelism
標(biāo)志來(lái)配置調(diào)度程序同時(shí)更新的最大服務(wù)任務(wù)數(shù)。
默認(rèn)情況下,當(dāng)對(duì)單個(gè)任務(wù)的更新返回RUNNING
狀態(tài)時(shí),調(diào)度程序調(diào)度另一個(gè)任務(wù)以更新,直到所有任務(wù)都更新。如果在任務(wù)更新期間的任何時(shí)間返回FAILED
,調(diào)度程序會(huì)暫停更新。您可以使用--update-failure-action
標(biāo)志來(lái)控制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)用滾動(dò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...
重新啟動(dòng)暫停的更新運(yùn)行docker service update <SERVICE-ID>
。例如:docker服務(wù)更新 redis 為避免重復(fù)某些更新失敗,您可能需要通過傳遞標(biāo)志到docker service update
來(lái)重新配置服務(wù)。
2. 運(yùn)行docker service ps <SERVICE-ID>
以觀看滾動(dòng)更新:
$ 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
。上面的輸出顯示滾動(dòng)更新完成后的狀態(tài)。
接下來(lái),了解如何排除群中的節(jié)點(diǎn)。