|
| 1 | +// Module included in the following assemblies: |
| 2 | +// |
| 3 | +// */openshift_pipelines/uninstalling-pipelines.adoc |
| 4 | + |
| 5 | +[id='op-mitigating-extra-pipeline-resource-consumption_{context}'] |
| 6 | += Mitigating extra resource consumption in pipelines |
| 7 | + |
| 8 | +When you have resource limits set on the containers in your pod, {product-title} sums up the resource limits requested as all containers run simultaneously. |
| 9 | + |
| 10 | +To consume the minimum amount of resources needed to execute one step at a time in the invoked task, {pipelines-title} requests the maximum CPU, memory, and ephemeral storage as specified in the step that requires the most amount of resources. This ensures that the resource requirements of all the steps are met. Requests other than the maximum values are set to zero. |
| 11 | + |
| 12 | +However, this behavior can lead to higher resource usage than required. If you use resource quotas, this could also lead to unschedulable pods. |
| 13 | + |
| 14 | +For example, consider a task with two steps that uses scripts, and that does not define any resource limits and requests. The resulting pod has two init containers (one for entrypoint copy, the other for writing scripts) and two containers, one for each step. |
| 15 | + |
| 16 | +{product-title} uses the limit range set up for the project to compute required resource requests and limits. |
| 17 | +For this example, set the following limit range in the project: |
| 18 | + |
| 19 | +[source,yaml] |
| 20 | +---- |
| 21 | +apiVersion: v1 |
| 22 | +kind: LimitRange |
| 23 | +metadata: |
| 24 | + name: mem-min-max-demo-lr |
| 25 | +spec: |
| 26 | + limits: |
| 27 | + - max: |
| 28 | + memory: 1Gi |
| 29 | + min: |
| 30 | + memory: 500Mi |
| 31 | + type: Container |
| 32 | +---- |
| 33 | + |
| 34 | +In this scenario, each init container uses a request memory of 1Gi (the max limit of the limit range), and each container uses a request memory of 500Mi. Thus, the total memory request for the pod is 2Gi. |
| 35 | + |
| 36 | +If the same limit range is used with a task of ten steps, the final memory request is 5Gi, which is higher than what each step actually needs, that is 500Mi (since each step runs after the other). |
| 37 | + |
| 38 | +Thus, to reduce resource consumption of resources, you can: |
| 39 | + |
| 40 | +* Reduce the number of steps in a given task by grouping different steps into one bigger step, using the script feature, and the same image. This reduces the minimum requested resource. |
| 41 | +* Distribute steps that are relatively independent of each other and can run on their own to multiple tasks instead of a single task. This lowers the number of steps in each task, making the request for each task smaller, and the scheduler can then run them when the resources are available. |
0 commit comments