【Azure Container App】Container Apps 设置延迟删除 (terminationGracePeriodSeconds) 的解释 - LuBu0505/My-Code GitHub Wiki

问题描述

创建Container App时,可以设置终结一个App的副本的方式,通过设置 Termination grace period值【Time given to a replica after it is sent SIGTERM before it is terminated. (Default: 30 seconds)】来优雅的关闭应用。 image.png

只是,在通过观察副本的启用和关闭日志,有时候发现当最后一个请求处理完成后,或者没有处理完成的情况下,副本依旧存在关闭的情况。 Termination grace period的设置并没有完全的遵守。 image.png

问题解答

terminationGracePeriodSeconds : [Termination grace period]: 这个参数的定义是从pod收到terminated signal到最终shutdown的最大时间,这段时间是给pod中的application 缓冲时间用来处理链接关闭,应用清理缓存。 

terminationGracePeriodSeconds设置最大值600 秒(10 分钟)。如果应用程序需要超过 10 分钟或更长时间来清理逻辑,这可能会带来挑战,特别是当应用程序扩展到许多副本(甚至只是几个副本)时。强烈建议围绕清理逻辑重新审视应用程序设计,以减少这种情况:

 此外,由于 Pod(以及其中的容器)仍然存在,如果许多 Pod 一次等待终止几分钟 - 并且创建了新的 Pod/副本,这可能会开始出现资源争用问题 - 取决于有多少 Pod资源已经存在于环境中

下面概述了 Pod 生命周期中的情况 - **“关闭应用程序的窗口”**是用户在terminationGracePeriodSeconds中定义的数字 - 并在发送SIGKILL之前显示用于清理逻辑的窗口: image.png

参考资料

容器应用程序的优雅终止 :

 https://azureossd.github.io/2024/05/27/Graceful-termination-on-Container-Apps/  或 https://www.cnblogs.com/lulight/articles/18553596

【END】

当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!