问题描述
创建Container App时,可以设置终结一个App的副本的方式,通过设置 Termination grace period值【Time given to a replica after it is sent SIGTERM before it is terminated. (Default: 30 seconds)】来优雅的关闭应用。
只是,在通过观察副本的启用和关闭日志,有时候发现当最后一个请求处理完成后,或者没有处理完成的情况下,副本依旧存在关闭的情况。 Termination grace period的设置并没有完全的遵守。
问题解答
terminationGracePeriodSeconds : [Termination grace period]: 这个参数的定义是从pod收到terminated signal到最终shutdown的最大时间,这段时间是给pod中的application 缓冲时间用来处理链接关闭,应用清理缓存。
terminationGracePeriodSeconds
设置最大值600 秒(10 分钟)。如果应用程序需要超过 10 分钟或更长时间来清理逻辑,这可能会带来挑战,特别是当应用程序扩展到许多副本(甚至只是几个副本)时。强烈建议围绕清理逻辑重新审视应用程序设计,以减少这种情况:此外,由于 Pod(以及其中的容器)仍然存在,如果许多 Pod 一次等待终止几分钟 - 并且创建了新的 Pod/副本,这可能会开始出现资源争用问题 - 取决于有多少 Pod资源已经存在于环境中
下面概述了 Pod 生命周期中的情况 - “关闭应用程序的窗口”是用户在
terminationGracePeriodSeconds
中定义的数字 - 并在发送SIGKILL
之前显示用于清理逻辑的窗口:
参考资料
容器应用程序的优雅终止 :
https://azureossd.github.io/2024/05/27/Graceful-termination-on-Container-Apps/ 或 https://www.cnblogs.com/lulight/articles/18553596
【END】
当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!