• Русский
  • Настройка квот ресурсов для компонентов Pipeline

    Overview

    Настройте квоты ресурсов, связанные с компонентом Pipeline.

    Use Cases

    • Настройка квот ресурсов для компонента Pipeline
    • Установка стандартных квот ресурсов для init-контейнеров и контейнеров, создаваемых TaskRun

    Prerequisites

    Resource Configuration Guidelines

    Перед настройкой квот ресурсов:

    • Оцените доступные ресурсы и емкость вашего кластера
    • Учитывайте характеристики нагрузки и требования к производительности
    • Начинайте с консервативных значений и корректируйте их на основе данных мониторинга
    • Сначала тестируйте конфигурации в непроизводственных средах

    Steps

    Step 1

    Отредактируйте ресурс TektonConfig

    $ kubectl edit tektonconfigs.operator.tekton.dev config

    Step 2

    WARNING

    Изменение конфигурации может вызвать rolling update Pods компонента, что может привести к временной недоступности сервиса. Пожалуйста, выполняйте это в подходящее время.

    Пример изменения конфигурации spec.pipeline.options.deployments:

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonConfig
    metadata:
      name: config
    spec:
      pipeline:
        options:
          disabled: false
    
          configMaps:
            config-defaults:
              data:
                # Добавьте стандартные квоты ресурсов для контейнеров
                # Отрегулируйте значения ниже в соответствии с ресурсной емкостью вашего кластера и требованиями нагрузки
                default-container-resource-requirements: |
                  place-scripts: # обновляет требования к ресурсам контейнера 'place-scripts'
                    requests:
                      memory: "<MEMORY_REQUEST>"  # например, "128Mi"
                      cpu: "<CPU_REQUEST>"        # например, "250m"
                    limits:
                      memory: "<MEMORY_LIMIT>"    # например, "512Mi"
                      cpu: "<CPU_LIMIT>"          # например, "500m"
    
                  prepare: # обновляет требования к ресурсам контейнера 'prepare'
                    requests:
                      memory: "<MEMORY_REQUEST>"  # например, "128Mi"
                      cpu: "<CPU_REQUEST>"        # например, "250m"
                    limits:
                      memory: "<MEMORY_LIMIT>"    # например, "256Mi"
                      cpu: "<CPU_LIMIT>"          # например, "500m"
    
                  working-dir-initializer: # обновляет требования к ресурсам контейнера 'working-dir-initializer'
                    requests:
                      memory: "<MEMORY_REQUEST>"  # например, "128Mi"
                      cpu: "<CPU_REQUEST>"        # например, "250m"
                    limits:
                      memory: "<MEMORY_LIMIT>"    # например, "512Mi"
                      cpu: "<CPU_LIMIT>"          # например, "500m"
    
                  prefix-scripts: # обновляет требования к ресурсам контейнеров, начинающихся с 'scripts-'
                    requests:
                      memory: "<MEMORY_REQUEST>"  # например, "128Mi"
                      cpu: "<CPU_REQUEST>"        # например, "250m"
                    limits:
                      memory: "<MEMORY_LIMIT>"    # например, "512Mi"
                      cpu: "<CPU_LIMIT>"          # например, "500m"
    
                  prefix-sidecar-scripts: # обновляет требования к ресурсам контейнеров, начинающихся с 'sidecar-scripts-'
                    requests:
                      memory: "<MEMORY_REQUEST>"  # например, "128Mi"
                      cpu: "<CPU_REQUEST>"        # например, "250m"
                    limits:
                      memory: "<MEMORY_LIMIT>"    # например, "512Mi"
                      cpu: "<CPU_LIMIT>"          # например, "500m"
    
                  sidecar-tekton-log-results: # обновляет требования к ресурсам контейнера 'sidecar-tekton-log-results'
                    requests:
                      memory: "<MEMORY_REQUEST>"  # например, "128Mi"
                      cpu: "<CPU_REQUEST>"        # например, "100m"
                    limits:
                      memory: "<MEMORY_LIMIT>"    # например, "256Mi"
                      cpu: "<CPU_LIMIT>"          # например, "250m"
    
          deployments:
            # Отрегулируйте значения ресурсов ниже в соответствии с емкостью вашего кластера и требованиями к производительности
            tekton-pipelines-controller:
              spec:
                replicas: <REPLICA_COUNT>  # например, 1
                template:
                  spec:
                    containers:
                      - name: tekton-pipelines-controller
                        resources:
                          requests:
                            cpu: <CPU_REQUEST>        # например, "500m"
                            memory: <MEMORY_REQUEST>  # например, "512Mi"
                          limits:
                            cpu: <CPU_LIMIT>          # например, "1"
                            memory: <MEMORY_LIMIT>    # например, "1Gi"
    
            tekton-pipelines-remote-resolvers:
              spec:
                replicas: <REPLICA_COUNT>  # например, 1
                template:
                  spec:
                    containers:
                      - name: controller
                        resources:
                          requests:
                            cpu: <CPU_REQUEST>        # например, "200m"
                            memory: <MEMORY_REQUEST>  # например, "256Mi"
                          limits:
                            cpu: <CPU_LIMIT>          # например, "500m"
                            memory: <MEMORY_LIMIT>    # например, "512Mi"
    
            tekton-pipelines-webhook:
              spec:
                replicas: <REPLICA_COUNT>  # например, 1
                template:
                  spec:
                    containers:
                      - name: webhook
                        resources:
                          requests:
                            cpu: <CPU_REQUEST>        # например, "500m"
                            memory: <MEMORY_REQUEST>  # например, "256Mi"
                          limits:
                            cpu: <CPU_LIMIT>          # например, "1"
                            memory: <MEMORY_LIMIT>    # например, "500Mi"
    
            tekton-events-controller:
              spec:
                replicas: <REPLICA_COUNT>  # например, 1
                template:
                  spec:
                    containers:
                      - name: tekton-events-controller
                        resources:
                          requests:
                            cpu: <CPU_REQUEST>        # например, "100m"
                            memory: <MEMORY_REQUEST>  # например, "100Mi"
                          limits:
                            cpu: <CPU_LIMIT>          # например, "200m"
                            memory: <MEMORY_LIMIT>    # например, "256Mi"

    Step 3

    Отправьте конфигурацию и дождитесь обновления Pods.

    $ 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

    Вы можете убедиться, что конфигурации квот ресурсов для компонентов, связанных с Pipeline, применены.

    $ 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

    Проверка конфигурации квот ресурсов Pod

    Создайте TaskRun

    $ 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

    Дождитесь завершения TaskRun

    $ kubectl get taskruns.tekton.dev -n default hello
    
    NAME    SUCCEEDED   REASON      STARTTIME   COMPLETIONTIME
    hello   True        Succeeded   2m41s       2m28s

    Просмотрите конфигурацию квот ресурсов Pod

    $ 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

    Вы можете увидеть, что квота ресурсов для init-контейнера prepare в Pod соответствует квотам ресурсов, настроенным в ConfigMap config-defaults.

    References