Kubernetes pods 收到 SIGTERM 后还会收到请求吗?

Mr.*_*nko 5 kubernetes

我想在 Kubernetes Pod 中实现正常关闭。我知道我需要监听 SIGTERM,它表示关闭程序的开始。但是当我收到它时我该怎么做?

至少我必须在退出之前等待所有正在运行的请求完成。但是 Pod 收到 SIGTERM 后还能收到新的请求吗?(它使用服务公开。)我找不到任何关于此的明确文档。

文档状态:

Pod 从服务的端点列表中删除,不再被视为复制控制器的运行 Pod 集的一部分。缓慢关闭的 Pod 可以继续为流量提供服务,因为负载均衡器(如服务代理)将它们从轮换中移除。

所以这似乎意味着新请求仍然可以进来。那么在正常终止之前我应该​​继续期待新请求多长时间?我是否只是忽略 SIGTERM,继续照常处理请求并等待最终的 SIGKILL?

我想确保未来的准备检查失败,然后等待比终止前发生的时间长可能会起作用?

我在 Kubernetes 1.2.5 上,如果这有什么不同的话,我特别是在谈论滚动更新,但通常也会缩小复制控制器。

Mr.*_*nko 3

我进行了一些实验来弄清楚到底发生了什么。

启动关闭后, Pod短暂(<1 秒)继续接收请求,因此您需要捕获 SIGTERM 或安装 preStop 挂钩,以便可以等待它们(并完成当前请求的服务)。

但是,一旦启动关闭,就绪探针就不再重要,您不需要更改其状态来停止接收请求。(但在此之前,失败的就绪性探测导致您的 Pod 不再接收流量。)