我试图弄清楚如何使用 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
答案 0 :(得分:1)
Argo Workflows没有队列的概念,因此它无法知道队列何时已满。如果需要队列控制,应该在提交工作流之前进行。
提交工作流程后,有多种方法可以限制资源使用。
还有许多其他performance optimizations,例如设置工作流和Pod TTL和offloading YAML for large Workflows to a DB instead of keeping them on the cluster。
据我所知,无法设置工作流程限制,以便Argo将拒绝其他工作流程提交,直到有更多资源可用为止。如果您担心Kubernetes etcd填充了太多的工作流定义,这将是一个问题。
要避免炸毁etcd,您需要Argo中的另一个应用程序将工作流提交排队,直到有更多资源可用为止。