-
Notifications
You must be signed in to change notification settings - Fork 3.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Offload TaskResultsCompletionStatus from etcd to db or use compression to allow large worfklows (~100k) #13783
Comments
Also it disappeared but I am willing to work on this :) Just need to discuss how it should be done |
#7121 seems to be relevant to this issue but it seems discussion gravited towards db optimisations. Which won't solve this issue |
Duplicate with #13213 |
I have also encountered this problem before. I implemented ALWAYS_OFFLOAD_TASK—RESULT_STATUS. If the maintainers think this requirement is reasonable, I can contribute here. |
Offloading task result status to the database along with node status seems like a reasonable thing to do. I haven't looked into it, but it felt like it might be possible to:
This might be a better solution than offloading, WDYT @shuangkun? These might be two separate things. |
At that time, the task result status field was introduced to have a key function to help determine some status of the workflow, such as whether all tasks are completed (convenient for GC, whether the workflow completion status can be set), and whether the task output parsing in the previous step is completed (starting the next pod) , I am not sure whether some task result status can achieve this effect, may need to think about it. |
Hi, how is it going @shuangkun ? Do you still want to contribute to this issue? If not I can try and create PR that fixes this Thanks in advance |
@Hnatekmar Feel free to submit a PR, and we will review it. |
I'm unconvinced we need to preserve taskResultCompletionStatuses that are in state |
@Joibel if I may. This could still cause issues depending on current workload. I would be in favor of offloading it completely if it is feasible (I have to orient myself in the codebase but it doesn't seem impossible) |
Agree. I sorted out the information of taskresult and found that it is mainly used in two places:
|
The succeeded information and taskresult completion information are now important for each node. |
Summary
I am currently evaluating argo-workflows a goto solution for scheduling tasks for my company. So far we really like it featurewise and we thing it is really good fit 👍
Problem is that it number of tasks is expected to be around 100k per workflow and so far I haven't manage to persuade argo to do that.
From what I've observed there is limitation imposed by maximum size of entity inside etcd db which is around 1.5 MB. From my testing this can be observed with following workflow
You can use it with
ytt -f <manifest_name> | kubectl create -f - -n <argo_namespace>
. This manifest will get stuck at around 19177/20177 mark.When I look at content of Workflow manifest it has states of each job inside it has jobs listed like this
Size of workflow manifest also roughly correlates to etcd limit:
Also when I decrease size of prefix I am able to schedule more jobs (around 80k with single character prefix)
What I am proposing is:
argo-workflows/pkg/apis/workflow/v1alpha1/workflow_types.go
Line 1955 in c9b1477
ALWAYS_OFFLOAD_NODE_STATUS
)Here is my current configuration for argo-workflows https://github.com/Hnatekmar/kubernetes/blob/a09391109103d5ff9036eed85fd05577fff1c654/manifests/applications/argo-workflows.yaml
Use Cases
When scheduling 100k or more jobs
Message from the maintainers:
Love this feature request? Give it a 👍. We prioritise the proposals with the most 👍.
The text was updated successfully, but these errors were encountered: