docker - 使用 start-first 进行滚动更新时,docker swarm 会采取哪些步骤?
问题描述
当 docker swarm 在多个正在运行的容器实例上使用stop-first进行滚动更新时,它需要 - 除其他外 - 为连续的每个容器执行以下步骤:
从其内部负载均衡器中删除容器
向容器发送 SIGTERM 信号。
关于停止宽限期,发送一个 SIGKILL 信号。
启动一个新容器
将新容器添加到其内部负载均衡器
但是,当我想使用start-first进行滚动更新时,采取了哪些步骤?
旧容器和新容器是否可以同时通过负载均衡器使用(直到旧容器停止并从 lb 中删除)?
还是会先启动新容器,直到旧容器停止并从负载均衡器中删除,才将其添加到负载均衡器中?
后者将需要绑定到特定服务实例(容器)的进程。
解决方案
但是,当我想使用 start-first 进行滚动更新时,会采取哪些步骤?
基本上是相反的。新容器启动,添加到 LB,然后旧容器从 LB 中删除并发送关闭信号。
旧容器和新容器是否可以同时通过负载均衡器使用(直到旧容器停止并从 lb 中删除)?
是的。
提醒您,除非您(至少)在服务中启用了健康检查,否则其中大部分都不会是无缝的(或接近零停机时间)。我在这个 YouTube 视频中稍微谈到了这一点。
推荐阅读
- c++ - QLineEdit 中的选择以不寻常的方式工作
- spring-boot - IllegalStateException:应为字符串,但在第 1 行第 2 列路径 $ 处为 BEGIN_OBJECT;嵌套异常是 com.google.gson.JsonSyntaxException
- javascript - 如何将源作为拖动的矩形
- continuous-integration - 使用 apigee 设置 API 代理时如何修复 <"faultstring":"The Service is暂时不可用"> 错误?
- python - 了解 Swig 生成的 Python 文件
- python - 如何从通过 selenium 和 python 提交数据后刷新的网页中抓取数据?
- c# - 当我在 T4 模板中反映外部程序集的对象时,System.IO.FileNotFoundException
- c# - 有没有更好的方法在 asp.net 中向客户端发送文件?
- java - 我们如何在 spring 中使用带有 Http 基本身份验证的 rest api?
- websocket - 在没有服务器代码但有客户端 websocket 支持的情况下生成 JHipster 网关