给定一组进行滚动更新的 Web 服务器(例如通过 kubernetes 滚动更新),如果在向其中一个处于终止等待状态的 Web 服务器发出 SIGTERM 信号之前几毫秒向该 Web 服务器发出请求,
- 服务器是否应该向客户端发出信号,告知它正在接收 SIGTERM 信号,并告诉客户端使用不同的(或相同的)网络地址(可能会有延迟)“再试一次”?
- 否则,服务器是否可以自动将请求重定向到已经卷起的 Web 服务器的另一个 pod/实例?
- 在 kubernetes 的特定情况下,是否可以将请求发送回服务并让其知道在至少一个 pod 推出后将其发送回?
答案1
当 pod 终止时,它会在收到请求后SIGTERM
和收到请求之前有一定的时间(默认为 30 秒)来完成请求。您可以配置更长的超时时间。在将请求发送到 pod之前SIGKILL
,还会调用一个preStop
钩子。请参阅SIGTERM
Kubernetes 最佳实践:优雅终止博客文章了解详情。
或者,您可以配置负载均衡器来重试失败的请求,但这仅适用于幂等请求。