1

我正在运行一个启用了 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

这种行为有什么合理的解释吗?如何解决?

编辑:容器日志显示“应用程序正在关闭......”

在此处输入图像描述

4

2 回答 2

1

看起来这是代码端未实现的事件,不一定与您的配置相关。最可能的解释是 SIGTERM 没有被处理,并且函数继续处理事件,无论如何。

GitHub ( https://github.com/Azure/azure-functions-host/issues/5365 ) 上有关于超时的相同情况的报告。

如果您有机会处理对象上的ApplicationStoppingApplicationStopped事件,IApplicationLifetime并在应用程序处于停止状态时停止处理该函数。

于 2021-06-09T19:29:16.217 回答
-1

尝试增加您的 RAM 和 CPU 大小,这也可能会导致一些奇怪的终止问题。编写调试日志以查看您的代码中是否存在错误。

于 2021-06-10T06:53:21.630 回答