07_apply rolling updates to a service
在上一個小節,我們在一個服務中,擴容了多個實例。
在這個小節,我們來部署一個服務,基於redis3.0.6容器鏡像。
然後通過滾動升級,升級到redis3.0.7
docker machine ssh manager1
在swarm中部署 redis3.0.6 ,並配置swarm 10秒的更新延遲
$ docker service create --replicas 3 --name redis --update-delay 10s redis:3.0.6 0u6a4s31ybk7yw2wyvtikmu50
你可以在部署的時候配置滾動更新的策略
--update-delay 參數用來配置更新服務或者配置任務的延遲時間
T 用來描述 時間的值
Ts 表示多少秒
Tm 表示多少分鐘
Th 表示多少小時
例如 10m30s 表示 10分鐘30秒的延遲
默認情況下,計劃任務在同一時間只更新一個任務。
--update-parallelism 參數可以配置同時更新服務的最大數量
默認情況下,當一個更新一個任務,返回的狀態是 running .計劃任務會計劃更新下一個,直到所有的任務都更新完畢。如果有其他更新的任務返回 failed ,計劃任務將會停止該更新。
你可以通過 --update-failure-action 來控制該行為。
在使用 docker service create 或者是 docker service update 的時候
$ 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
現在你可以更新swarm 集群中的鏡像了
$ docker service update --image redis:3.0.7 redis redis
默認的滾動更新步驟如下:
停止第一個任務
計劃更新停止的任務
啟動更新完畢的任務
如果更新的任務返回的是running,等待下一個延遲周期,更新下一個任務。
如果更新返回的是failed ,停止更新
$ 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
如果更新失敗,會返回如下的信息:
$ 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
為了避免重復更新失敗,你可以需要通過下列的參數來重新配置服務
docker service updatte .
通過以下命令來查看滾動更新
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
在所有任務被更新之前,你可以看到有些任務是跑redis:3.0.6, 有些是 redis:3.0.7
本文出自 “清風柳絮” 博客,請務必保留此出處http://binuu.blog.51cto.com/801317/1942406
07_apply rolling updates to a service