TaskRuns
TaskRun — это пользовательский ресурс Kubernetes, который создаёт экземпляр Task для выполнения. TaskRuns отвечают за выполнение шагов, определённых в Task, и управление их жизненным циклом, предоставляя возможность запускать Tasks как автономно, так и в составе Pipeline.
Содержание
Зачем нужны TaskRunsЗадачи выполнения в CI/CDРешение TektonПреимуществаСценарии использованияОграничения и лимитыПринципыМодель выполнения TaskRunСтатус TaskRunПримеры конфигурацийПростой пример TaskRunTaskRun с встроенным определением TaskВажные параметрыТаймаутСценарии использованияПринципыПример конфигурацииОграничения ресурсовСценарии использованияПринципыПримеры конфигурацийШаблон PodСценарии использованияПринципыПримеры конфигурацийСсылкиЗачем нужны TaskRuns
Задачи выполнения в CI/CD
В системах CI/CD существует несколько задач, связанных с выполнением задач:
- Отслеживание выполнения: необходимость отслеживать прогресс и статус каждого выполнения задачи
- Распределение ресурсов: необходимость выделять соответствующие ресурсы для каждой задачи
- Управление входными и выходными данными: необходимость управлять входами и выходами выполнения задач
- Обработка ошибок: необходимость обрабатывать сбои и предоставлять информацию для отладки
- Аудит: необходимость вести учёт всех выполнений задач для целей аудита
Решение Tekton
TaskRuns Tekton решают эти задачи следующим образом:
- Экземпляр выполнения: каждый TaskRun представляет собой одно выполнение Task с конкретными входными данными
- Отслеживание статуса: TaskRuns отслеживают статус выполнения каждого Step
- Связывание ресурсов: TaskRuns связывают реальные ресурсы (тома, учётные данные) с требованиями Task
- Сбор результатов: TaskRuns собирают и сохраняют результаты, полученные от Tasks
- Интеграция с Kubernetes: TaskRuns используют возможности Kubernetes для управления ресурсами и планирования
Преимущества
- Изоляция: каждый TaskRun выполняется независимо, что позволяет параллельно запускать один и тот же Task
- Отслеживаемость: TaskRuns предоставляют подробную историю выполнения и логи
- Гибкость: TaskRuns могут переопределять параметры Task и привязки рабочих областей
- Повторное использование: один и тот же Task можно выполнять с разными входными данными через разные TaskRuns
- Интеграция: TaskRuns могут запускаться различными системами через Kubernetes API
- Наблюдаемость: статус и логи TaskRun можно мониторить с помощью инструментов Kubernetes
Сценарии использования
TaskRuns полезны в различных сценариях, включая:
- Ручной запуск задач: выполнение Task по запросу для тестирования или отладки
- Плановые операции: запуск Tasks по расписанию для обслуживания
- Событийный запуск: запуск Tasks в ответ на внешние события
- Компоненты Pipeline: выполнение Tasks в составе более крупного Pipeline
- CI/CD операции: сборка, тестирование и деплой приложений
Ограничения и лимиты
- TaskRuns выполняются на одном узле Kubernetes и не могут охватывать несколько узлов
- После запуска параметры TaskRun изменить нельзя
- TaskRuns имеют ограниченные возможности повторных попыток для неудачных Steps
- Время выполнения TaskRun ограничено таймаутом pod Kubernetes
- TaskRuns нельзя приостанавливать после начала выполнения
Принципы
Модель выполнения TaskRun
При создании TaskRun:
- Tekton проверяет спецификацию TaskRun
- Kubernetes создаёт Pod для TaskRun
- Каждый Step из Task становится контейнером в Pod
- Tekton внедряет бинарный entrypoint в каждый контейнер Step
- Steps выполняются последовательно в порядке, заданном в Task
- Статус TaskRun обновляется по мере завершения каждого Step
- Результаты собираются и сохраняются в статусе TaskRun
- Pod завершается после выполнения всех Steps или при ошибке
Статус TaskRun
Статус TaskRun содержит подробную информацию о выполнении:
- Общий статус (Running, Succeeded, Failed и т.д.)
- Время начала и завершения
- Статусы отдельных Steps
- Результаты Task
- Причина ошибки (если применимо)
- Имя Pod для доступа к логам
Примеры конфигураций
Простой пример TaskRun
TaskRun с встроенным определением Task
Важные параметры
Таймаут
Таймаут позволяет задать максимальную продолжительность выполнения TaskRun.
Сценарии использования
- Предотвращение бесконечного потребления ресурсов долгими задачами
- Обеспечение завершения CI/CD pipeline в разумные сроки
- Обработка зависших или заблокированных задач
Принципы
Таймауты:
- Задаются в спецификации TaskRun
- Применяются ко всему выполнению TaskRun
- Отсчитываются с начала первого Step до завершения последнего
- Приводят к ошибке TaskRun при превышении
Пример конфигурации
Ограничения ресурсов
Ограничения ресурсов позволяют задать требования и лимиты по вычислительным ресурсам для выполнения TaskRun. Поле computeResources в спецификации TaskRun даёт возможность контролировать выделение CPU и памяти для Pod, который выполняет шаги TaskRun.
Сценарии использования
- Управление ресурсами: справедливое распределение ресурсов между TaskRuns
- Контроль затрат: предотвращение чрезмерного потребления ресурсов
- Производительность: оптимизация выделения ресурсов для вычислительно интенсивных операций
- Стабильность: предотвращение исчерпания ресурсов, влияющего на другие нагрузки
Принципы
Ограничения ресурсов:
- Используют поле
computeResourcesв спецификации TaskRun - Включают
requests(минимум) иlimits(максимум) - Применяются ко всем контейнерам в Pod TaskRun
- Могут быть переопределены в спецификациях отдельных Steps
- Соответствуют формату спецификации ресурсов Kubernetes
Примеры конфигураций
Базовые ограничения ресурсов
Шаблон Pod
Шаблоны Pod позволяют настраивать конфигурацию Kubernetes Pod для TaskRun. Поле podTemplate в спецификации TaskRun предоставляет способ конфигурирования базового Pod, который выполняет шаги TaskRun.
Для получения дополнительной информации о Pod Templates, пожалуйста, обратитесь к Pod Templates.
Сценарии использования
- Настройка безопасности: установка security context для запуска контейнеров от имени непривилегированных пользователей
- Выбор узлов: использование node selectors для планирования Pod на конкретных узлах
- Толерантности: добавление tolerations для узлов с taints
- Сервисные аккаунты: настройка пользовательских сервисных аккаунтов для выполнения Pod
- Конфигурация томов: добавление дополнительных томов или настройка монтирования томов
- Переменные окружения: установка переменных окружения на уровне Pod
- Правила affinity: настройка affinity и anti-affinity для Pod
Принципы
Шаблоны Pod:
- Применяются к Pod, создаваемому для TaskRun
- Могут переопределять стандартные настройки Pod, заданные Tekton
- Позволяют тонко настраивать среду выполнения Pod
- Используются для соблюдения требований безопасности, соответствия или ресурсов
- Поддерживают все стандартные поля спецификации Pod Kubernetes
- Объединяются с конфигурацией Pod по умолчанию Tekton
Примеры конфигураций
Базовый шаблон Pod с security context
Шаблон Pod с node selector и ограничениями ресурсов
Шаблон Pod с tolerations и affinity
Шаблон Pod с сервисным аккаунтом и переменными окружения