如何在Kubernetes集群中使用作业队列

时间:2019-12-26 11:17:18

标签: python kubernetes

我有一个Flask应用程序,可以在其中上传文件并调用Flask API以使用Python子进程模块(运行Shell命令)来处理该文件。

如何使其与Kubernetes一起使用,以便文件处理可以与集群一起使用?

假设我有2个节点,每个节点一次可以处理3个文件。因此,如果我有10个待处理。 其中6个将在2个节点上完成,而4个将在队列中。

我已经看到Kubernetes自动缩放,但是看来,它将触发所需数量的节点。如果我有固定数量的节点,并且多次调用Flask API,则将耗尽资源。

1 个答案:

答案 0 :(得分:1)

  

如果我调用此API 20次,那么所有群集将同时耗尽资源。如果所有集群一次可以运行6个Pod(此数目可以根据集群大小而变化),则在达到90%或100%CPU /内存使用率之前,其余14个Pod将进入队列。

可以创建Kubernetes Jobs并为parallelismcompletions设置适当的值,例如parallelism: 6最多可与该作业并行放置6个吊舱,如果您要处理20个项目,则completions: 20

问题

但是为此使用Kubernetes Jobs存在一些问题。首先,没有定义的方法可以将输入文件分配给作业窗格,因此作业窗格需要对此具有逻辑。而且,如果您不想同时开始所有20个工作,则最好使用队列服务来处理工作队列。队列可以由例如KafkaNats