首页 > 解决方案 > 使用 start-first 进行滚动更新时,docker swarm 会采取哪些步骤?

问题描述

当 docker swarm 在多个正在运行的容器实例上使用stop-first进行滚动更新时,它需要 - 除其他外 - 为连续的每个容器执行以下步骤:

  1. 从其内部负载均衡器中删除容器

  2. 向容器发送 SIGTERM 信号。

  3. 关于停止宽限期,发送一个 SIGKILL 信号。

  4. 启动一个新容器

  5. 将新容器添加到其内部负载均衡器

但是,当我想使用start-first进行滚动更新时,采取了哪些步骤?

旧容器和新容器是否可以同时通过负载均衡器使用(直到旧容器停止并从 lb 中删除)?

还是会先启动新容器,直到旧容器停止并从负载均衡器中删除,才将其添加到负载均衡器中?

后者将需要绑定到特定服务实例(容器)的进程。

标签: dockerswarm

解决方案


但是,当我想使用 start-first 进行滚动更新时,会采取哪些步骤?

基本上是相反的。新容器启动,添加到 LB,然后旧容器从 LB 中删除并发送关闭信号。

旧容器和新容器是否可以同时通过负载均衡器使用(直到旧容器停止并从 lb 中删除)?

是的。

提醒您,除非您(至少)在服务中启用了健康检查,否则其中大部分都不会是无缝的(或接近零停机时间)。我在这个 YouTube 视频中稍微谈到了这一点。


推荐阅读