Swarm mode 与滚动升级

现实环境中,当我们一个服务需要更新的时候,我们不希望在我们的更新期间,用户无法访问。我们期望的是用户无感知的更新。

什么是滚动更新

比如升级redis,从6.0.2--> 6.0.5.假设一共有3个redis实例,我们希望的是,更新的时候先停止一个,在更新,更新完成这个之后,再停止另一个,以此类推,而不是一下子把所有的都停止。

更新演示

在manager 上创建redis ,并设置10s 的更新延迟

$ docker service create \
  --replicas 3 \
  --name redis \
  --update-delay 10s \
  redis:6.0.2-alpine

在部署service时可以配置滚动更新策略。

  • --update-delay 定义滚动更新的时间间隔

    单位 s、m、h,1小时20分30秒即 1h20m30s

  • --update-parallelism 定义并行更新的副本数量

    默认情况下,调度程序一次更新1个任务。

  • --update-failure-action 定义容器启动失败之后所执行的动作

​ 默认情况下,当对单个任务的更新返回状态为时 RUNNING,调度程序将调度另一个任务进行更新,直到所有任务都被 更新为止。如果在更新期间的任何时候有任务返回FAILED,则调度程序将暂停更新。

查看redis 服务详情

$ docker service inspect --pretty redis
ID:             le65nwbn0ve1e6es35v3c1mw9
Name:           redis
Service Mode:   Replicated
 Replicas:      3
Placement:
UpdateConfig:
 Parallelism:   1
 Delay:         10s
 On failure:    pause
 Monitoring Period: 5s
 Max failure ratio: 0
 Update order:      stop-first
RollbackConfig:
 Parallelism:   1
 On failure:    pause
 Monitoring Period: 5s
 Max failure ratio: 0
 Rollback order:    stop-first
ContainerSpec:
 Image:         redis:6.0.2-alpine@sha256:b7e093c1a1cd040698fc28e4be453d8df1a46323fa4178d6d2d5fcb3bff88c10
 Init:          false
Resources:
Endpoint Mode:  vip

更新redis

$ docker service update --image redis:6.0.3-alpine redis

服务回退

现在假设我们发现 redis升级出现了一些问题,我们可以使用命令一键回退。

$ docker service rollback redis

默认只能回滚到上一次操作的状态,并不能连续回滚到指定操作

查看更新

docker service ps 命令查看 redis 服务详情。

$ docker service ps redis
ID                  NAME                IMAGE                NODE                DESIRED STATE       CURRENT STATE              ERROR               PORTS
lvn2qtaf74if        redis.1             redis:6.0.2-alpine   node2               Running             Running 26 minutes ago                         
sw5zvvzj27vq        redis.2             redis:6.0.3-alpine   node3               Running             Preparing 16 seconds ago                       
wsbl9ppdg1at         \_ redis.2         redis:6.0.2-alpine   node3               Shutdown            Shutdown 14 seconds ago                        
b9q04utfzl0m        redis.3             redis:6.0.2-alpine   node1               Running             Running 26 minutes ago

结果的输出详细记录了服务的部署、滚动升级、回退的过程。

官方文档

URL https://docs.docker.com/engine/swarm/swarm-tutorial/rolling-update/

results matching ""

    No results matching ""