2

We are using Spring Boot in Kubernetes in our project. Recently we decided to add graceful shutdown for our application in order to ensure seamless deployments and make sure no requests are failed during pod terminations for whatever reason. Even though Spring Boot provides graceful shutdown, it seems there is still a probability that requests may fail due to the fact that Kubernetes starts removing a pod from endpoints and sends the SIGTERM signal to the pod at the same time in parallel. Quote from 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.

This is aldso described in more detail here. The solution is provided there as well, which is

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 :

enter image description here

In the example provided this sleep is configured to be 10 seconds, but I'm wondering what is the reasonable value for that, so the pod's termination is not unnecessarily delayed?

Thanks.

ZeeG
  • 33
  • 7

1 Answers1

2

It seems like this might be up to your preferences but it looks like the 5-10 seconds sleep is a recommended range:

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

Jakub Siemaszko
  • 668
  • 3
  • 8
  • 1
    Well, it seems that the time is not static and there is a lot of variables involved in the eviction process, so I guess this is the closest answer we can get. Thanks a lot! – ZeeG Sep 15 '21 at 12:00