PipelineRuns
PipelineRun — это пользовательский ресурс Kubernetes, который создаёт экземпляр Pipeline для выполнения. PipelineRuns отвечают за выполнение Tasks, определённых в Pipeline, и управление их жизненным циклом, предоставляя способ запуска сквозных CI/CD рабочих процессов.
Содержание
Зачем нужны PipelineRunsЗадачи CI/CD рабочих процессовРешение TektonПреимуществаСценарии использованияОграничения и лимитыПринципыМодель выполнения PipelineRunСтатус PipelineRunПримеры конфигурацииПример базового PipelineRunPipelineRun с встроенным определением PipelineВажные параметрыTimeoutСценарии использованияПринципыПоля таймаутаПримеры конфигурацииServiceAccountСценарии использованияПринципыПример конфигурацииPod TemplateСценарии использованияПринципыПример конфигурацииTaskRunSpecsСценарии использованияПринципыПоля конфигурацииПримеры конфигурацииWorkspacesСценарии использованияПринципыПример конфигурацииУправление статусом PipelineRunМониторинг статуса выполненияОтмена PipelineRunКорректная остановка PipelineRunСсылкиЗачем нужны PipelineRuns
Задачи CI/CD рабочих процессов
В системах CI/CD существует несколько задач, связанных с выполнением рабочих процессов:
- Оркестрация рабочего процесса: необходимость координировать несколько задач в определённом порядке
- Координация ресурсов: управление ресурсами между несколькими задачами
- Обмен данными: необходимость обмена данными между задачами в рабочем процессе
- Отслеживание выполнения: контроль прогресса всего рабочего процесса
- Обработка ошибок: управление сбоями как на уровне задач, так и всего рабочего процесса
- Аудит: ведение записи всех выполнений рабочего процесса
Решение Tekton
PipelineRuns Tekton решают эти задачи следующим образом:
- Экземпляр рабочего процесса: каждый PipelineRun представляет собой отдельное выполнение Pipeline с конкретными входными данными
- Оркестрация: PipelineRuns управляют порядком выполнения Tasks на основе зависимостей
- Привязка ресурсов: PipelineRuns связывают реальные ресурсы с требованиями Pipeline
- Отслеживание статуса: PipelineRuns отслеживают статус выполнения каждой Task
- Передача результатов: PipelineRuns обеспечивают обмен результатами между Tasks
- Интеграция с Kubernetes: PipelineRuns используют возможности Kubernetes для управления ресурсами и планирования
Преимущества
- Изоляция: каждый PipelineRun выполняется независимо, что позволяет параллельно запускать один и тот же Pipeline
- Отслеживаемость: PipelineRuns предоставляют подробную историю выполнения и логи
- Гибкость: PipelineRuns могут переопределять параметры Pipeline и привязки рабочих областей
- Повторное использование: один и тот же Pipeline может выполняться с разными входными данными через разные PipelineRuns
- Интеграция: PipelineRuns могут запускаться различными системами через Kubernetes API
- Наблюдаемость: статус и логи PipelineRun можно мониторить с помощью инструментов Kubernetes
Сценарии использования
PipelineRuns полезны в различных сценариях, включая:
- CI/CD приложений: сборка, тестирование и деплой приложений
- Infrastructure as Code: Provision и управление инфраструктурой
- Управление релизами: координация сложных процессов релиза
- Запланированные рабочие процессы: запуск рабочих процессов по расписанию
- Событийно-ориентированные рабочие процессы: запуск рабочих процессов в ответ на внешние события
Ограничения и лимиты
- PipelineRuns выполняются в пределах одного кластера Kubernetes
- После запуска параметры PipelineRun изменить нельзя
- PipelineRuns имеют ограниченные возможности повторных попыток для неудачных Tasks
- Время выполнения PipelineRun ограничено таймаутами pod Kubernetes
- PipelineRuns нельзя приостанавливать после начала выполнения (за исключением задач "finally")
Принципы
Модель выполнения PipelineRun
При создании PipelineRun:
- Tekton проверяет спецификацию PipelineRun
- Tekton создаёт TaskRuns для каждой Task в Pipeline
- TaskRuns выполняются согласно зависимостям
- Результаты Tasks собираются и могут использоваться последующими Tasks
- Статус PipelineRun обновляется по мере завершения каждого TaskRun
- Задачи "finally" выполняются после завершения или сбоя всех остальных Tasks
- PipelineRun завершается, когда все TaskRuns завершены
Статус PipelineRun
Статус PipelineRun предоставляет подробную информацию о выполнении:
- Общий статус (Running, Succeeded, Failed и т.д.)
- Время начала и завершения
- Статусы отдельных TaskRun
- Результаты Tasks
- Причина сбоя (если применимо)
- Имена TaskRun для доступа к логам
Примеры конфигурации
Пример базового PipelineRun
PipelineRun с встроенным определением Pipeline
Важные параметры
Timeout
Timeout позволяет задать максимальную продолжительность выполнения PipelineRun.
Сценарии использования
- Предотвращение бесконечного потребления ресурсов длительными Pipeline
- Обеспечение завершения CI/CD рабочих процессов в разумные сроки
- Обработка зависших или заблокированных Tasks
- Установка различных лимитов времени для разных фаз выполнения pipeline
Принципы
Таймауты:
- Задаются в спецификации PipelineRun через поле
timeouts(устаревшее полеtimeoutне рекомендуется) - Применяются ко всему PipelineRun или к отдельным секциям (tasks, finally)
- Измеряются от начала первой Task до завершения последней
- Приводят к ошибке PipelineRun при превышении
- Должны удовлетворять условию:
timeouts.pipeline >= timeouts.tasks + timeouts.finally - Важно: если любое из подполей установлено в "0", таймаут для этой секции отсутствует. Чтобы установить
timeouts.tasksилиtimeouts.finallyв "0", необходимо также установитьtimeouts.pipelineв "0"
Поля таймаута
- pipeline: максимальная продолжительность всего PipelineRun
- tasks: максимальная продолжительность всех обычных задач
- finally: максимальная продолжительность всех задач finally
Примеры конфигурации
Пример 1: Стандартная конфигурация таймаута
Пример 2: Отсутствие таймаута для tasks и finally (требует pipeline timeout = 0)
Примечание:
- В примере 1 соблюдается условие
pipeline (1h) >= tasks (45m) + finally (15m) - В примере 2 показано, как отключить таймауты, установив все значения в "0"
ServiceAccount
ServiceAccount позволяет указать Kubernetes ServiceAccount для аутентификации.
Сценарии использования
- Предоставление учётных данных для доступа к приватным реестрам контейнеров
- Аутентификация в облачных провайдерах
- Авторизация доступа к ресурсам Kubernetes
- Предоставление учётных данных для операций с Git
Принципы
ServiceAccount:
- Может задаваться на уровне PipelineRun для всех Tasks
- Может быть назначен конкретным Tasks через taskRunSpecs
- Предоставляет учётные данные через Kubernetes secrets
- Обеспечивает безопасный доступ к внешним ресурсам
Пример конфигурации
Pod Template
Pod Template позволяет указать шаблон Pod, который будет использоваться как основа для конфигурации Pod, выполняющего каждую Task.
Для получения дополнительной информации о Pod Templates смотрите Pod Templates.
Сценарии использования
- Установка node selectors для специфических аппаратных требований
- Настройка tolerations для выделенных узлов
- Указание security contexts для повышения безопасности
- Задание лимитов и запросов ресурсов на уровне Pod
- Настройка правил affinity для оптимального использования ресурсов
- Добавление пользовательских аннотаций или меток к Pod
Принципы
Pod Templates:
- Применяются ко всем Tasks в PipelineRun, если не переопределены в taskRunSpecs
- Соответствуют спецификациям шаблонов Pod Kubernetes
- Могут быть переопределены конфигурациями конкретных Tasks в taskRunSpecs
- Обеспечивают единообразную конфигурацию Pod для всех Tasks PipelineRun
- Поддерживают все стандартные поля шаблона Pod Kubernetes
Пример конфигурации
TaskRunSpecs
TaskRunSpecs позволяют настраивать отдельные TaskRun внутри PipelineRun, задавая список PipelineTaskRunSpec, который позволяет устанавливать ServiceAccountName, Pod template и Metadata для каждой задачи.
Сценарии использования
- Назначение разных ServiceAccount для разных Tasks для тонкой настройки доступа
- Установка специфичных Pod шаблонов для Tasks с разными требованиями к ресурсам или безопасности
- Конфигурация метаданных Tasks для лучшей организации и отслеживания
- Переопределение глобальных настроек PipelineRun для отдельных Tasks
- Применение разных вычислительных ресурсов или node selectors для разных этапов Pipeline
Принципы
TaskRunSpecs:
- Переопределяют Pod template, установленный для всего Pipeline
- Позволяют тонко настраивать окружение выполнения Tasks
- Используются для удовлетворения специфических требований безопасности, ресурсов или планирования
- Позволяют задавать разные конфигурации для разных этапов Pipeline
- Поддерживают все стандартные спецификации шаблонов Pod Kubernetes
- Могут комбинироваться с глобальными настройками PipelineRun
Поля конфигурации
Каждый TaskRunSpec поддерживает следующие поля:
- pipelineTaskName: имя задачи Pipeline, к которой применяется конфигурация
- serviceAccountName: ServiceAccount для конкретной задачи
- podTemplate: конфигурация Pod шаблона для этой задачи
- metadata: конфигурация метаданных для TaskRun
Примеры конфигурации
Пример 1: Базовые TaskRunSpecs с ServiceAccount и Pod Template
Пример 2: TaskRunSpecs с расширенной конфигурацией Pod
Пример 3: TaskRunSpecs с конфигурацией метаданных
Пример 4: TaskRunSpecs, переопределяющие глобальный Pod Template
TaskRunSpecs могут переопределять глобальный Pod template, заданный на уровне PipelineRun:
Workspaces
Workspaces позволяют обмениваться данными между Tasks в Pipeline.
Сценарии использования
- Совместное использование исходного кода между задачами сборки и тестирования
- Передача артефактов сборки задачам деплоя
- Совместное использование конфигурационных файлов между несколькими задачами
- Сохранение данных между выполнениями Pipeline
Принципы
Workspaces:
- Объявляются в Pipeline и привязываются в PipelineRun
- Могут использовать различные типы томов (PVC, ConfigMap, Secret и др.)
- Обеспечивают обмен данными без прямых зависимостей
- Поддерживают разные режимы доступа (ReadOnly, ReadWrite)
Пример конфигурации
Управление статусом PipelineRun
Мониторинг статуса выполнения
Поле status PipelineRun предоставляет подробную информацию о ходе выполнения:
Отмена PipelineRun
Для отмены выполняющегося PipelineRun обновите поле spec.status:
Это немедленно завершит все запущенные TaskRuns и не запустит ожидающие или finally задачи.
Корректная остановка PipelineRun
Для корректной остановки PipelineRun с выполнением finally задач:
Это завершит текущие выполняющиеся задачи, но не запустит новые, кроме finally задач.