我们在项目中使用 Kubernetes 中的 Spring Boot。最近我们决定为我们的应用程序添加优雅关闭,以确保无缝部署,并确保在 pod 终止期间无论出于何种原因都没有请求失败。尽管 Spring Boot 提供了优雅的关闭,但由于 Kubernetes 开始从端点删除 pod 并同时向 pod 并行发送 SIGTERM 信号,因此请求似乎仍有可能失败。引用 kubernetes文档:
在 kubelet 开始正常关闭的同时,控制平面从 Endpoints(以及,如果启用的话,EndpointSlice)对象中删除正在关闭的 Pod,这些对象表示具有配置选择器的服务。
这也在此处进行了更详细的描述。那里也提供了解决方案,即
您可以在 pod 规范的 preStop 挂钩中添加睡眠,当然,将睡眠配置为对您的用例有意义的任何内容:
在示例中,此睡眠被配置为 10 秒,但我想知道它的合理值是多少,所以 pod 的终止不会不必要地延迟?
谢谢。