处理Cloud Run容器关闭

时间:2019-12-26 16:31:40

标签: google-cloud-platform google-cloud-run

在编写Cloud Run服务时,我们将开发一个容器,该容器侦听PORT环境变量以处理传入的HTTP请求。该容器实例可以处理并处理该请求,然后在结束原始请求后会保留更长的时间,以防万一还有其他请求到达。如果没有其他要求,则GCP 关闭容器。我在这方面有一个疑问。

是否有钩子,信号或其他指示表明容器正在容器内关闭?

在我的示例中,我的容器想要干净地结束。也许它想关闭连接或执行一些快速的缓存刷新。

2 个答案:

答案 0 :(得分:2)

here已找到有关Cloud Run的大量常见问答的常见问题解答。在该FAQ中有一个内容为:

  

Cloud Run服务的终止信号是什么?

     

当前,   Cloud Run终止容器,同时通过unix信号将其缩放为零   9(SIGKILL)。 SIGKILL不能被应用程序捕获(捕获)。   因此,您的应用程序应该可以被突然终止。

一个相关且重要的条目也显示为:

  

我的服务何时会扩展为零?

     

Cloud Run不保证将其保留多长时间。   服务“热情”。这取决于容量和Google的   实施细节。

     

某些用户看到他们的服务可以保持长达一个小时甚至更长的时间。


意见

我觉得很有趣,这个故事似乎是直接的SIGKILL。如果我们将Docker用作容器环境的基础,则可以阅读有关docker stop的信息,这似乎是彻底停止容器的方式。在它自己的描述中说:

  

容器内的主进程将收到SIGTERM,然后   宽限期,SIGKILL。

这似乎表明对于正常 Docker容器停止,运行该容器的进程将收到一个信号。

答案 1 :(得分:0)

SIGTERM(unix信号15)现在已发送到Cloud Run服务,如果您在代码中处理了信号,则将有10秒的时间来处理关闭任何资源等情况。

请参见here

容器实例可以随时关闭。当一个容器 需要关闭实例,将新的传入请求路由到 给定当前正在处理的其他实例和请求的时间 去完成。然后,容器实例会收到SIGTERM信号 指示关闭前10秒钟的时间开始 (带有SIGKILL信号)。在此期间,容器实例为 分配的CPU并计费。如果容器实例未捕获 SIGTERM信号,立即关闭。

enter image description here

(来自here的代码图片)