Руководство по настройке шаблонов 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 не соответствует вашим требованиям:
Распространённые проблемы:
- Требования политики безопасности: Ваша организация требует, чтобы все контейнеры запускались от имени непривилегированного пользователя, но некоторые Pipeline завершаются с ошибками доступа.
- Доступ к приватным реестрам: Pipeline использует кастомные образы из приватного реестра, но Pods не могут загрузить образы из-за отсутствия учётных данных.
- Планирование ресурсов: Нужно запускать задачи сборки на высокопроизводительных узлах с SSD, но Pods назначаются на обычные узлы, что замедляет сборку.
- Мультиарендные среды: Разным командам нужны разные настройки безопасности, квоты ресурсов или размещение на узлах для их Pipeline.
- Требования соответствия: Необходимо соблюдать стандарты (PCI DSS, HIPAA и др.), которые требуют определённых настроек безопасности Pod.
Без шаблонов Pod:
Пришлось бы изменять определения отдельных задач или создавать несколько версий одной задачи с разными настройками, что ведёт к:
- Дублированию конфигураций и усложнению поддержки
- Трудностям с обеспечением единых политик безопасности
- Невозможности адаптировать задачи из сообщества (например, из каталога 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
Рекомендуется использовать непривилегированного пользователя (например, runAsUser: 65532) в качестве конфигурации по умолчанию, чтобы следовать принципу наименьших привилегий. Официальные задачи Tekton рассчитаны на работу с UID 65532. Переопределяйте runAsUser: 0 только для конкретных TaskRun/PipelineRun, если это требуется кастомными образами или устаревшими приложениями.
UID 65532 — стандартный ID непривилегированного пользователя, используемый официальными задачами Tekton и большинством задач из каталога Tekton. Этот ID соответствует принципу наименьших привилегий и широко принят в экосистеме Tekton для обеспечения безопасности.
fsGroup: Устанавливает ID группы для всех контейнеров в 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: Безопасная конфигурация по умолчанию (рекомендуется)
Сценарий: Задать безопасную конфигурацию с непривилегированным пользователем для всех задач Pipeline. Это рекомендуемая базовая конфигурация, соответствующая лучшим практикам безопасности.
Глобальная конфигурация:
Примечание: Официальные задачи Tekton и задачи из каталога рассчитаны на работу с UID 65532. Эта конфигурация гарантирует, что все запуски Pipeline выполняются безопасно по умолчанию.
Пример 2: Секреты для загрузки образов
Сценарий: Настроить image pull secrets для доступа к приватным реестрам.
Конфигурация PipelineRun:
Пример 3: Планирование на узлах
Сценарий: Запускать задачи сборки на высокопроизводительных узлах.
Конфигурация TaskRunSpecs:
Пример 4: Переопределение для кастомных образов, требующих 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 для смешанных сценариев:
Долгосрочная рекомендация: Постепенно обновляйте кастомные образы для поддержки непривилегированного пользователя, затем измените глобальный дефолт на runAsUser: 65532 для повышения безопасности.
Пример 6: Временное переопределение во время активной миграции
Сценарий: Вы сейчас мигрируете с Alauda DevOps Tekton v3 на Alauda DevOps Pipelines, и ваши кастомные образы ещё не обновлены для поддержки непривилегированного пользователя. Вам нужно временное решение для запуска устаревших Pipeline, пока вы обновляете образы.
Контекст: В отличие от Примера 5 (где миграция завершена с глобальным runAsUser: 0), этот сценарий для пользователей, у которых:
- Безопасный глобальный дефолт (
runAsUser: 65532) - Активная миграция устаревших Pipeline
- Необходимы временные переопределения при обновлении образов
Временная конфигурация PipelineRun:
Путь миграции:
- Краткосрочно: Используйте это переопределение для устаревших Pipeline, которым нужен 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.
Лучшие практики
-
Следуйте лучшим практикам безопасности: Всегда используйте непривилегированного пользователя (
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