Docker Swarm (滚动更新Update)
一,简介这么一个场景,当我们一个服务需要更新的时候,我们不希望在我们的更新期间,用户无法访问。我们期望的是用户无感知的更新。现实中比如Redis 版本升级 4.0.4 -> 4.0.5,假设一共有3个redis实例,我们希望的是,更新的时候先停止一个,在更新,更新完成这个之后,再停止另一个,以此类推,而不是一下子把所有的都停止。在服务特别多的时候,这么做无疑是痛苦的,正好Docker帮我..
·
一,简介
这么一个场景,当我们一个服务需要更新的时候,我们不希望在我们的更新期间,用户无法访问。我们期望的是用户无感知的更新。现实中比如Redis 版本升级 4.0.4 -> 4.0.5,假设一共有3个redis实例,我们希望的是,更新的时候先停止一个,在更新,更新完成这个之后,再停止另一个,以此类推,而不是一下子把所有的都停止。在服务特别多的时候,这么做无疑是痛苦的,正好Docker帮我们现实了。下面我们来演示一下。
二,更新演示
2.1,创建 redis 服务,版本 4.0.4
docker service create --name redis --replicas 3 redis:4.0.4
2.2,查看实例运行情况
docker service ps redis
2.3、升级 redis 服务到 4.0.5 版本
docker service update --image redis:4.0.5 redis
2.3、查看 redis 服务的任务列表
docker service ps redis
上图可以看出是以此更新
三,其他
1、任务或任务组之间更新延迟时间的设置
使用 --update-delay 来配置,单位 s、m、h,1小时20分30秒即 1h20m30s
2、任务调度器并行任务数量的配置
默认并行任务的数量为 1,如上案例所示,redis 服务有 3 个副本,在更新过程中,会有 3 个新的任务来执行 3 个副本的更新,由于最大并发任务执行量是 1,所以 3 个副本会依次更新。
可以通过 --update-parallelism 来配置最大任务并发执行数量。
3、任务更新失败的情况
默认情况下,当对单个任务的更新返回 RUNNING 状态时,调度程序开始更新另一个任务,直到所有任务都更新。如果在更新期间任务返回 FAILED 状态,则调度程序会暂停更新。
可以使用 docker service create 或 docker service update 的 --update-failure-action 来控制失败后的行为。
4、滚动升级的条件
服务平滑升级需要至少2个副本,单副本服务在更新过程中不可用。
更多推荐
已为社区贡献4条内容
所有评论(0)