码迷,mamicode.com
首页 > 移动开发 > 详细

07_apply rolling updates to a service

时间:2017-06-27 22:09:16      阅读:241      评论:0      收藏:0      [点我收藏+]

标签: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

标签:docker   swarm   

原文地址:http://binuu.blog.51cto.com/801317/1942406

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!