Workspaces
Workspace — это декларация файловой системы, которая требуется Task или Pipeline во время выполнения. Workspaces позволяют Task объявлять части файловой системы, которые должны быть предоставлены во время выполнения, обеспечивая обмен данными между Task, постоянное хранилище и монтирование секретов, конфигураций или общих инструментов.
Содержание
Зачем нужны WorkspacesТрадиционные проблемы хранения в CI/CDРешение TektonПреимуществаСценарии использованияОграничения и лимитыПринципыОбъявление WorkspaceПривязка WorkspaceПримеры конфигурацийБазовый Workspace в задачеНеобязательный Workspace в задачеВажные параметрыФлаг ReadOnlyСценарии использованияПринципыПример конфигурацииФлаг OptionalСценарии использованияПринципыПример конфигурацииИзолированные WorkspacesСценарии использованияПринципыПример конфигурацииИсточники томовPersistentVolumeClaimСценарии использованияПринципыПример конфигурацииEmptyDirСценарии использованияПринципыПример конфигурацииConfigMap и SecretСценарии использованияПринципыПример конфигурацииСсылкиЗачем нужны Workspaces
Традиционные проблемы хранения в CI/CD
В традиционных CI/CD системах обмен данными между шагами или задачами сталкивается с несколькими проблемами:
- Обмен данными: сложность обмена данными между разными этапами pipeline
- Настройка хранилища: сложная конфигурация для постоянного хранения
- Управление учетными данными: небезопасные методы предоставления учетных данных задачам
- Гибкость: ограниченные варианты типов и конфигураций хранилища
- Повторное использование: задачи часто имеют жестко заданные предположения о расположении хранилища
Решение 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
- Предоставление учетных данных, которые не должны изменяться
Принципы
ReadOnly Workspaces:
- Монтируются как тома только для чтения в контейнерах задачи
- Запрещают задачам запись в 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
- Подходят для конфигурационных данных и учетных данных