Docker 服务在任务实际启动之前路由网络 - 零停机时间



>我目前正在运行Docker版本18.03.1-ce,在多个节点上构建9ee9f40。我的设置是一个nginx服务和多个Java restful API服务,运行在野蝇集群中。 对于我的 API 服务,我配置了一个简单的运行状况检查来确定我的 API 任务是否实际启动:

HEALTHCHECK --interval=5m --timeout=3s 
--retries=2 --start-period=1m  
CMD curl -f http://localhost:8080/api/healthcheck || exit 1

但即使使用 HealthCheck,我的 nginx 有时也会出错(由 API 仍未完全启动的事实引起(无法处理 rest 请求。

到目前为止,我设法开始工作的唯一解决方案是手动将--开始期增加到更长的时间。

docker 服务负载均衡器如何决定何时开始将请求路由到新服务?

使用 --start-period设置更长的时间目前是防止负载均衡器将流量重定向到尚未准备好接收流量的任务或我遗漏某些内容的唯一方法吗?

我已经看到了这样的"蓝绿"部署答案,您可以在其中管理零停机时间,但我仍然希望这可以通过使用 docker 服务来完成。

路由网格将在"第一次成功的运行状况检查"时开始路由流量,即使将来的运行状况检查失败也是如此。

无论您在 HEALTHCHECK 命令中输入什么,它只需要在真正准备就绪时才开始返回"exit 0"。如果它过早返回良好的结果,那么这不是一个好的运行状况检查命令。

如果 swarm 在这段时间内尚未收到成功的运行状况检查,--start-period只会告诉 swarm 何时终止任务,但不会导致在启动期间忽略绿色运行状况检查。

最新更新