0

我的目标: 实现一个每周运行一次的 cron 作业,我打算在 Knative 上实现这个拓扑以节省计算资源:

PingSource -> knative 服务

PingSource 将每周一次向 knative 服务发出一个虚拟事件,以调出 1 个 knative 服务 pod。knative service pod 会获取大量数据,然后进行处理。

我的担心: 如果我设置enable-scale-to-zero为 true,Knative pod 自动缩放器可能会关闭 knative 服务 pod,即使该 pod 尚未完成其工作。

到目前为止,我探索了:

  • scale-to-zero-grace-periodwhich 可以配置为告诉自动缩放器在最后一个流量结束后应该等待多长时间才能关闭 pod 。但我不认为这种方法是微妙的。我更喜欢有点类似于 readinessProbe 或 livenessProbe。在发送终止信号之前,自动缩放器应该发送一个探测来了解 pod 是否正在处理某些东西。

  • 此外,根据 knative 的文档,有两种类型的事件接收器:可调用和可寻址。Addressable 和 Callable 都返回响应或确认。knative 自动缩放器是否会将 pod 视为处理请求,直到 pod 返回响应/确认?所以只要 pod 没有响应,它就不会被自动缩放器移除。

4

1 回答 1

0

Knative 自动缩放器依赖于严格以请求/响应方式工作的 pod。只要将“大量数据”作为 HTTP 请求(或 Websocket 会话或 gRPC 会话等)的一部分进行处理,就不会考虑删除 pod。

发送请求,立即返回,然后在后台处理数据是行不通的。自动缩放器会认为根本没有活动,因此将其关闭。不过,有一个沙盒项目试图实现这种异步语义。

于 2021-01-25T08:36:02.763 回答