服务平滑升级,即服务不停机更新,客户端无感知.
► 案例演示:Redis 版本升级 4.0.4 -> 4.0.5
1,创建 overlay 网络
说明:添加 --attachable 是为了待会 redis-cli 的连接,生产环境建议不加
docker network create \
--attachable \
--driver overlay \
redis_network
2,创建 redis 服务,版本 4.0.4
3,使用 redis-cli 连接到 redis 服务
docker service create \
--name redis \
--replicas 2 \
--network redis_network \
redis:4.0.4
新建一个终端窗口,执行:
docker run - it--network redis_network--rm redis redis - cli - h redis - p 6379
说明:此处用的 latest 版本的 redis 镜像客户端,与服务端版本无关
4,升级 redis 服务到 4.0.5 版本
执行以下命令,同时注意观察 redis-cli 连接的变化:
docker service update--image redis: 4.0.5 redis
现象:整个升级过程 redis-cli 没有断开连接,说明升级过程是平滑的,不间断的.
5,查看 redis 服务的任务列表
docker service ps redis
► 附加内容
1,任务或任务组之间更新延迟时间的设置
使用 --update-delay 来配置,单位 s,m,h,1 小时 20 分 30 秒即 1h20m30s
2,任务调度器并行任务数量的配置
默认并行任务的数量为 1,如上案例所示,redis 服务有 2 个副本,在更新过程中,会有 2 个新的任务来执行 2 个副本的更新,由于最大并发任务执行量是 1,所以 2 个副本会依次更新.
可以通过
--update - parallelism
来配置最大任务并发执行数量.
3,任务更新失败的情况
默认情况下,当对单个任务的更新返回 RUNNING 状态时,调度程序开始更新另一个任务,直到所有任务都更新.如果在更新期间任务返回 FAILED 状态,则调度程序会暂停更新.
可以使用
docker service create
或
docker service update
的
--update - failure - action
来控制失败后的行为.
► 相关资料
英文文档 https://docs.docker.com/engine/swarm/swarm-tutorial/rolling-update/
Docker Swarm 系列: https://www.jianshu.com/c/468a83a0c881
来源: http://www.jianshu.com/p/3075df95cec8