07_apply rolling updates to a service

得意犹堪夸世俗,诏黄新湿字如鸦。这篇文章主要讲述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 参数用来配置更新服务或者配置任务的延迟时间
【07_apply rolling updates to a service】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

    推荐阅读