Knative 能否始终为每个传入请求启动 pods?

Can Knative always start pods for each incoming request?

我们想基于 Kubernetes 构建一个简化的 job/task 处理系统。我们考虑过使用 Knative 及其事件功能。但是,一个要求是在单独的 pod 中隔离执行每个 task/job。之后,我们要销毁豆荚。每隔 task/job 由新的 pods 等处理。此外,jobs/tasks 可以很长 - 运行,即多个小时甚至几天。

我们想知道是否可以使用和配置 Knative 来实现这一点。由于缩放到零功能,我实际上有点怀疑,这会破坏长期 运行 的工作(从这里学习:)。此外,我们的 jobs/tasks 不一定要监听 HTTP(S) 端口。这些 jobs/tasks 基本上预先打包到一个容器中,并使用 Docker CMD.

执行相应的操作

你们认为 Knative 是我们努力的良好基准吗? ... 更重要的是,您是否有任何 tip/suggestion 可以改用什么基线(顺便说一句,我们也关注 Tekton。)?

如果您有任务想要 运行 好几天,那么 Knative 可能不是这项工作的良好基准。 Knative 假设您的应用程序仅在至少有一个 HTTP 请求正在发送到您的应用程序时处于活动状态。正如您的直觉,让 HTTP 连接打开几天可能不是一个好的设计实践。

对于您的用例,Kubernetes Jobs 似乎是最好的方法。如果您需要对“有工作来启动作业”信号做出反应并创建作业,您可以使用 Knative 服务与 Kubernetes 对话以创建作业;我已经看到在其他情况下成功地工作。

Knative 也没有提供“处理一个请求后退出”的硬机制;对于需要这种隔离级别的用户,我建议在他们处理一个请求后在他们的应用程序中放置一个 exit(1) 调用,但我同意这不是一个理想的解决方法。

Tekton 几乎就是为这种情况而构建的。我们正是为此而使用它。我同意另一个答案,knative 不太适合这个用例(我确实喜欢 knative)。