我的目标:实现一个每周运行一次的cron作业,我打算在Knative上实现这个拓扑结构,以节省计算资源:
PingSource->终端服务
PingSource将每周向一个knative服务发出一次虚拟事件,只为调出一个knactiveservice pod。knative服务吊舱将获取大量数据,然后对其进行处理。
我担心的是:如果我将enable-scale-to-zero
设置为true,Knative pod自动缩放器可能会关闭Knative服务pod,即使pod尚未完成其工作。
到目前为止,我探索了:
-
scale-to-zero-grace-period
,可以配置为告诉自动缩放器在最后一次流量结束后应该等待多长时间才能关闭pod。但我认为这种方法并不微妙。我更喜欢类似于readinesProbe或livenessProbe。在发送终止信号之前,自动缩放器应该发送一个探针来了解吊舱是否在处理什么。 -
此外,根据knative的文档,有两种类型的事件接收器:可调用和可寻址。Addressable和Callable都返回响应或确认。knative自动缩放器是否会将pod视为处理请求,直到pod返回响应/确认?因此,只要pod没有响应,它就不会被自动缩放器移除。
Knative自动缩放器严格依赖于pod以请求/响应的方式工作。只要";大量数据";作为HTTP请求(或Websocket会话或gRPC会话等(的一部分进行处理时,pod甚至不会被考虑删除。
不起作用的是发送请求,立即返回,然后在后台处理数据。自动缩放器会认为根本没有活动,因此将其关闭。不过,有一个沙箱项目试图实现这种异步语义。