Configuring Resource Quotas for Pipeline Components

Overview

Configure resource quotas related to the Pipeline component.

Use Cases

  • Adjust the resource quotas for the Pipeline component
  • Set default resource quotas for init-containers and containers created by TaskRun

Prerequisites

Steps

Step 1

Edit the TektonConfig resource

$ kubectl edit tektonconfigs.operator.tekton.dev config

Step 2

WARNING

Modifying the configuration may trigger a rolling update of the component Pods, which could lead to temporary service unavailability. Please execute this at an appropriate time.

Example of modifying the spec.pipeline.options.deployments configuration:

apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
  name: config
spec:
  pipeline:
    options:
      disabled: false

      configMaps:
        config-defaults:
          data:
            # Add default container resource quotas
            default-container-resource-requirements: |
              place-scripts: # updates resource requirements of a 'place-scripts' container
                requests:
                  memory: "64Mi"
                  cpu: "50m"
                limits:
                  memory: "128Mi"
                  cpu: "100m"

              prepare: # updates resource requirements of a 'prepare' container
                requests:
                  memory: "64Mi"
                  cpu: "50m"
                limits:
                  memory: "256Mi"
                  cpu: "100m"

              working-dir-initializer: # updates resource requirements of a 'working-dir-initializer' container
                requests:
                  memory: "64Mi"
                  cpu: "50m"
                limits:
                  memory: "512Mi"
                  cpu: "100m"

              prefix-scripts: # updates resource requirements of containers which starts with 'scripts-'
                requests:
                  memory: "64Mi"
                  cpu: "50m"
                limits:
                  memory: "128Mi"
                  cpu: "100m"

              prefix-sidecar-scripts: # updates resource requirements of containers which starts with 'sidecar-scripts-'
                requests:
                  memory: "64Mi"
                  cpu: "50m"
                limits:
                  memory: "128Mi"
                  cpu: "100m"

              sidecar-tekton-log-results: # updates resource requirements of a 'place-scripts' container
                requests:
                  memory: "64Mi"
                  cpu: "50m"
                limits:
                  memory: "128Mi"
                  cpu: "100m"

      deployments:

        tekton-pipelines-controller:
          spec:
            replicas: 1
            template:
              spec:
                containers:
                  - name: tekton-pipelines-controller
                    resources:
                      requests:
                        cpu: 500m
                        memory: 512Mi
                      limits:
                        cpu: "1"
                        memory: 1Gi

        tekton-pipelines-remote-resolvers:
          spec:
            replicas: 1
            template:
              spec:
                containers:
                  - name: controller
                    resources:
                      requests:
                        cpu: 200m
                        memory: 256Mi
                      limits:
                        cpu: 500m
                        memory: 512Mi

        tekton-pipelines-webhook:
          spec:
            replicas: 1
            template:
              spec:
                containers:
                  - name: webhook
                    resources:
                      requests:
                        cpu: "500m"
                        memory: 256Mi
                      limits:
                        cpu: "1"
                        memory: 500Mi

        tekton-events-controller:
          spec:
            replicas: 1
            template:
              spec:
                containers:
                  - name: tekton-events-controller
                    resources:
                      requests:
                        cpu: 100m
                        memory: 100Mi
                      limits:
                        cpu: 200m
                        memory: 256Mi

Step 3

Submit the configuration and wait for the Pods to update.

$ kubectl get pods -n tekton-pipelines -w

NAME                                                    READY   STATUS    RESTARTS   AGE
tekton-pipelines-controller-648d87488b-fq9bc            1/1     Running   0          2m21s
tekton-pipelines-remote-resolvers-79554f5959-cbm6x      1/1     Running   0          2m21s
tekton-pipelines-webhook-5cd9847998-864zf               1/1     Running   0          2m20s
tekton-events-controller-5c97b7554c-m59m6               1/1     Running   0          2m21s

Operation Result

You can see that the resource quota configurations for the Pipeline related components are effective.

$ kubectl get deployments.apps -n tekton-pipelines tekton-pipelines-controller tekton-pipelines-remote-resolvers tekton-pipelines-webhook tekton-events-controller -o yaml | grep 'resources:' -A 6

          resources:
            limits:
              cpu: "1"
              memory: 1Gi
            requests:
              cpu: 500m
              memory: 512Mi
--
          resources:
            limits:
              cpu: 500m
              memory: 512Mi
            requests:
              cpu: 200m
              memory: 256Mi
--
          resources:
            limits:
              cpu: "2"
              memory: 500Mi
            requests:
              cpu: "1"
              memory: 256Mi
--
          resources:
            limits:
              cpu: 200m
              memory: 256Mi
            requests:
              cpu: 100m
              memory: 100Mi

VerifyingPod Resource Quota Configuration

Create aTaskRun

$ cat <<'EOF' | kubectl create -f -
apiVersion: tekton.dev/v1
kind: TaskRun
metadata:
  name: hello
  namespace: default
spec:
  taskSpec:
    steps:
      - name: hello
        image: alpine
        command: ["echo", "hello"]
EOF

Wait for theTaskRun to Complete

$ kubectl get taskruns.tekton.dev -n default hello

NAME    SUCCEEDED   REASON      STARTTIME   COMPLETIONTIME
hello   True        Succeeded   2m41s       2m28s

View thePod Resource Quota Configuration

$ kubectl get pods -n default hello-hello-pod -o yaml

apiVersion: v1
kind: Pod
metadata:
  name: hello-pod
  namespace: default
spec:
  containers:
    - image: alpine
      name: step-hello
      resources: {}
  initContainers:
    - name: prepare
      resources:
        limits:
          cpu: 100m
          memory: 256Mi
        requests:
          cpu: 50m
          memory: 64Mi

You can see that the resource quota for the initContainers container prepare in the Pod matches the resource quotas configured in the config-defaults ConfigMap.

References