Adjusting Optional Configuration Items of Subcomponents

Function Overview

By adjusting the options configuration of each component in the TektonConfig resource, custom configurations for subcomponents can be achieved.

This document introduces the configuration items supported by options, as well as how to configure these items.

Use Cases

Tekton supports the deployment of subcomponents through the TektonConfig resource. This resource has a common configuration item options under the fields of spec.pipeline, spec.trigger, spec.hub, spec.chain, and spec.results.

Through the options configuration, you can achieve:

  • Point deployment of components
  • Modification of high availability settings
  • Modification of the number of replicas for components
  • Modification of resource quotas for components
  • Modification of default ConfigMap configuration items

Detailed Configurable Items

  • Modify the configuration of Deployment for the components, such as:
    • labels and annotations configurations
    • Number of replicas replicas
    • Affinity rules affinity
    • Priority class priorityClassName
    • Node selector nodeSelector
    • Toleration rules tolerations
    • Topology spread constraints topologySpreadConstraints
    • Runtime class runtimeClassName
    • Volumes volumes
    • Containers containers and initContainers
      • Resource quotas resources.limits and resources.requests
      • Environment variables env
      • Volumes volumes
      • Execution arguments args
  • Modify the configuration of ConfigMap for the components, such as:
    • labels and annotations configurations
    • Update or add new data configuration items
  • Modify the configuration of Ingress for the components, such as:
    • ingressClassName to override the default ingressClass configuration
    • rules to override the default routing rules
    • tls to override the default certificate configuration
  • Modify the automatic scaling configuration of HorizontalPodAutoscaler for the components, such as:
    • Adding this configuration
    • Modifying minReplicas and maxReplicas configurations
    • Modifying targetCPUUtilizationPercentage configurations, etc.
  • Modify the configuration of StatefulSet for the components
  • Modify the configuration of ValidatingWebhookConfiguration and MutatingWebhookConfiguration for the components

Pre-requisites

Before using the functionality, ensure that:

  • The Tekton Operator component is installed
  • The TektonConfig resource has been automatically created in the environment
  • You have a basic understanding of the configuration items supported in TektonConfig

Below is a typical example of an options configuration:

apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
  name: config
spec:
  targetNamespace: tekton-pipelines
  hub: {}
  chain: {}
  trigger: {}
  pipeline:
    options:
      # Whether to enable options configuration, default value is false. When set to true, all configurations under options will not take effect.
      disabled: false

      # Configure ConfigMap's configurations
      configMaps:
        # Name of the ConfigMap to be modified or added
        config-defaults:
          data:
            # Configuration items to be modified or added
            default-container-resource-requirements: |
              place-scripts: # updates resource requirements of a 'place-scripts' container
                requests:
                  memory: "64Mi"
                  cpu: "50m"
                limits:
                  memory: "128Mi"
                  cpu: "100m"

      # Configure Deployment's configurations
      deployments:
        # Name of the Deployment to be modified
        tekton-events-controller:
          metadata:
            # Labels configuration of the Deployment to be modified
            labels:
              key: value
            # Annotations configuration of the Deployment to be modified
            annotations:
              key: value
          spec:
            # Number of replicas of the Deployment to be modified
            replicas: 1
            # Template configuration to be modified
            template:
              metadata:
                # Labels configuration to be modified
                labels:
                  key1: value
                # Annotations configuration to be modified
                annotations:
                  key1: value
              spec:
                # Affinity configuration to be modified
                affinity:
                  nodeAffinity:
                    requiredDuringSchedulingIgnoredDuringExecution:
                      nodeSelectorTerms:
                        - matchExpressions:
                          - key: kubernetes.io/os
                            operator: In
                            values:
                              - linux

                # Node selector configuration to be modified
                nodeSelector:
                  kubernetes.io/os: linux

                # Tolerations configuration to be modified
                tolerations:
                  - effect: NoSchedule
                    key: node-role.kubernetes.io/master
                    operator: Exists

                # priorityClassName: ""
                # topologySpreadConstraints: ""
                # runtimeClassName: ""
                # volumes: []
                # initContainers: []

                containers:
                  # Name of the container to be modified
                  - name: tekton-events-controller
                    # Resource quotas to be modified
                    resources:
                      limits:
                        cpu: "1"
                        memory: 1Gi
                      requests:
                        cpu: 500m
                        memory: 512Mi

                    # Environment variables to be modified
                    env:
                      - name: key
                        value: value

                    # Volume configuration to be modified
                    # volumes: []

                    # Execution arguments to be added
                    # args: []

      # HorizontalPodAutoscalers configuration to be modified or added
      horizontalPodAutoscalers:
        # Name of the horizontalPodAutoscaler to be modified
        tekton-pipelines-remote-resolvers:
          metadata:
            # Annotations configuration to be modified
            # Labels configuration to be modified
            labels:
              key: value
            annotations:
              key: value
          spec:
            # MinReplicas configuration to be modified
            minReplicas: 1
            # MaxReplicas configuration to be modified
            maxReplicas: 5
            # Metrics configuration to be modified
            metrics:
              - resource:
                  name: cpu
                  target:
                    averageUtilization: 50
                    type: Utilization
                type: Resource
              - resource:
                  name: memory
                  target:
                    averageUtilization: 50
                    type: Utilization
                type: Resource
            # scaleTargetRef configuration to be modified
            scaleTargetRef:
              apiVersion: apps/v1
              kind: Deployment
              name: tekton-pipelines-remote-resolvers

Steps to Operate

Using the pipeline component as an example, this section describes how to configure resource quotas.

Step 1

Edit the TektonConfig resource

$ kubectl edit tektonconfigs.operator.tekton.dev config

Step 2

WARNING

Modifying configurations may trigger a rolling update of the component Pods, which could temporarily make the service unavailable. Please execute this at an appropriate time.

Modify the spec.pipeline.options.deployments configuration as follows:

  • Change the number of replicas for Deployment tekton-events-controller to 2
  • Modify the resources configuration of Deployment tekton-events-controller
apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
  name: config
spec:
  targetNamespace: tekton-pipelines
  hub: {}
  chain: {}
  trigger: {}
  pipeline:
    options:
      disabled: false
      deployments:
        tekton-events-controller:
          spec:
            replicas: 2
            template:
              spec:
                containers:
                  - name: tekton-events-controller
                    resources:
                      limits:
                        cpu: "1"
                        memory: 1Gi
                      requests:
                        cpu: 500m
                        memory: 512Mi

Step 3

Submit the configuration and wait for the Pods to update.

$ kubectl get pods -n tekton-pipelines -l app=tekton-events-controller -w

NAME                                       READY   STATUS    RESTARTS   AGE
tekton-events-controller-fcd56975b-knvzx   1/1     Running   0          20s
tekton-events-controller-fcd56975b-qqprt   1/1     Running   0          31s

Operation Result

You can see that the number of replicas of tekton-events-controller is 2 and the resources configuration is effective.

$ kubectl get deployments.apps -n tekton-pipelines tekton-events-controller -o yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tekton-events-controller
  namespace: tekton-pipelines
spec:
  replicas: 2
  template:
    metadata:
    spec:
      containers:
      - name: tekton-events-controller
        resources:
          limits:
            cpu: "1"
            memory: 1Gi
          requests:
            cpu: 500m
            memory: 512Mi

Follow-up Actions

If you need to modify the configuration of other components, you can refer to the above steps to modify the options configuration of other components.

References