我正在研究如何使用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事件和工作流是否根据集群中的资源来限制这些事件和工作流?
上面的示例可能简化为以下内容,但问题是如果处理队列已满发生了什么
client
=> argo events # HTTP request listener
=> argo workflows发布于 2020-09-28 15:39:16
Argo工作流没有队列的概念,因此它无法知道队列何时已满。如果需要队列控制,则应该在提交工作流之前进行。
一旦提交了工作流,就有许多方法来限制资源的使用。
还有许多其他的性能优化,比如设置工作流、Pod和将大型工作流的YAML卸载到DB,而不是将它们保留在集群中。
据我所知,没有办法设置一个工作流限制,以便Argo将拒绝其他工作流提交,直到有更多的资源可用。如果您担心Kubernetes会填充太多的工作流定义,那么这就是一个问题。
为了防止etcd爆炸,您将需要另一个类似于Argo的应用程序来排队提交工作流,直到有更多的资源可用为止。
https://stackoverflow.com/questions/63956383
复制相似问题