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

Python 如何在kubernetes集群中使用作业队列,python,kubernetes,Python,Kubernetes,我有一个Flask应用程序,可以上传一个文件并调用Flask API,使用Python子流程模块(运行Shell命令)处理该文件 如何使它与Kubernetes一起工作,以便文件处理可以与集群一起工作 假设我有2个节点,每个节点一次可以处理3个文件。所以,如果我有10个待处理。 其中6个将在2个节点上完成,4个将在队列中完成 我见过Kubernetes自动缩放,但它似乎会根据需要触发尽可能多的节点。如果我有固定数量的节点,并且我多次调用我的Flask API,那么它将耗尽资源 如果我同时调用这个

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

如何使它与Kubernetes一起工作,以便文件处理可以与集群一起工作

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

我见过Kubernetes自动缩放,但它似乎会根据需要触发尽可能多的节点。如果我有固定数量的节点,并且我多次调用我的Flask API,那么它将耗尽资源

如果我同时调用这个API 20次,所有集群的资源都将耗尽。如果所有集群在达到90%或100%的CPU/内存使用率之前,一次可以运行6个POD(这个数字可以根据集群大小而改变),那么剩余的14个POD将在队列中

您可以为
parallelism
completions
创建并设置适当的值,例如
parallelism:6
最多有6个POD与此作业并行,如果您有20个项目要处理,则
completions:20

问题


但是,使用Kubernetes作业来实现这一点有几个问题。首先,没有定义将输入文件分配给作业吊舱的方法,因此作业吊舱需要有相应的逻辑。如果不想同时启动所有20个作业,最好使用队列服务来处理工作队列。队列可以由或来处理。

您能详细说明一下您想做什么吗?你的具体问题是什么?部署到Kubernetes时,您计划将文件存储在哪里?文件可以在任何地方(查找文件是Shell命令的工作)。我的具体问题是“用特定的Shell命令启动pod”。我可以在调用FlaskAPI时简单地启动一个pod。但是如果我同时调用这个API 20次,所有集群的资源都将耗尽。如果所有集群在达到90%或100%的CPU/内存使用率之前,一次可以运行6个POD(这个数字可以根据集群大小而改变),那么剩余的14个POD将在队列中。