1. 程式人生 > >07_apply rolling updates to a service

07_apply rolling updates to a service

docker swarm

在上一個小節,我們在一個服務中,擴容了多個實例。

在這個小節,我們來部署一個服務,基於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


默認的滾動更新步驟如下:

  1. 停止第一個任務

  2. 計劃更新停止的任務

  3. 啟動更新完畢的任務

  4. 如果更新的任務返回的是running,等待下一個延遲周期,更新下一個任務。

  5. 如果更新返回的是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