Workspaces
Рабочее пространство (Workspace) — это декларация файловой системы, которая требуется Task или Pipeline во время выполнения. Workspaces позволяют задачам объявлять части файловой системы, которые должны быть предоставлены во время выполнения, обеспечивая обмен данными между задачами, постоянное хранение, а также монтирование секретов, конфигураций или общих инструментов.
Содержание
Зачем нужны WorkspacesТрадиционные проблемы хранения в CI/CDРешение TektonПреимуществаСценарии использованияОграничения и лимитыПринципыОбъявление WorkspaceПривязка WorkspaceПримеры конфигурацииБазовое Workspace в задачеНеобязательное Workspace в задачеВажные параметрыФлаг ReadOnlyСценарии использованияПринципыПример конфигурацииФлаг OptionalСценарии использованияПринципыПример конфигурацииИзолированные WorkspacesСценарии использованияПринципыПример конфигурацииИсточники томовPersistentVolumeClaimСценарии использованияПринципыПример конфигурацииEmptyDirСценарии использованияПринципыПример конфигурацииConfigMap и SecretСценарии использованияПринципыПример конфигурацииСсылкиЗачем нужны Workspaces
Традиционные проблемы хранения в CI/CD
В традиционных системах CI/CD обмен данными между шагами или задачами сталкивается с рядом проблем:
- Обмен данными: сложности с передачей данных между разными этапами пайплайна
- Конфигурация хранения: сложная настройка постоянного хранилища
- Управление учетными данными: небезопасные методы предоставления учетных данных задачам
- Гибкость: ограниченный выбор типов и конфигураций хранилища
- Повторное использование: задачи часто содержат жестко заданные предположения о расположении хранилища
Решение Tekton
Workspaces в Tekton решают эти проблемы следующим образом:
- Декларативный подход: задачи объявляют свои потребности в хранилище без указания реализации
- Привязка во время выполнения: детали хранилища предоставляются во время выполнения, а не жестко прописываются в задачах
- Гибкая реализация: Workspaces могут быть реализованы с помощью различных типов томов
- Обмен данными: Workspaces позволяют обмениваться данными между задачами в Pipeline
- Разделение ответственности: авторы задач определяют потребности в хранилище, пользователи предоставляют фактическое хранилище
Преимущества
- Гибкость: задачи могут работать с разными реализациями хранилища без изменений
- Повторное использование: задачи можно использовать в разных средах и с разными конфигурациями хранилища
- Безопасность: конфиденциальные данные можно безопасно предоставлять через соответствующие типы томов
- Постоянство: данные могут сохраняться между запусками задач с помощью PersistentVolumeClaims
- Изоляция: каждый TaskRun может иметь собственное изолированное хранилище
- Общий доступ: несколько задач могут совместно использовать данные через одно Workspace
Сценарии использования
Workspaces полезны в различных сценариях, включая:
- Доступ к исходному коду: предоставление исходного кода задачам сборки и тестирования
- Хранение артефактов: сохранение артефактов сборки между задачами
- Предоставление учетных данных: безопасная передача учетных данных задачам
- Общий доступ к конфигурациям: обмен файлами конфигурации между задачами
- Хранение кэша: поддержание кэша зависимостей или артефактов сборки
- Общие инструменты: предоставление доступа к общим инструментам и утилитам
Ограничения и лимиты
- Workspaces, основанные на PersistentVolumeClaims с режимом доступа ReadWriteOnce, могут монтироваться только на одном узле одновременно
- Workspaces, основанные на ConfigMaps или Secrets, ограничены размером 1 МБ
- Workspaces на базе ConfigMaps или Secrets всегда монтируются только для чтения
- Workspaces не поддерживают динамическое выделение томов без VolumeClaimTemplate
- Постоянство данных в Workspace зависит от типа тома
Принципы
Объявление Workspace
При объявлении Workspace:
- Задачи указывают имя и необязательные свойства Workspace
- Задачи определяют, как Workspace будет использоваться (только для чтения или с возможностью записи)
- Задачи могут указать путь монтирования по умолчанию для Workspace
- Задачи могут пометить Workspace как необязательное
- TaskRuns или PipelineRuns предоставляют фактическую реализацию хранилища
Привязка Workspace
При привязке Workspace:
- TaskRuns или PipelineRuns указывают источник тома для каждого Workspace
- Источниками томов могут быть PersistentVolumeClaims, ConfigMaps, Secrets или другие типы
- TaskRuns или PipelineRuns могут указать subPath внутри тома
- PipelineRuns определяют, как Workspaces разделяются между задачами
Примеры конфигурации
Базовое Workspace в задаче
Необязательное Workspace в задаче
Важные параметры
Флаг ReadOnly
Флаг readOnly указывает, будет ли задача изменять содержимое Workspace.
Сценарии использования
- Предотвращение случайного изменения исходного кода
- Совместное использование данных конфигурации, которые не должны изменяться
- Позволяет нескольким задачам безопасно одновременно обращаться к одному Workspace
- Предоставление учетных данных, которые не должны изменяться
Принципы
Workspaces с readOnly:
- Монтируются как тома только для чтения в контейнерах задачи
- Запрещают задачам запись в Workspace
- Обеспечивают более безопасный параллельный доступ нескольких задач
- Могут быть реализованы с помощью томов только для чтения, таких как ConfigMaps и Secrets
Пример конфигурации
Флаг Optional
Флаг optional указывает, что Workspace не обязателен для выполнения задачи.
Сценарии использования
- Предоставление необязательного кэша для повышения производительности
- Поддержка необязательной инъекции учетных данных
- Повышение гибкости задач в разных средах
- Позволяет задачам адаптироваться к наличию или отсутствию определенных данных
Принципы
Optional Workspaces:
- Не обязательно предоставлять в TaskRun
- Задачи должны обрабатывать ситуацию, когда Workspace не предоставлен
- Задачи могут проверять привязку Workspace с помощью переменной $(workspaces.name.bound)
- Обеспечивают более гибкие и повторно используемые задачи
Пример конфигурации
Изолированные Workspaces
Изолированные Workspaces позволяют ограничить доступ к конфиденциальным данным только определённым шагам внутри задачи.
Сценарии использования
- Ограничение доступа к учетным данным только тем шагам, которым они необходимы
- Защита конфиденциальной конфигурации от избыточного раскрытия
- Реализация принципа наименьших привилегий внутри задач
- Снижение риска утечки учетных данных
Принципы
Изолированные Workspaces:
- Монтируются только в тех шагах, которые явно их запрашивают
- Требуют установки флага enable-api-fields в значение "beta"
- Обеспечивают более безопасную работу с конфиденциальными данными
- Могут иметь разные пути монтирования в разных шагах
Пример конфигурации
Источники томов
PersistentVolumeClaim
PersistentVolumeClaims обеспечивают долговременное хранилище, которое может сохраняться дольше, чем TaskRun или PipelineRun.
Сценарии использования
- Обмен данными между задачами в Pipeline
- Сохранение артефактов сборки между запусками Pipeline
- Поддержание кэша зависимостей
- Хранение результатов тестов для последующего анализа
Принципы
PersistentVolumeClaims:
- Обеспечивают долговременное хранилище на базе Kubernetes PersistentVolumes
- Могут быть предварительно созданными или создаваться из VolumeClaimTemplate
- Поддерживают различные режимы доступа (ReadWriteOnce, ReadWriteMany, ReadOnlyMany)
- Могут использоваться совместно несколькими задачами в Pipeline
Пример конфигурации
EmptyDir
EmptyDir предоставляет временное хранилище, существующее только в течение жизни TaskRun.
Сценарии использования
- Временное хранилище для одного TaskRun
- Обмен данными между шагами в задаче
- Случаи, когда постоянство не требуется
- Тестирование и отладка задач
Принципы
EmptyDir:
- Создает временный каталог, существующий только во время TaskRun
- Автоматически очищается после завершения TaskRun
- Не может использоваться совместно между разными TaskRun
- Подходит для задач, которым не нужно сохранять данные
Пример конфигурации
ConfigMap и Secret
ConfigMaps и Secrets позволяют внедрять конфигурационные данные и конфиденциальную информацию в задачи.
Сценарии использования
- Предоставление конфигурационных файлов задачам
- Внедрение учетных данных для аутентификации
- Обеспечение настроек, специфичных для окружения
- Совместное использование небольших объемов данных только для чтения
Принципы
ConfigMaps и Secrets:
- Всегда монтируются как тома только для чтения
- Ограничены размером 1 МБ
- Должны существовать до создания TaskRun
- Подходят для конфигурационных данных и учетных данных