Kubernetes 需要多长时间才能从 Endpoints 中删除终止的 pod?

How long does it take for Kubernetes to remove a terminating pod from Endpoints?

我们在项目中使用 Spring Boot in Kubernetes。最近,我们决定为我们的应用程序添加优雅关闭,以确保无缝部署,并确保在 pod 终止期间无论出于何种原因,请求都不会失败。 尽管 Spring Boot 提供了优雅的关闭,但由于 Kubernetes 开始从端点删除 pod 并同时向 pod 并行发送 SIGTERM 信号,因此似乎仍有可能请求失败。 引用自 kubernetes documentation:

At the same time as the kubelet is starting graceful shutdown, the control plane removes that shutting-down Pod from Endpoints (and, if enabled, EndpointSlice) objects where these represent a Service with a configured selector.

对此也有更详细的描述 here。那里也提供了解决方案,即

you can add a sleep in a preStop hook of the pod spec and, of course, configure that sleep to be whatever makes sense for your use case :

在提供的示例中,此睡眠配置为 10 秒,但我想知道该值的合理值是多少,这样 pod 的终止才不会被不必要地延迟?

谢谢。

这似乎取决于您的喜好,但看起来 5-10 秒的睡眠时间是推荐范围:

In “Kubernetes in Action”, Lukša recommends 5–10 seconds https://blog.gruntwork.io/delaying-shutdown-to-wait-for-pod-deletion-propagation-445f779a8304