• Русский
  • TaskRuns

    TaskRun — это пользовательский ресурс Kubernetes, который инстанцирует задачу для выполнения. TaskRuns отвечают за выполнение шагов, определенных в задаче, и управление их жизненным циклом, что предоставляет возможность запускать задачи как в отдельности, так и в рамках конвейера (Pipeline).

    Зачем нужны TaskRuns

    Проблемы выполнения CI/CD

    В системах CI/CD существует несколько проблем, связанных с выполнением задач:

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

    Решение от Tekton

    TaskRuns Tekton решают эти проблемы следующим образом:

    • Экземпляр выполнения: Каждый TaskRun представляет отдельное выполнение задачи с определенными входными данными
    • Отслеживание статуса: TaskRuns отслеживают статус выполнения каждого шага
    • Привязка ресурсов: TaskRuns связывают реальные ресурсы (тома, учетные данные) с требованиями задачи
    • Сбор результатов: TaskRuns собирают и хранят результаты, полученные задачами
    • Интеграция с Kubernetes: TaskRuns используют Kubernetes для управления ресурсами и планирования

    Преимущества

    • Изоляция: Каждый TaskRun выполняется независимо, что позволяет параллельное выполнение одной и той же задачи
    • Отслеживаемость: TaskRuns предоставляют детальную историю выполнения и журналы
    • Гибкость: TaskRuns могут переопределять параметры задачи и привязки рабочих пространств
    • Повторное использование: Одну и ту же задачу можно выполнять с различными входными данными через разные TaskRuns
    • Интеграция: TaskRuns могут быть инициированы различными системами через API Kubernetes
    • Наблюдаемость: Статус TaskRun и журналы можно отслеживать с помощью инструментов Kubernetes

    Сценарии

    TaskRuns полезны в различных сценариях, включая:

    • Ручное выполнение задач: Запуск задачи по запросу для тестирования или отладки
    • Запланированные операции: Выполнение задач по расписанию для операций обслуживания
    • Выполнение на основе событий: Инициация задач в ответ на внешние события
    • Компоненты конвейера: Выполнение задач как части более крупного конвейера
    • Операции CI/CD: Сборка, тестирование и развертывание приложений

    Ограничения и недостатки

    • TaskRuns выполняются на одном узле Kubernetes и не могут охватывать несколько узлов
    • После старта параметры TaskRun не могут быть изменены
    • TaskRuns имеют ограниченные возможности повторной попытки для неудавшихся шагов
    • Время выполнения TaskRun ограничено временем ожидания пода Kubernetes
    • TaskRuns не могут быть приостановлены после начала выполнения

    Принципы

    Модель выполнения TaskRun

    Когда создается TaskRun:

    1. Tekton проверяет спецификацию TaskRun
    2. Kubernetes создает под для TaskRun
    3. Каждый шаг задачи становится контейнером в поде
    4. Tekton внедряет исполняемый файл «entrypoint» в каждый контейнер шага
    5. Шаги выполняются последовательно в порядке, определенном в задаче
    6. Статус TaskRun обновляется по мере завершения каждого шага
    7. Результаты собираются и хранятся в статусе TaskRun
    8. Под завершает работу, когда все шаги завершены или при сбое

    Статус TaskRun

    Статус TaskRun предоставляет подробную информацию о выполнении:

    1. Общий статус (Выполняется, Успешно, Провалено и т.д.)
    2. Время начала и завершения
    3. Статусы отдельных шагов
    4. Результаты задачи
    5. Причина сбоя (если применимо)
    6. Имя пода для доступа к журналам

    Примеры конфигурации

    Простой пример TaskRun

    apiVersion: tekton.dev/v1
    kind: TaskRun
    metadata:
      name: build-app-run
    spec:
      taskRef:
        name: build-app
      params:
        - name: image
          value: my-registry/my-app:latest
      workspaces:
        - name: source
          persistentVolumeClaim:
            claimName: app-source-pvc

    TaskRun с встроенным определением задачи

    apiVersion: tekton.dev/v1
    kind: TaskRun
    metadata:
      name: print-message-run
    spec:
      taskSpec:
        params:
          - name: message
            type: string
        steps:
          - name: print
            image: ubuntu
            script: |
              echo "$(params.message)"
      params:
        - name: message
          value: "Hello, Tekton!"

    Важные параметры

    Тайм-аут

    Тайм-аут позволяет задать максимальную продолжительность выполнения TaskRun.

    Сценарии использования

    • Предотвращение бесконечного потребления ресурсов долгими задачами
    • Обеспечение завершения конвейеров CI/CD в разумные сроки
    • Обработка зависших или заблокированных задач

    Принципы

    Тайм-ауты:

    • Указываются в спецификации TaskRun
    • Применяются ко всему выполнению TaskRun
    • Измеряются от начала первого шага до завершения последнего шага
    • Приводят к сбою TaskRun, если превышены

    Пример конфигурации

    apiVersion: tekton.dev/v1
    kind: TaskRun
    metadata:
      name: build-with-timeout
    spec:
      taskRef:
        name: build-app
      timeout: "10m"
      params:
        - name: image
          value: my-registry/my-app:latest

    Шаблон пода

    Шаблоны подов позволяют настраивать конфигурацию пода Kubernetes для TaskRun.

    Сценарии использования

    • Установка лимитов и требований к ресурсам
    • Настройка селекторов узлов и толерантностей
    • Добавление контекстов безопасности
    • Настройка учетных записей служб

    Принципы

    Шаблоны подов:

    • Применяются к поду, созданному для TaskRun
    • Могут переопределять настройки по умолчанию пода
    • Позволяют точно контролировать среду выполнения пода
    • Могут использоваться для удовлетворения конкретных требований безопасности или ресурсов

    Пример конфигурации

    apiVersion: tekton.dev/v1
    kind: TaskRun
    metadata:
      name: build-with-pod-template
    spec:
      taskRef:
        name: build-app
      podTemplate:
        securityContext:
          runAsNonRoot: true
        nodeSelector:
          disktype: ssd

    Ссылки