-
Notifications
You must be signed in to change notification settings - Fork 1.8k
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
Tekton Queue. Concurrency #5835
Comments
Related: #4903 |
Issues go stale after 90d of inactivity. /lifecycle stale Send feedback to tektoncd/plumbing. |
/remove-lifecycle stale |
Issues go stale after 90d of inactivity. /lifecycle stale Send feedback to tektoncd/plumbing. |
Stale issues rot after 30d of inactivity. /lifecycle rotten Send feedback to tektoncd/plumbing. |
Rotten issues close after 30d of inactivity. /close Send feedback to tektoncd/plumbing. |
@tekton-robot: Closing this issue. In response to this:
Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. |
/remove-lifecycle rotten |
/reopen This is part of the Roadmap and quite important. |
@khrm: You can't reopen an issue/PR unless you authored it or you are a collaborator. In response to this:
Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. |
@vdemeester Please reopen this. |
/lifecycle frozen |
queueing would be awesome |
This would be a great addition, so we could pool pipeline resources from multiple customers and just use queue-ing. Pending state is not desirable as timeouts might cause the pipelines to fail on kubernetes clusters. |
can we do this using resource request and limits ? |
Yeah you can use requests and limits for this. Problem is that if there are no resources left to run a pipeline it goes into "Pending" which eventually times out. Meaning people will get Pipeline Fails. If there was something like a queueing system. It would instead never timeout and just wait till there are resources available. This is obviously only for when there are busy periods on the cluster. Hence the request for something like a queueing syste. I also found that there is a possibility to do something like a lease, but that needed additional self made resources. I want to make this a solution. For our DevOps teams. We currently give each DevOps team a certain amount of resources to perform pipeline related tasks within a namespace. But that means that a lot of resources are potentially wasted when some DevOps teams are not running their pipelines during some days. We want to instead pool all the resources for our DevOps teams so we can reserve some nodes for pipeline related runtimes. Share the resources and utilize some sort of queueing. It's all efficiency and effectiveness related :) Hope that makes sense :) |
why PENDING timeouts ? |
Kubernetes' scheduler is, due to lack of compute space within a set quota or overall compute space on the cluster, unable to schedule the pod on any node with the requested cpu/men/storage. Making it go in pending mode. https://kubernetes.io/docs/tasks/debug/debug-application/debug-pods/#my-pod-stays-pending I think it might have to do something with the default timeout, this is from searching the web and within tekton docs: Reasons for Pending State:
Tekton Timeouts:
Customization:
How to Find Out Specific Timeout Values
Important Considerations:
|
can we increase PENDING timeout? or put these tasks in a "queue"? like the error CouldNotGetTask |
Queueing mechanisme in Tekton would be great. But this is the thread for the feature request. So this is not a possibility as of yet. I am not sure if you can increase the "PENDING" state of all of your pods on the cluster but that would be a work around. Not sure there is a setting for it. Maybe setting TerminationGacePeriodSeconds is an option or a command that extends the life of a pod with a sleep 30. But this is not a great solution. The best option would be for a queueing mechanisme for Tekton with some settings that allow you to manage the queue 🙂 |
Feature request
We would like to have ability to create many PipelineRuns at once, but execute them one by one (mostly). Sometimes concurrently.
Use case
Tekton can be used as regular pipeline \ workflow engine for all sort of activities.
Use case#1 - Chaos Engineering
Chaos Engineering - create pipelineRuns with some chaos, e.g. deployment restart for each deployment present on the environment. Execute PipelineRun one after another. Sometimes concurrent execution maybe desirable.
Use case#2 - Load Testing by single person
create them at the same time, but run them one after another.
Use case#3 - Load Testing by few people
There could be single environment for Load Testing, but multiple people working on it. In order to control the load runs done by multiple people each person can just create PipelineRun and it will be executed when previous load is finished.
Alternative: ask in chat if server is free \ available
Solution (we have)
What we have right now:
All pipelineRuns are created in
PipelineRunPending
state. It is done manually in pipelineRun yaml. We are considering to useKyverno
for automatic approach, but they don't supportspec.status
field change as of September 2022.We have implemented custom kubernetes controller which handles PipelineRuns with label
queue.tekton.dev/name
and removePipelineRunPending
state when previous PipelineRun finished.And it is possible to search for PipelineRuns is all namespaces. E.g. in case of namespace per person
We didn't implement concurrent ability (e.g. to execute 2 PipelineRuns from the same queue), just because for top use cases we don't need it, but we may implement it in the future.
Other Notes
The text was updated successfully, but these errors were encountered: