我正在运行启用了 KEDA 的队列触发 Azure 函数,其 terminationGracePeriodSeconds
已设置为 900
秒(15 分钟)。函数执行时间在 30 秒到 600 秒(10 分钟)之间变化。所以 15 分钟的宽限期似乎是合理的。
是否有可能在发出 SIGTERM 后,如果还有一些宽限期,pod 会在完成当前请求后接受新请求。
我遇到过函数执行突然停止,消息未处理的情况。
以下是部署中的规范:
spec:
containers:
- image: ####.azurecr.io/azurefunctionqueuetriggeredk8s
name: queuetrigcontainer
ports:
- containerPort: 80
resources:
requests:
memory: "500Mi"
cpu: "700m"
limits:
memory: "600Mi"
cpu: "700m"
nodeSelector:
agentpool: testuserpool
terminationGracePeriodSeconds: 900
对这种行为有什么合理的解释吗?如何解决?
编辑: 容器日志显示“应用程序正在关闭...”
答案 0 :(得分:1)
看起来这是代码方面的未实现事件,不一定与您的配置相关。 最可能的解释是 SIGTERM 没有被处理并且函数一直在处理事件,无论如何。
GitHub (https://github.com/Azure/azure-functions-host/issues/5365) 上有关于类似超时情况的报告。
如果您有机会处理 ApplicationStopping
对象上的 ApplicationStopped
和 IApplicationLifetime
事件,并在应用处于停止状态时停止处理该函数。
答案 1 :(得分:-1)
尝试增加您的 RAM 和 CPU 大小,这也可能会导致一些奇怪的终止问题。编写调试日志,查看您的代码中是否存在错误。