• Русский
  • Результаты Tekton

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

    Глоссарий

    ТерминОпределение
    РезультатРесурс верхнего уровня, который группирует связанные Записи вместе, представляя собой логическую единицу работы
    ЗаписьИндивидуальный экземпляр данных (TaskRun, PipelineRun, Log), который принадлежит Результату
    НаблюдательКонтроллер Kubernetes, который отслеживает TaskRuns и PipelineRuns и хранит их в базе данных Results
    API СерверgRPC/REST сервер, который предоставляет доступ к сохраненным Результатам и Записям
    Политика храненияПравила, которые определяют, как долго данные хранятся в базе данных Results

    Почему нам нужны Результаты Tekton

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

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

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

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

    Как Результаты Tekton решают эти проблемы

    Результаты Tekton предлагают комплексное решение, которое:

    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
    • Интегрированное управление журналами: Хранит журналы вместе с данными выполнения для всесторонней истории конвейера
    • Автоматическая очистка: Управляет жизненным циклом данных через настраиваемые политики хранения

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

    Результаты Tekton особенно ценны в следующих сценариях:

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

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

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

    Архитектура API сервера

    API сервер является центральным компонентом, который:

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

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

    • Пространства имен/рабочие пространства являются родителями Результатов
    • Результаты являются родителями Записей
    • Записи содержат фактические данные выполнения

    Архитектура Наблюдателя

    Наблюдатель работает как контроллер Kubernetes, который:

    1. Отслеживает ресурсы: Слушает события TaskRun и PipelineRun в кластере
    2. Определяет группировку: Использует аннотации, метки и ссылки на владельца для группировки связанных ресурсов
    3. Создает/обновляет Записи: Хранит данные выполнения в базе данных Результатов через API сервер
    4. Аннотирует ресурсы: Добавляет идентификаторы Результата к оригинальным ресурсам Kubernetes
    5. Управляет удалением: При необходимости удаляет завершенные ресурсы после их хранения в базе данных

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

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

    Архитектура Агента политики хранения

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

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

    Модель данных в деталях

    Структура Результата

    Результат содержит:

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

    Структура Записи

    Запись содержит:

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

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

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

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

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

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

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

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

    # Фильтровать по статусу Результата
    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')
    
    # Фильтровать Записи по типу данных
    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')

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

    Параметры Наблюдателя

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

    Параметры API сервера

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

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

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

    Ссылки