TerminationGracePeriodSeconds 不适用于 KEDA 的队列触发功能

时间:2021-06-09 10:24:32

标签: kubernetes azure-functions serverless azure-aks keda

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

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

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

enter image description here

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:-1)

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