我正在维护几个Spring Boot Web服务应用程序(战争),目前在四个相同的Tomcat实例上运行。
前面的负载均衡器可以使交通流量分散到这四个实例中。
我们进行手动滚动部署。
在关闭实例进行升级之前,我们会将新的流量转移到该实例之外。然后,在终止应用程序之前,我们为活动的请求提供2分钟的宽限期。
现在,我正在将这些应用程序迁移到OpenShift。一切都进行得很好,除了我很难使滚动部署工作满意为止。
谷歌搜索寻求帮助,我基于以下方法找到了解决方案:
乍一看这似乎可行,但事实证明,即使ShutdownHook尚未完成,Livenes探测器有时仍会插入并杀死吊舱。
如果我删除了livenes探针,那么它可以工作,但我认为这不是真正的解决方案。
实验告诉我,一旦ShutdownHook暂停Tomcat连接器, 执行器/运行状况端点以“连接被拒绝”响应-这是有道理的,但不是我所需要的,因为它使活动性探针认为应用程序已死。
我曾尝试将执行器端点移动到另一个端口号,但这甚至更糟,因为它们现在在关闭开始时立即停止响应。
我认为这是由于执行器端点现在属于与我的主连接器不同的Tomcat连接器引起的,并且不在我的主Spring应用程序上下文的控制之下。
你们中的任何人都可以告诉我如何在单独的端口号上停止执行器端点的关闭吗?
或者其他任何建议-允许我:
答案 0 :(得分:1)
鉴于您只是想防止流量在执行正常关机时进入您的Pod,可以使用较低的“就绪”探测超时,如果超时,则将其从可用Pod列表中删除。然后增加活动探测超时时间,以使吊舱有足够的时间优雅地关闭,同时仍然保留备用,以防吊舱真正卡住。