Pod Templates
Pod templates — это поля конфигурации в спецификациях TaskRun и PipelineRun, которые позволяют настраивать конфигурацию Pod для ваших рабочих нагрузок Tekton. Они определяют часть PodSpec, которую Tekton использует для настройки Pod, выполняющих ваши Tasks и Pipelines. Такая конфигурация позволяет настраивать среду выполнения без изменения основных определений Task или Pipeline.
Важно: Pod templates не являются отдельными ресурсами Kubernetes. Это поля конфигурации внутри спецификаций TaskRun и PipelineRun.
Содержание
Зачем нужны Pod TemplatesПроблемы конфигурации PodРешение TektonПреимуществаСценарии использованияОграничения и лимитацииПринципыОбработка Pod TemplateСтратегия объединения конфигурацийПорядок приоритетовПравила объединенияПримеры конфигурацийБазовая конфигурация Pod Template для TaskRunКонфигурация Pod Template для PipelineRunГлобальная конфигурация Pod TemplateTaskRunSpecs с конфигурацией Pod TemplateВажные параметрыПоддерживаемые поляВыбор узла и планированиеnodeSelectoraffinitytolerationsКонфигурация безопасностиsecurityContextУправление ресурсами и томамиvolumesСетевая конфигурацияdnsPolicyenableServiceLinksКонфигурация доступа к образамimagePullSecretsПеременные окруженияenvРекомендации по использованиюОрганизация конфигурацийВопросы безопасностиОптимизация ресурсовОбслуживаниеСсылкиЗачем нужны Pod Templates
Проблемы конфигурации Pod
Системы CI/CD на базе Kubernetes сталкиваются с рядом проблем конфигурации Pod:
- Согласованность среды: обеспечение единообразной среды выполнения для всех Tasks
- Управление ресурсами: указание вычислительных ресурсов, селекторов узлов и предпочтений планирования
- Безопасность: применение контекстов безопасности и контроля доступа
- Сеть и хранилище: настройка DNS-политик, томов и доступа к образам
Решение Tekton
Pod templates в Tekton решают эти задачи, предоставляя:
- Повторное использование: определение общих конфигураций для множества TaskRun и PipelineRun
- Настраиваемость: возможность кастомизации среды выполнения без изменения определений Task/Pipeline
- Гибкость: поддержка как глобальных, так и специфичных для выполнения конфигураций
Преимущества
- Согласованность: обеспечение единообразной среды выполнения для всех запусков Pipeline
- Гибкость: переопределение стандартных конфигураций Pod для конкретных случаев
- Повторное использование: однократное определение конфигураций с применением к множеству запусков
- Безопасность: применение политик безопасности и контроля доступа на уровне Pod
- Управление ресурсами: оптимизация выделения ресурсов и планирования
Сценарии использования
Pod templates полезны в различных сценариях, включая:
- Ресурсоёмкие задачи: настройка вычислительных ресурсов для Tasks сборки и тестирования
- Приложения с повышенными требованиями к безопасности: применение контекстов безопасности и контроля доступа
- Многоузловые кластеры: использование селекторов узлов и правил affinity для оптимального планирования
- Доступ к приватным реестрам: настройка секретов для доступа к приватным реестрам образов
- Сетевые требования: кастомизация DNS-политик и сетевых настроек
- Требования к хранилищу: определение томов и конфигураций хранилища
Ограничения и лимитации
- Конфигурация pod template влияет только на конфигурацию Pod, а не на логику Task или Pipeline
- Некоторые поля могут быть переопределены внутренними требованиями Tekton
- Глобальные конфигурации объединяются с конфигурациями, специфичными для выполнения
- Pod affinity assistant поддерживает только подмножество полей конфигурации pod template
- Конфигурация pod template не может изменять основную функциональность или поведение Tekton
Принципы
Обработка Pod Template
При указании конфигурации pod template:
- Tekton валидирует конфигурацию pod template
- Конфигурация объединяется с глобальной конфигурацией pod template (если есть)
- Для PipelineRun конфигурация применяется ко всем TaskRun, если не переопределена в taskRunSpecs
- Для TaskRun конфигурация применяется непосредственно к Pod
- Tekton создаёт Pod с объединённой конфигурацией
- Pod выполняет шаги Task или Pipeline с указанной конфигурацией
Стратегия объединения конфигураций
Конфигурации pod template объединяются по определённым правилам с чёткой иерархией приоритетов:
Порядок приоритетов
Конфигурации pod template объединяются в следующем порядке приоритетов (от высокого к низкому):
- PipelineRun taskRunSpecs podTemplate (высший приоритет) — конфигурации pod template, указанные в
taskRunSpecsдля конкретных задач внутри PipelineRun - PipelineRun podTemplate (средний приоритет) — конфигурации pod template, указанные на уровне PipelineRun
- Глобальный default-pod-template (низший приоритет) — глобальные конфигурации pod template, определённые в ConfigMap или TektonConfig
Если для одного и того же поля существуют несколько конфигураций, применяется конфигурация с более высоким приоритетом.
Правила объединения
- Переменные окружения (
env): объединяются по имени переменной в элементах массива. Если имена совпадают, используется элемент из TaskRun или PipelineRun - Тома (
volumes): объединяются по имени тома в элементах массива. Если имена совпадают, используется элемент из TaskRun или PipelineRun - Прочие поля: если поле присутствует в нескольких конфигурациях, приоритет имеет конфигурация с более высоким приоритетом
Примеры конфигураций
Базовая конфигурация Pod Template для TaskRun
Конфигурация Pod Template для PipelineRun
Глобальная конфигурация Pod Template
Если необходимо сохранить эту глобальную конфигурацию, рекомендуется использовать TektonConfig вместо ConfigMap.
TaskRunSpecs с конфигурацией Pod Template
Конфигурации pod template можно применять к конкретным задачам внутри PipelineRun с помощью TaskRunSpecs.
Важные параметры
Поддерживаемые поля
Конфигурация pod template поддерживает поля, перечисленные в таблице ниже.
Выбор узла и планирование
nodeSelector
Определяет метки узлов, которые должны присутствовать для планирования Pod.
Сценарии использования
- Обеспечение запуска Pods на определённых типах узлов (SSD, GPU и т.д.)
- Маршрутизация рабочих нагрузок на выделенную инфраструктуру
- Оптимизация использования ресурсов
Пример конфигурации
affinity
Позволяет тонко управлять планированием Pod на основе меток узлов.
Сценарии использования
- Предпочтение узлов с определёнными характеристиками
- Избегание определённых типов узлов
- Балансировка распределения нагрузки
Пример конфигурации
tolerations
Позволяет планировать Pods на узлах с соответствующими taints.
Сценарии использования
- Планирование Pods на выделенных или специализированных узлах
- Обработка сценариев обслуживания узлов
- Оптимизация распределения ресурсов
Пример конфигурации
Конфигурация безопасности
securityContext
Определяет атрибуты безопасности на уровне Pod и общие настройки контейнеров.
Сценарии использования
- Запуск контейнеров от имени непривилегированных пользователей
- Установка владельца группы файловой системы
- Настройка параметров SELinux
- Применение политик безопасности
Пример конфигурации
Управление ресурсами и томами
volumes
Определяет тома, которые контейнеры внутри Pod могут монтировать.
Сценарии использования
- Совместное использование данных между шагами
- Монтирование конфигурационных файлов
- Обеспечение постоянного хранилища
- Доступ к секретам и ConfigMap
Пример конфигурации
Сетевая конфигурация
dnsPolicy
Определяет DNS-политику для Pod.
Сценарии использования
- Настройка пользовательского разрешения DNS
- Обеспечение требований сетевой изоляции
- Оптимизация сетевой производительности
Пример конфигурации
enableServiceLinks
Определяет, будут ли сервисы в namespace Pod доступны в виде переменных окружения.
Сценарии использования
- Управление поведением обнаружения сервисов
- Оптимизация использования переменных окружения
- Поддержка требований устаревших приложений
Пример конфигурации
Конфигурация доступа к образам
imagePullSecrets
Определяет секреты, используемые при загрузке образов контейнеров.
Сценарии использования
- Доступ к приватным реестрам контейнеров
- Обработка аутентификации в реестрах
- Поддержка корпоративных конфигураций реестров
Пример конфигурации
Примечание: При настройке imagePullSecrets и отсутствии команды в Task, Tekton автоматически определит точку входа образа с использованием указанных секретов.
Переменные окружения
env
Определяет переменные окружения для Pod.
Сценарии использования
- Установка переменных среды сборки
- Конфигурация параметров приложения
- Передача данных конфигурации в контейнеры
Пример конфигурации
Рекомендации по использованию
Организация конфигураций
- Глобальные конфигурации: используйте для общих настроек, применимых ко всем запускам
- Конфигурации, специфичные для выполнения: используйте для уникальных требований или переопределений
- Конфигурации, специфичные для задач: используйте TaskRunSpecs для тонкого управления
Вопросы безопасности
- По возможности запускайте контейнеры от имени непривилегированных пользователей
- Используйте соответствующие securityContext
- Настраивайте image pull secrets для приватных реестров
- Применяйте принципы минимальных привилегий
Оптимизация ресурсов
- Используйте nodeSelector для маршрутизации нагрузок на подходящие узлы
- Настраивайте tolerations для специализированной инфраструктуры
- Устанавливайте адекватные лимиты и запросы ресурсов
- Оптимизируйте конфигурации томов для производительности
Обслуживание
- Поддерживайте конфигурации простыми и сфокусированными
- Документируйте цели и требования конфигураций
- Используйте систему контроля версий для конфигураций
- Тестируйте изменения конфигураций в непроизводственных средах