我有一个应用程序将 TCP 连接转发到另一个应用程序。目前,我正在尝试使此应用程序实现零下载部署,以便我可以随时部署新版本,但有一个问题我还没有找到解决办法。
我无法终止 TCP 会话,其中一些会话至少会持续 5 分钟或 2 小时。我想知道解决这个问题的通用方法是什么,当部署我的软件的新版本时,它将被新连接占用,而不会终止以前的连接。
我知道使用 docker 你可以修改容器接收的信号并处理它们,但是我仍然看到在部署的某个时间点之后,它们发送“docker rm”命令来删除容器(目前我正在使用 Docker Swarm 进行测试并且我假设 Kubernetes 也会做类似的事情)。
这样是否需要很长时间进行部署或使用蓝绿方案?
谢谢,
答案1
滚动升级。部署事物的新版本。停止使用旧版本。
实施可能涉及正常停止脚本,或设置比最长会话更长的超时时间。在 Kubernetes 上,尝试terminationGracePeriodSeconds,并确保处理 SIGTERM。