• Русский
  • 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. Определяет группировку: использует аннотации, метки и ссылки на владельцев для группировки связанных ресурсов
    3. Создаёт/обновляет Records: сохраняет данные выполнения в базе данных Results через API Server
    4. Аннотирует ресурсы: добавляет идентификаторы Result к исходным ресурсам Kubernetes
    5. Управляет удалением: опционально удаляет завершённые ресурсы после их сохранения в базе данных

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

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

    Архитектура Retention Policy Agent

    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Проверять ссылки на владельцев перед удалениемfalseУстановить true, чтобы предотвратить удаление ресурсов с владельцами
    store_deadlineМаксимальное время ожидания сохранения ресурса10mУвеличить для больших ресурсов или медленных соединений с базой данных

    Параметры API Server

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

    Параметры Retention Policy

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

    Ссылки