• Русский
  • Tekton Results

    Tekton Results — это сложная система, расширяющая возможности Tekton за счёт обеспечения постоянного хранения, запросов и управления данными выполнения CI/CD. В этом документе подробно рассматривается, как работает Tekton Results, его архитектура и как эффективно использовать его функции.

    Глоссарий

    ТерминОпределение
    ResultРесурс верхнего уровня, который группирует связанные Records, представляя логическую единицу работы
    RecordОтдельный экземпляр данных (TaskRun, PipelineRun, Log), принадлежащий Result
    WatcherКонтроллер Kubernetes, который отслеживает TaskRuns и PipelineRuns и сохраняет их в базе данных Results
    API ServergRPC/REST сервер, предоставляющий доступ к сохранённым Results и Records
    Retention PolicyПравила, определяющие, как долго данные хранятся в базе данных Results

    Почему нам нужен Tekton Results

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

    В традиционных CI/CD системах на базе Kubernetes, таких как Tekton Pipelines, все данные выполнения хранятся в базе данных etcd API-сервера Kubernetes. Такой подход имеет несколько ограничений:

    • Ограниченная ёмкость хранения: etcd предназначен для хранения небольших объёмов конфигурационных данных, а не больших объёмов истории выполнения и логов
    • Ограничения ресурсов: по мере накопления рабочих нагрузок CI/CD они могут потреблять значительные ресурсы etcd, что потенциально влияет на производительность кластера
    • Фрагментация данных: связанные действия CI/CD (TaskRuns, PipelineRuns) хранятся как отдельные ресурсы без явных связей
    • Управление логами: логи обычно хранятся в среде выполнения контейнеров или внешних системах логирования, что затрудняет их связывание с конкретными запусками pipeline
    • Жизненный цикл данных: отсутствует встроенный механизм управления жизненным циклом завершённых данных CI/CD

    Эти ограничения становятся всё более проблематичными с ростом использования CI/CD, приводя к возможным проблемам с производительностью и административной нагрузкой.

    Как Tekton Results решает эти проблемы

    Tekton Results предоставляет комплексное решение, которое:

    1. Снимает нагрузку с хранения данных: переносит завершённые данные выполнения CI/CD из etcd в специализированную базу данных, оптимизированную для этих целей
    2. Устанавливает связи: создаёт явные связи между связанными действиями CI/CD через модель данных Result/Record
    3. Централизует хранение логов: сохраняет логи вместе с соответствующими TaskRuns/PipelineRuns
    4. Обеспечивает управление жизненным циклом данных: реализует политики хранения для автоматического управления данными со временем
    5. Предоставляет расширенные возможности запросов: предлагает мощные фильтры и возможности запросов, недоступные через API Kubernetes

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

    • Улучшенная производительность кластера: снижает нагрузку на API-сервер Kubernetes и etcd за счёт переноса завершённых данных CI/CD
    • Лучшее упорядочивание данных: группирует связанные действия CI/CD для улучшения видимости и управления
    • Длительное хранение данных: обеспечивает долгосрочное хранение истории выполнения без влияния на ресурсы кластера
    • Мощные возможности запросов: предоставляет расширенные фильтры и поиск по данным CI/CD
    • Интегрированное управление логами: хранит логи вместе с данными выполнения для полной истории pipeline
    • Автоматическая очистка: управляет жизненным циклом данных с помощью настраиваемых политик хранения

    Применимые сценарии

    Tekton Results особенно полезен в следующих случаях:

    1. Среды с большим объёмом CI/CD: организации, запускающие множество pipeline, генерирующих значительные объёмы данных выполнения
    2. Требования к соответствию: среды, которым необходимо сохранять историю выполнения для аудита или соответствия требованиям
    3. Кластеры с ограниченными ресурсами: кластеры, где ресурсы etcd ограничены и требуют оптимизации
    4. Продвинутая аналитика: команды, желающие проводить анализ и отчётность по паттернам выполнения CI/CD
    5. Мультикомандные среды: организации, где несколько команд используют инфраструктуру Tekton и нуждаются в изолированном просмотре своих данных CI/CD

    Архитектура и принципы

    Tekton Results построен по микросервисной архитектуре с тремя основными компонентами, которые совместно обеспечивают полное решение:

    Архитектура API Server

    API Server — центральный компонент, который:

    1. Обеспечивает доступ к данным: предоставляет gRPC и REST эндпоинты для сохранения и получения Results и Records
    2. Управляет аутентификацией: использует аутентификацию в стиле Kubernetes (service accounts, токены)
    3. Обеспечивает авторизацию: реализует контроль доступа на основе RBAC для ресурсов Results
    4. Обрабатывает сохранение данных: взаимодействует с базой данных (PostgreSQL)
    5. Поддерживает фильтрацию: реализует CEL (Common Expression Language) для мощной фильтрации запросов

    API Server использует иерархию родитель-потомок, где:

    • Namespaces/workspaces — родители для Results
    • Results — родители для Records
    • Records содержат фактические данные выполнения

    Архитектура Watcher

    Watcher работает как контроллер Kubernetes, который:

    1. Отслеживает ресурсы: слушает события TaskRun и PipelineRun в кластере
    2. Определяет группировку: использует аннотации, метки и owner references для группировки связанных ресурсов
    3. Создаёт/обновляет Records: сохраняет данные выполнения в базе данных Results через API Server
    4. Аннотирует ресурсы: добавляет идентификаторы Result к исходным ресурсам Kubernetes
    5. Управляет удалением: опционально удаляет завершённые ресурсы после их сохранения в базе данных

    Watcher использует несколько стратегий для группировки связанных ресурсов:

    • аннотация results.tekton.dev/result
    • метка triggers.tekton.dev/triggers-eventid
    • owner references на PipelineRuns
    • автоматическая генерация новых имён Result, если информация для группировки отсутствует

    Архитектура агента политики хранения (Retention Policy Agent)

    Агент политики хранения отвечает за:

    1. Планирование очистки: запуск задач по очистке согласно настроенному расписанию
    2. Применение политики хранения: удаление данных, срок хранения которых истёк
    3. Управление размером базы данных: предотвращение бесконтрольного роста базы данных Results

    Модель данных подробно

    Структура Result

    Result содержит:

    Result
    ├── metadata
    │   ├── name
    │   ├── uid
    │   ├── createTime
    │   ├── updateTime
    │   └── annotations (пары ключ-значение)
    └── summary
        ├── type (например, PIPELINE_RUN, TASK_RUN)
        ├── status (SUCCESS, FAILURE, TIMEOUT, CANCELLED, UNKNOWN)
        ├── startTime
        ├── endTime
        └── annotations (пары ключ-значение)

    Структура Record

    Record содержит:

    Record
    ├── name
    ├── data
    │   ├── type (например, tekton.dev/v1.TaskRun, tekton.dev/v1.PipelineRun, results.tekton.dev/v1alpha3.Log)
    │   └── value (сериализованные данные)
    └── createTime

    Аутентификация и авторизация

    Tekton Results использует аутентификацию в стиле Kubernetes и RBAC для контроля доступа:

    1. Аутентификация: использует токены service account, имитацию пользователя и другие методы аутентификации Kubernetes
    2. Авторизация: реализует RBAC с ресурсами (results, records) и действиями (get, list, create, update, delete)
    3. Изоляция по namespace: ограничивает права доступа в пределах namespace для мультиарендных сред

    Примеры ролей RBAC:

    • tekton-results-readonly: доступ только для чтения Results и Records
    • tekton-results-readwrite: доступ для чтения и записи Results и Records
    • tekton-results-admin: полный доступ, включая удаление Results и Records

    Расширенная фильтрация

    Tekton Results использует CEL (Common Expression Language) для мощных возможностей фильтрации:

    # Фильтрация по статусу Result
    results.tekton.dev/v1alpha2/parents/default/results?filter=summary.status==SUCCESS
    
    # Фильтрация по времени создания
    results.tekton.dev/v1alpha2/parents/default/results?filter=create_time>timestamp('2023-01-01T00:00:00Z')
    
    # Фильтрация Records по типу данных
    results.tekton.dev/v1alpha2/parents/default/results/123/records?filter=data_type=='tekton.dev/v1.TaskRun'
    
    # Сложная фильтрация с логическими операторами
    results.tekton.dev/v1alpha2/parents/default/results?filter=summary.status==SUCCESS&&create_time>timestamp('2023-01-01T00:00:00Z')

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

    Параметры Watcher

    ПараметрОписаниеЗначение по умолчаниюИспользование
    completed_run_grace_periodВремя ожидания после завершения перед удалением ресурсов0 (без удаления)Установите длительность (например, 24h) для автоматического удаления
    check_ownerПроверять наличие owner references перед удалениемfalseУстановите true, чтобы предотвратить удаление ресурсов с owner references
    store_deadlineМаксимальное время ожидания сохранения ресурса10mУвеличьте для больших ресурсов или медленных соединений с базой данных

    Параметры API Server

    ПараметрОписаниеЗначение по умолчаниюИспользование
    AUTH_IMPERSONATEВключить имитацию пользователяfalseУстановите true, чтобы разрешить service accounts имитировать пользователей
    page_sizeМаксимальное количество результатов на страницу100Настройте в зависимости от производительности запросов и потребностей клиента

    Параметры политики хранения

    ПараметрОписаниеЗначение по умолчаниюИспользование
    runAtВремя запуска задачи политики хранения0 0 * * * (ежедневно)Cron-выражение для планирования очистки
    maxRetention(Устаревший) Максимальное время хранения данных720h (30 дней)(Устаревший) Время хранения данных перед удалением
    defaultRetentionМаксимальное время хранения данных720h (30 дней)Время хранения данных перед удалением

    Ссылки