Руководство по настройке шаблонов Pod
Содержание
Быстрая навигацияЗачем использовать шаблоны Pod?Что такое шаблоны Pod?Когда использовать шаблоны PodКакой метод настройки выбратьКак настроить шаблоны PodМетод 1: Конфигурация на уровне TaskRunМетод 2: Конфигурация на уровне PipelineRunМетод 3: Конфигурация PipelineRun с taskRunSpecsМетод 4: Глобальная конфигурация по умолчанию (TektonConfig)Сравнение методов конфигурацииПриоритет конфигурацииПримеры конфигурацийПример 1: Безопасная конфигурация по умолчанию (рекомендуется)Пример 2: Секреты для загрузки образовПример 3: Планирование узловПример 4: Переопределение для кастомных образов с root-доступомПример 5: Использование официальных задач с устаревшей глобальной конфигурациейПример 6: Временное переопределение во время активной миграцииВажные замечанияРаспространённые ошибкиОбласть и время действия конфигурацииНеобходимые праваЛучшие практикиПроверкаДля глобальной конфигурацииДля конфигурации TaskRun/PipelineRunСвязанная документацияБыстрая навигация
Начало работы:
- Как настроить шаблоны Pod? — Ознакомьтесь с 4 методами настройки
- Какой метод выбрать? — Руководство по выбору
- Как проверить мою конфигурацию? — Команды для проверки
Распространённые сценарии:
- Моим кастомным образам нужен root-доступ — Как безопасно переопределить
- Я мигрировал с Tekton v3 с глобальным runAsUser: 0 — Как использовать официальные задачи Tekton
Устранение неполадок:
- Создание Pod завершается с ошибкой — Проверьте распространённые ошибки и решения
Зачем использовать шаблоны Pod?
При запуске Tekton Pipelines в продуктивных средах вы, вероятно, столкнётесь с ситуациями, когда стандартная конфигурация Pod не соответствует вашим требованиям:
Распространённые проблемы:
- Требования политики безопасности: Ваша организация требует, чтобы все контейнеры запускались не от root-пользователя, но некоторые Pipeline завершаются с ошибками доступа.
- Доступ к приватным реестрам: Pipeline использует кастомные образы из приватного реестра, но Pods не могут загрузить образы из-за отсутствия учётных данных.
- Планирование ресурсов: Нужно запускать задачи сборки на высокопроизводительных узлах с SSD, но Pods назначаются на обычные узлы, что замедляет сборку.
- Мультиарендные среды: Разным командам нужны разные настройки безопасности, квоты ресурсов или размещение узлов для их Pipeline.
- Требования соответствия: Необходимо соблюдать стандарты соответствия (PCI DSS, HIPAA и др.), которые требуют определённых настроек безопасности Pod.
Без шаблонов Pod:
Пришлось бы изменять отдельные определения Task или создавать несколько версий одной и той же задачи с разными конфигурациями, что приводит к:
- Дублированию конфигураций и увеличению затрат на поддержку
- Сложностям в обеспечении единых политик безопасности
- Невозможности адаптировать задачи из сообщества (например, из каталога Tekton) под вашу среду
Как шаблоны Pod решают эти проблемы:
Шаблоны Pod предоставляют гибкую многоуровневую систему конфигурации, которая позволяет:
- Задать безопасные базовые настройки для всех Pipeline в кластере
- Переопределять настройки для конкретных Pipeline или задач при необходимости
- Использовать официальные задачи из каталога Tekton, адаптируя их под вашу среду
- Разделять логику задач и конфигурацию среды выполнения
Что такое шаблоны Pod?
Шаблоны Pod — это поля конфигурации, позволяющие настраивать спецификации Pod для TaskRun и PipelineRun в Tekton. Они определяют часть PodSpec, которую Tekton использует для настройки Pod, выполняющих ваши задачи и Pipeline.
Шаблоны Pod можно настраивать на разных уровнях (глобальном, на уровне Pipeline, на уровне задачи), что обеспечивает гибкость применения конфигураций с разным охватом и приоритетом.
Подробную информацию о концепциях шаблонов Pod и поддерживаемых полях смотрите в разделе Pod Templates Concepts.
Когда использовать шаблоны Pod
Шаблоны Pod полезны в следующих случаях:
- Требования безопасности: настройка securityContext (например,
runAsUser,fsGroup) для соответствия политикам безопасности - Доступ к приватным реестрам: настройка image pull secrets для доступа к приватным контейнерным реестрам
- Планирование узлов: настройка nodeSelector, tolerations или affinity для управления размещением Pod
- Управление ресурсами: настройка ресурсов вычислений, томов и требований к хранилищу
- Переменные окружения: установка переменных окружения для выполнения Pipeline
- Сетевые настройки: настройка DNS-политик и сетевых параметров
- Согласованность: обеспечение единых сред выполнения для множества запусков Pipeline
Какой метод настройки выбрать
Используйте это руководство для быстрого выбора подходящего метода настройки:
Как настроить шаблоны Pod
Шаблоны Pod можно настроить на четырёх разных уровнях, каждый из которых служит разным целям и имеет разный охват воздействия.
Метод 1: Конфигурация на уровне TaskRun
Настройте шаблон Pod непосредственно в TaskRun. Это влияет только на конкретный запуск TaskRun.
Сценарий использования: Применить специфичные настройки к отдельным запускам TaskRun.
Место конфигурации: spec.podTemplate в TaskRun
Пример:
Метод 2: Конфигурация на уровне PipelineRun
Настройте шаблон Pod на уровне PipelineRun. Это влияет на все задачи внутри PipelineRun, если не переопределено в taskRunSpecs.
Сценарий использования: Применить единые настройки ко всем задачам в запуске Pipeline.
Место конфигурации: spec.taskRunTemplate.podTemplate в PipelineRun
Пример:
Метод 3: Конфигурация PipelineRun с taskRunSpecs
Настройте шаблон Pod для конкретных задач внутри PipelineRun. Это позволяет тонко управлять отдельными задачами в Pipeline.
Сценарий использования: Применить разные настройки к разным задачам в одном запуске Pipeline.
Место конфигурации: spec.taskRunSpecs[].podTemplate в PipelineRun
Пример:
Метод 4: Глобальная конфигурация по умолчанию (TektonConfig)
Настройте глобальный шаблон Pod по умолчанию, который применяется ко всем TaskRun и PipelineRun в кластере.
Сценарий использования: Обеспечить единые базовые настройки для всех запусков Pipeline в кластере.
Место конфигурации: spec.pipeline.default-pod-template в TektonConfig
Рекомендуется использовать пользователя без root-прав (например, runAsUser: 65532) в качестве конфигурации по умолчанию, чтобы следовать принципу наименьших привилегий. Официальные задачи Tekton рассчитаны на работу с UID 65532. Переопределяйте на runAsUser: 0 только для конкретных TaskRun/PipelineRun, если это необходимо для кастомных образов или устаревших приложений.
UID 65532 — стандартный идентификатор пользователя без root-прав, используемый официальными задачами Tekton и большинством задач из каталога Tekton. Этот ID соответствует принципу наименьших привилегий и широко применяется в экосистеме Tekton для обеспечения безопасности.
fsGroup: задаёт идентификатор группы для всех контейнеров в Pod. Это гарантирует, что файлы, создаваемые Pod, принадлежат указанной группе, обеспечивая корректные права доступа к файлам.
Шаги:
Шаг 1
Отредактируйте ресурс TektonConfig:
Шаг 2
Добавьте или измените конфигурацию spec.pipeline.default-pod-template:
Шаг 3
Проверьте конфигурацию:
Сравнение методов конфигурации
Правило приоритета: Если одно и то же поле настроено на нескольких уровнях, применяется конфигурация с более высоким приоритетом. TaskRunSpecs (высший) > PipelineRun/TaskRun (средний) > Глобальный (низший).
Приоритет конфигурации
Конфигурации шаблонов Pod подчиняются чёткой иерархии приоритетов. При наличии нескольких настроек для одного поля применяется настройка с более высоким приоритетом.
Порядок приоритета (от высшего к низшему):
- PipelineRun taskRunSpecs podTemplate — самый высокий приоритет, применяется к конкретным задачам
- PipelineRun podTemplate или TaskRun podTemplate — средний приоритет, применяется на уровне Pipeline или задачи
- Глобальный default-pod-template — самый низкий приоритет, применяется ко всем запускам
Поведение слияния:
- Переменные окружения: сливаются по имени; значения с более высоким приоритетом переопределяют нижестоящие
- Тома (volumes): сливаются по имени; значения с более высоким приоритетом переопределяют нижестоящие
- Другие поля: конфигурация с более высоким приоритетом полностью заменяет нижестоящую
Пример:
Если у вас есть:
- Глобальная конфигурация:
runAsUser: 65532(безопасный дефолт) - Конфигурация PipelineRun:
runAsUser: 0(переопределение для кастомных образов) - Конфигурация TaskRunSpec:
runAsUser: 65532(восстановление безопасного дефолта для официальных задач)
То результат будет:
- Конкретная задача (официальная):
runAsUser: 65532 - Другие задачи в Pipeline (кастомные образы):
runAsUser: 0
Примеры конфигураций
Пример 1: Безопасная конфигурация по умолчанию (рекомендуется)
Сценарий: Задать безопасную конфигурацию с пользователем без root для всех задач Pipeline. Это рекомендуемая базовая конфигурация, соответствующая лучшим практикам безопасности.
Глобальная конфигурация:
Примечание: Официальные задачи Tekton и задачи из каталога рассчитаны на работу с UID 65532. Эта конфигурация гарантирует безопасное выполнение всех Pipeline по умолчанию.
Пример 2: Секреты для загрузки образов
Сценарий: Настроить image pull secrets для доступа к приватным реестрам.
Конфигурация PipelineRun:
Пример 3: Планирование узлов
Сценарий: Запускать задачи сборки на высокопроизводительных узлах.
Конфигурация TaskRunSpecs:
Пример 4: Переопределение для кастомных образов с root-доступом
Сценарий: Глобальный дефолт использует безопасного пользователя без root (65532), но у вас есть pipeline с кастомными образами, которым нужен root-доступ. Используйте TaskRunSpecs для переопределения конкретных задач, сохраняя безопасные дефолты для официальных задач.
Рекомендация: Переопределяйте runAsUser в 0 только для конкретных задач, которым действительно нужен root-доступ. Пусть официальные задачи Tekton используют безопасный дефолт (65532).
Пример 5: Использование официальных задач с устаревшей глобальной конфигурацией
Сценарий: Вы мигрировали с Alauda DevOps Tekton v3 на Alauda DevOps Pipelines и установили глобальный default-pod-template с runAsUser: 0 для обратной совместимости с существующими кастомными образами. Теперь хотите использовать официальные задачи из каталога Tekton, которым требуется runAsUser: 65532 и fsGroup: 65532.
Решение: Переопределите глобальную конфигурацию на уровне PipelineRun для Pipeline, использующих официальные задачи.
Текущая глобальная конфигурация (установлена при миграции):
Конфигурация PipelineRun для официальных задач:
Альтернатива: Используйте TaskRunSpecs для смешанных сценариев:
Долгосрочная рекомендация: Постепенно обновляйте кастомные образы для поддержки пользователей без root, затем измените глобальный дефолт на runAsUser: 65532 для повышения безопасности.
Пример 6: Временное переопределение во время активной миграции
Сценарий: Вы сейчас мигрируете с Alauda DevOps Tekton v3 на Alauda DevOps Pipelines, и ваши кастомные образы ещё не обновлены для поддержки пользователей без root. Нужен временный способ запускать устаревшие Pipeline, пока вы обновляете образы.
Контекст: В отличие от Примера 5 (где миграция завершена с глобальным runAsUser: 0), этот сценарий для пользователей, у которых:
- Безопасный глобальный дефолт (
runAsUser: 65532) - Активная миграция устаревших Pipeline
- Необходимы временные переопределения при обновлении образов
Временная конфигурация PipelineRun:
Путь миграции:
- Краткосрочно: Используйте это переопределение для устаревших Pipeline, требующих root
- Среднесрочно: Обновите кастомные контейнерные образы для поддержки пользователей без root (UID 65532)
- Долгосрочно: Уберите эти переопределения и опирайтесь на безопасный глобальный дефолт
Важно: Это временное решение на время активной миграции.
Важные замечания
Распространённые ошибки
Ниже перечислены самые частые проблемы, с которыми сталкиваются пользователи. Ознакомьтесь с ними перед настройкой шаблонов Pod:
-
❌ Установка глобального runAsUser в 0: Не устанавливайте
runAsUser: 0в глобальномdefault-pod-template. Это нарушает лучшие практики безопасности и подвергает все Pipeline излишнему риску. Всегда используйтеrunAsUser: 65532как глобальный дефолт. Если нужен root-доступ, переопределяйте только на уровне TaskRun/PipelineRun. -
❌ Конфликты securityContext: Убедитесь, что настройки securityContext на уровне задачи (например,
runAsNonRoot: true) совместимы с securityContext шаблона Pod. Частая ошибка:container's runAsUser breaks non-root policy. Решения смотрите в Troubleshooting: Custom Image Pod Creation Failed. -
❌ Непонимание приоритета конфигураций: Помните, что конфигурации с более высоким приоритетом переопределяют более низкие:
- TaskRunSpecs (высший) > PipelineRun/TaskRun (средний) > Глобальный (низший)
- Если конфигурация не применяется, проверьте наличие переопределений с более высоким приоритетом.
-
❌ Влияние глобальной конфигурации: Будьте осторожны при изменении глобального
default-pod-template, так как это влияет на ВСЕ Pipeline в кластере. Сначала тестируйте изменения на уровне TaskRun/PipelineRun. -
❌ Форматирование YAML: При настройке
default-pod-templateв TektonConfig используйте символ pipe (|) для корректного многострочного форматирования YAML:
Область и время действия конфигурации
- Глобальная конфигурация: Влияет на все новые TaskRun и PipelineRun после применения конфигурации. Не влияет на уже запущенные выполнения.
- Конфигурация TaskRun/PipelineRun: Влияет только на конкретный запуск.
- Изменения конфигурации: Применяются немедленно для новых запусков. Перезапуск компонентов Tekton не требуется.
Необходимые права
- Глобальная конфигурация: Требуются права на уровне кластера для изменения ресурса TektonConfig (обычно cluster-admin или эквивалент).
- Конфигурация TaskRun/PipelineRun: Требуются права на уровне namespace для создания/изменения ресурсов TaskRun или PipelineRun.
Лучшие практики
-
Следуйте лучшим практикам безопасности: Всегда используйте пользователя без root (
runAsUser: 65532) как глобальный дефолт. Официальные задачи Tekton рассчитаны на UID 65532. Переопределяйте наrunAsUser: 0только для задач, которым действительно нужен root. -
Начинайте с безопасных глобальных дефолтов: Настройте безопасные базовые параметры в глобальном
default-pod-template: -
Переопределяйте выборочно: Если у вас есть кастомные образы, требующие root-доступа, переопределяйте ТОЛЬКО на уровне TaskRun или taskRunSpecs для этих конкретных задач. Не меняйте глобальный дефолт на
runAsUser: 0. -
Используйте TaskRunSpecs для тонкого контроля: Если разные задачи в Pipeline требуют разных securityContext (например, кастомные образы и официальные задачи), применяйте разные конфигурации через
taskRunSpecs. -
Документируйте исключения по безопасности: Чётко фиксируйте, почему конкретным задачам нужен root-доступ (
runAsUser: 0). Регулярно пересматривайте эти исключения, чтобы по возможности их устранить. -
Тестируйте изменения конфигурации: Проверяйте изменения шаблонов Pod в непроизводственных средах перед применением в продуктиве, особенно изменения securityContext.
Проверка
После применения конфигураций шаблонов Pod убедитесь, что они работают:
Для глобальной конфигурации
Проверьте, что конфигурация применена в ConfigMap:
Ожидаемый вывод должен содержать ваш настроенный шаблон Pod.
Для конфигурации TaskRun/PipelineRun
Шаг 1: Найдите Pod, созданный вашим TaskRun или PipelineRun
Шаг 2: Проверьте спецификацию Pod
Связанная документация
- Pod Templates Concepts — Подробное объяснение шаблонов Pod, поддерживаемых полей и поведения слияния
- Troubleshooting: Custom Image Pod Creation Failed — Решения распространённых проблем с конфигурацией шаблонов Pod
- Adjusting Optional Configuration Items — Общее руководство по настройке опций TektonConfig
- Документация Kubernetes PodSpec — Официальная справка по PodSpec Kubernetes