https://cloud.google.com/run/docs/reference/container-contract
然后,容器实例接收一个 SIGTERM 信号,指示关闭之前10 秒周期的开始(使用 SIGKILL 信号)。在此期间,容器实例将被分配CPU并计费。如果容器实例没有捕获 SIGTERM 信号,它将立即关闭。
答:如果我将最大实例数设置为 1 ,那么在我的容器进程捕获 SIGTERM 且处于“10 秒关闭期”后,新请求到达 Cloud Run 代理时会发生什么情况?
我假设HTTP请求将等到关闭完成,然后Cloud Run将启动一个新的新容器来处理HTTP请求?
这有保证吗?
我之所以这么问,是因为我的容器假定它是唯一改变网络资源的进程,并且两个容器会创建竞争条件(或在 SIGTERM 事件之后再处理一个 HTTP 请求)。
https://cloud.google.com/blog/topics/developers-practitioners/graceful-shutdowns-cloud-run-deep-dive
但是,有时您可能会在容器由于底层基础设施原因而关闭之前收到此信号,并且您的容器可能仍具有正在进行的连接。因此,并不总是能保证优雅终止。
B:这种情况有多常见?容器总是收到 SIGTERM 信号吗?
我可以等到http_requests_outstanding = 0 AND SIGTERM_has_been_triggered运行关闭代码(此时不会再将 HTTP 请求转发到实例)吗?
如果您收到 SIGTERM,则意味着您的容器超出了可路由流量。如果收到新请求,则会创建一个新实例并将请求路由到该实例。
大多数情况下,当自动缩放程序选择卸载实例时,会发送 SIGTERM。然而,有时,底层基础设施不会选择关闭,而是关闭(断电情况、服务器物理故障、CPU 中断……所有这些类型的现实/物理世界问题),这完全没问题。那时,SIGTERM 可能不会被发送。
| 归档时间: |
|
| 查看次数: |
638 次 |
| 最近记录: |