使用Argo工作流创建队列系统

时间:2020-09-18 13:07:42

标签: kubernetes argo-workflows argo-events

我试图弄清楚如何使用 Argo 设置工作队列。 Argo工作流的计算量很大。我们需要计划许多同时请求。通过HTTP请求将工作流程项添加到工作队列。

流程可以像这样演示:

client  
  => hasura # user authentication  
    => redis # work queue
      => argo events # queue listener
        => argo workflows 
          => redis + hasura # inform that workflow has finished
            => client 

我从来没有建立超过其资源的K8s集群。我在哪里限制工作流程的执行?还是Argo事件和工作流根据集群中的资源限制了它们?

上面的示例可能会简化为以下示例,但是问题是如果processing queue is full会发生什么?

client
  => argo events # HTTP request listener
    => argo workflows

1 个答案:

答案 0 :(得分:1)

Argo Workflows没有队列的概念,因此它无法知道队列何时已满。如果需要队列控制,应该在提交工作流之前进行。

提交工作流程后,有多种方法可以限制资源使用。

  1. Pod resources-每个工作流程步骤均由Kubernetes Pod表示。您可以设置资源请求和限制,就像在部署中使用Pod一样。
  2. Step parallelism limit-在工作流中,您可以限制同时运行的步骤数。当某个步骤特别耗费资源时,这会有所帮助。
  3. Workflow parallelism limit-您可以通过为我们配置信号灯来限制同时运行的工作流程的数量。

还有许多其他performance optimizations,例如设置工作流和Pod TTL和offloading YAML for large Workflows to a DB instead of keeping them on the cluster

据我所知,无法设置工作流程限制,以便Argo将拒绝其他工作流程提交,直到有更多资源可用为止。如果您担心Kubernetes etcd填充了太多的工作流定义,这将是一个问题。

要避免炸毁etcd,您需要Argo中的另一个应用程序将工作流提交排队,直到有更多资源可用为止。