0

到目前为止,我正在为特定的处理任务启动单独的 K8s 作业。其中一些任务需要大量的 CPU/内存,但其他任务相当简单,可以通过内存处理轻松完成。与作为 K8s 作业运行时相比,由于 pod 创建时间的原因,一个在内存中需要几毫秒的简单任务要慢得多。

我想知道是否有可能有一个专门用于那些特定 K8s 作业的工作池之类的东西,以便不太密集的任务不会产生 K8s 作业 pod 创建时间的开销。例如,如果我已经创建了 5 个 pod 并空闲等待任务,它们可以快速接收传入的请求进行处理(无需等待 pod 启动)。如果这些 pod 不足以处理传入的任务量,理想情况下它们会自动缩放以适应更多处理。我找不到明确的文档来说明我正在尝试做的事情,因此我们将不胜感激。谢谢!

4

1 回答 1

1

不存在 Kubernetes 的最小单元是 pod——它要么直接启动(创建 pod),要么由另一个资源控制,例如。副本集,作业,cronjob。

如果您的工作节点上已经存在映像,则 pod 创建时间应该相当短。您的员工是否因为自动缩放器而在每项工作后终止?我不确定您的用例到底是什么以及您认为“足够小”的启动时间。此外,这在很大程度上取决于不同的作业是否需要不同的环境来运行。

您可以部署队列服务(例如 RabbitMQ)并通过向该队列添加消息来创建任务并部署监视这些队列的工作人员。有像 Dramatiq 这样的框架使这变得非常容易,并负责所有的队列处理。还有一些解决方案可以根据自定义指标进行 kubernetes 部署规模,例如。https://github.com/kedacore/keda,如果作业堆积在队列中,这将包括自动缩放。

如果您不想自己编写代码,可以查看开源自动化服务器,例如。詹金斯。通常你会让 Jenkins 在你的集群中启动 Pod,但你也可以添加一些静态工作节点来立即执行作业。(自动缩放在这种方法中可能是一个问题,但它绝对是可能的)

于 2021-05-02T22:36:29.467 回答