Руководство по настройке шаблонов Pod
Содержание
Быстрая навигацияЗачем использовать шаблоны Pod?Что такое шаблоны Pod?Когда использовать шаблоны PodКакой метод настройки выбратьКак настроить шаблоны PodМетод 1: Конфигурация на уровне TaskRunМетод 2: Конфигурация на уровне PipelineRunМетод 3: Конфигурация PipelineRun TaskRunSpecsМетод 4: Глобальная конфигурация по умолчанию (TektonConfig)Сравнение методов настройкиПриоритет конфигурацииПримеры конфигурацииПример 1: Безопасная конфигурация по умолчанию (рекомендуется)Пример 2: Image Pull SecretsПример 3: Планирование на узлахПример 4: Переопределение для custom images, которым нужен доступ rootПример 5: Использование официальных Tasks с устаревшей глобальной конфигурациейПример 6: Временное переопределение во время активной миграцииВажные соображенияРаспространенные ошибкиОбласть применения и момент применения конфигурацииНеобходимые праваЛучшие практикиПроверкаДля глобальной конфигурацииДля конфигурации TaskRun/PipelineRunСвязанная документацияБыстрая навигация
Начало работы:
- Как настроить шаблоны Pod? - См. 4 способа настройки
- Какой метод следует использовать? - Руководство по выбору
- Как проверить мою конфигурацию? - Команды для проверки
Типовые сценарии:
- Моим пользовательским образам нужен доступ root - Как безопасно переопределить
- Я мигрировал с Tekton v3 с глобальным runAsUser: 0 - Как использовать официальные Tekton Tasks
Устранение неполадок:
- Создание моего Pod завершается сбоем - Проверьте распространенные ошибки и способы их устранения
Зачем использовать шаблоны Pod?
При запуске Tekton Pipelines в продуктивных средах вы, скорее всего, столкнетесь со сценариями, когда конфигурация Pod по умолчанию не соответствует вашим требованиям:
Распространенные проблемы:
- Требования политики безопасности: Политики безопасности вашей организации требуют, чтобы все контейнеры запускались от пользователей без прав root, но некоторые выполнения Pipeline завершаются ошибками доступа.
- Доступ к частному registry: Ваш Pipeline использует пользовательские образы из частного registry, но Pod не могут загрузить образы из-за отсутствия учетных данных.
- Планирование ресурсов: Вам нужно, чтобы задачи сборки выполнялись на высокопроизводительных узлах с SSD-хранилищем, но Pod назначаются на обычные узлы, что приводит к медленной сборке.
- Мультиарендные среды: Разным командам требуются разные параметры безопасности, квоты ресурсов или размещение на узлах для своих Pipeline.
- Требования соответствия: Вы должны соответствовать определенным стандартам соответствия (PCI DSS, HIPAA и т. д.), которые предписывают конкретные настройки безопасности Pod.
Без шаблонов Pod:
Вам пришлось бы изменять отдельные определения Task или создавать несколько версий одной и той же Task с разными настройками, что приводит к:
- Дублированию конфигурации и дополнительным затратам на сопровождение
- Сложностям с обеспечением единых политик безопасности
- Невозможности адаптировать community Tasks (например, Tasks из Tekton catalog) под свою среду
Как шаблоны Pod решают эти проблемы:
Шаблоны Pod предоставляют гибкую многоуровневую систему конфигурации, которая позволяет:
- Задавать безопасные базовые настройки для всех Pipeline в вашем кластере
- При необходимости переопределять настройки для конкретных Pipeline или Task
- Использовать официальные Tasks из Tekton catalog и адаптировать их под свою среду
- Разделять логику Task и конфигурацию среды выполнения
Что такое шаблоны Pod?
Шаблоны Pod — это поля конфигурации, которые позволяют настраивать спецификации Pod для ваших Tekton TaskRun и PipelineRun. Они определяют часть PodSpec, которую Tekton использует для настройки Pod, выполняющих ваши Task и Pipeline.
Шаблоны Pod можно настраивать на разных уровнях (глобальном, на уровне pipeline, на уровне task), что обеспечивает гибкость применения конфигурации с разными областями действия и приоритетами.
Подробную информацию о концепциях шаблонов Pod и поддерживаемых полях см. в разделе Концепции Pod Templates.
Когда использовать шаблоны Pod
Шаблоны Pod полезны в следующих сценариях:
- Требования безопасности: Настройка security context (например,
runAsUser,fsGroup) для соответствия политикам безопасности - Доступ к частному registry: Настройка image pull secrets для доступа к частным container registry
- Планирование на узлах: Настройка node selector, toleration или правил affinity для управления размещением Pod
- Управление ресурсами: Настройка вычислительных ресурсов, томов и требований к хранилищу
- Переменные среды: Установка переменных среды для выполнения Pipeline
- Сетевая конфигурация: Настройка DNS policy и сетевых параметров
- Единообразие: Обеспечение согласованных сред выполнения для нескольких запусков Pipeline
Какой метод настройки выбрать
Используйте это руководство по выбору, чтобы быстро определить, какой метод настройки подходит для ваших задач:
Как настроить шаблоны Pod
Шаблоны Pod можно настраивать на четырех разных уровнях, каждый из которых служит своим целям и имеет разный масштаб влияния.
Метод 1: Конфигурация на уровне TaskRun
Настройте шаблон Pod непосредственно в TaskRun. Это влияет только на конкретное выполнение TaskRun.
Сценарий использования: Применение специальных настроек к отдельным выполнениям TaskRun.
Расположение конфигурации: spec.podTemplate в TaskRun
Пример:
Метод 2: Конфигурация на уровне PipelineRun
Настройте шаблон Pod на уровне PipelineRun. Это влияет на все Task внутри PipelineRun, если они не переопределены через taskRunSpecs.
Сценарий использования: Применение единых настроек ко всем Task в выполнении Pipeline.
Расположение конфигурации: spec.taskRunTemplate.podTemplate в PipelineRun
Пример:
Метод 3: Конфигурация PipelineRun TaskRunSpecs
Настройте шаблон Pod для конкретных Task внутри PipelineRun. Это позволяет выполнять тонкую настройку отдельных Task в Pipeline.
Сценарий использования: Применение разных настроек к разным Task в рамках одного выполнения Pipeline.
Расположение конфигурации: spec.taskRunSpecs[].podTemplate в PipelineRun
Пример:
Метод 4: Глобальная конфигурация по умолчанию (TektonConfig)
Настройте глобальный шаблон Pod по умолчанию, который применяется ко всем TaskRun и PipelineRun в кластере.
Сценарий использования: Применение единых базовых настроек ко всем выполнениям Pipeline в кластере.
Расположение конфигурации: spec.pipeline.default-pod-template в TektonConfig
Рекомендуется использовать пользователя без прав root (например, runAsUser: 65532) в качестве конфигурации по умолчанию, чтобы следовать принципу наименьших привилегий. Официальные Tekton Tasks рассчитаны на работу с UID 65532. Переопределяйте значение на runAsUser: 0 только для конкретных TaskRun/PipelineRun, если этого требуют пользовательские образы или устаревшие приложения.
UID 65532 — это стандартный идентификатор пользователя без прав root, который используется официальными Tekton Tasks и большинством Tasks из Tekton catalog. Этот идентификатор следует принципу наименьших привилегий и широко используется в экосистеме Tekton как best practice в области безопасности.
fsGroup: Задает идентификатор группы для всех контейнеров в Pod. Это гарантирует, что файлы, созданные Pod, будут принадлежать указанной группе, обеспечивая корректные права доступа к файлам.
Шаги:
Шаг 1
Отредактируйте ресурс TektonConfig:
Шаг 2
Добавьте или измените конфигурацию spec.pipeline.default-pod-template:
Шаг 3
Проверьте конфигурацию:
Сравнение методов настройки
Правило приоритета: Если одно и то же поле настроено на нескольких уровнях, действует конфигурация с более высоким приоритетом. TaskRunSpecs (высший) > PipelineRun/TaskRun (средний) > Global (низший).
Приоритет конфигурации
Конфигурации шаблонов Pod следуют четкой иерархии приоритетов. Когда для одного и того же поля существует несколько конфигураций, конфигурация с более высоким приоритетом переопределяет конфигурацию с более низким приоритетом.
Порядок приоритетов (от высшего к низшему):
- PipelineRun taskRunSpecs podTemplate - Наивысший приоритет, применяется к конкретным task
- PipelineRun podTemplate или TaskRun podTemplate - Средний приоритет, применяется на уровне pipeline или task
- Глобальный default-pod-template - Низший приоритет, применяется ко всем выполнениям
Поведение при объединении:
- Переменные среды: Объединяются по имени; значения с более высоким приоритетом переопределяют значения с более низким приоритетом
- Тома: Объединяются по имени; значения с более высоким приоритетом переопределяют значения с более низким приоритетом
- Другие поля: Конфигурация с более высоким приоритетом полностью заменяет конфигурацию с более низким приоритетом
Пример:
Если у вас есть:
- Глобальная конфигурация:
runAsUser: 65532(безопасное значение по умолчанию) - Конфигурация PipelineRun:
runAsUser: 0(переопределение для custom images) - Конфигурация TaskRunSpec:
runAsUser: 65532(восстановление безопасного значения по умолчанию для официальных Tasks)
Результат будет следующим:
- Конкретная task (использующая официальную Task):
runAsUser: 65532 - Другие task в pipeline (использующие custom images):
runAsUser: 0
Примеры конфигурации
Пример 1: Безопасная конфигурация по умолчанию (рекомендуется)
Сценарий: Задать безопасную конфигурацию по умолчанию с пользователем без прав root для всех Task в Pipeline. Это рекомендуемая базовая конфигурация, соответствующая best practice в области безопасности.
Глобальная конфигурация:
Примечание: Официальные Tekton Tasks и Tasks из catalog рассчитаны на работу с UID 65532. Эта конфигурация гарантирует, что все выполнения Pipeline будут по умолчанию запускаться безопасно.
Пример 2: Image Pull Secrets
Сценарий: Настройка image pull secrets для доступа к private registry.
Конфигурация PipelineRun:
Пример 3: Планирование на узлах
Сценарий: Запуск задач сборки на высокопроизводительных узлах.
Конфигурация TaskRunSpecs:
Пример 4: Переопределение для custom images, которым нужен доступ root
Сценарий: Глобальная конфигурация по умолчанию использует безопасного пользователя без прав root (65532), но у вас есть pipeline с custom images, которым нужен доступ root. Используйте TaskRunSpecs, чтобы переопределить настройки только для конкретных Task, сохраняя безопасные значения по умолчанию для официальных Tasks.
Лучшая практика: Переопределяйте runAsUser на 0 только для конкретных task, которым действительно нужен доступ root. Официальные Tekton Tasks должны использовать безопасное значение по умолчанию (65532).
Пример 5: Использование официальных Tasks с устаревшей глобальной конфигурацией
Сценарий: Вы мигрировали с Alauda DevOps Tekton v3 на Alauda DevOps Pipelines и задали глобальный default-pod-template со значением runAsUser: 0 для обратной совместимости с существующими custom images. Теперь вы хотите использовать официальные Tasks из Tekton catalog, которым требуются runAsUser: 65532 и fsGroup: 65532.
Решение: Переопределите глобальную конфигурацию на уровне PipelineRun для Pipeline, которые используют официальные Tasks.
Текущая глобальная конфигурация (задана во время миграции):
Конфигурация PipelineRun для официальных Tasks:
Альтернатива: Используйте TaskRunSpecs для смешанных сценариев:
Долгосрочная рекомендация: Постепенно обновите свои custom images, чтобы они поддерживали пользователей без прав root, а затем измените глобальное значение по умолчанию на runAsUser: 65532 для повышения безопасности.
Пример 6: Временное переопределение во время активной миграции
Сценарий: Вы в данный момент мигрируете с Alauda DevOps Tekton v3 на Alauda DevOps Pipelines, и ваши custom images еще не обновлены для поддержки пользователей без прав root. Вам нужно временное решение, чтобы запускать устаревшие pipeline, пока вы обновляете образы.
Контекст: В отличие от Примера 5 (где миграция завершена и глобально используется runAsUser: 0), этот сценарий предназначен для пользователей, которые:
- Имеют безопасное глобальное значение по умолчанию (
runAsUser: 65532) - Активно мигрируют устаревшие pipeline
- Нуждаются во временных переопределениях при обновлении container images
Временная конфигурация PipelineRun:
Путь миграции:
- Краткосрочно: Используйте это переопределение для устаревших pipeline, которым нужен root
- Среднесрочно: Обновите свои custom container images, чтобы они поддерживали пользователей без прав root (UID 65532)
- Долгосрочно: Удалите эти переопределения и полагайтесь на безопасное глобальное значение по умолчанию
Важно: Это временное обходное решение на период активной миграции.
Важные соображения
Распространенные ошибки
Это наиболее частые проблемы, с которыми сталкиваются пользователи. Ознакомьтесь с ними перед настройкой шаблонов Pod:
-
❌ Установка global runAsUser в 0: Не задавайте
runAsUser: 0в глобальномdefault-pod-template. Это нарушает лучшие практики безопасности и подвергает все выполнения Pipeline ненужному риску. Всегда используйтеrunAsUser: 65532как глобальное значение по умолчанию. Если вам нужен доступ root, переопределяйте значение только на уровне TaskRun/PipelineRun. -
❌ Конфликты security context: Убедитесь, что параметры security context на уровне Task (например,
runAsNonRoot: true) совместимы с security context шаблона Pod. Типичная ошибка:container's runAsUser breaks non-root policy. См. Устранение неполадок: Сбой создания Pod с custom image для решения. -
❌ Неверное понимание приоритета конфигурации: Помните, что конфигурации с более высоким приоритетом переопределяют конфигурации с более низким приоритетом:
- TaskRunSpecs (высший) > PipelineRun/TaskRun (средний) > Global (низший)
- Если конфигурация не применяется, проверьте наличие переопределений на более высоких уровнях приоритета.
-
❌ Влияние глобальной конфигурации: Будьте осторожны при изменении глобального
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 Tasks рассчитаны на работу с UID 65532. Переопределяйте значение наrunAsUser: 0только для конкретных task, которым требуются привилегии root. -
Начинайте с безопасных глобальных значений по умолчанию: Настройте безопасные базовые параметры в глобальном
default-pod-template: -
Переопределяйте выборочно: Если у вас есть custom images, которым нужен доступ root, переопределяйте настройки ТОЛЬКО на уровне TaskRun или taskRunSpecs для этих конкретных task. Не изменяйте глобальное значение по умолчанию на
runAsUser: 0. -
Используйте TaskRunSpecs для тонкой настройки: Когда разные task в pipeline требуют разных security context (например, custom images и официальные Tasks), используйте
taskRunSpecsдля применения разных конфигураций. -
Документируйте исключения безопасности: Четко фиксируйте, почему конкретным task нужен доступ root (
runAsUser: 0). Регулярно пересматривайте эти исключения, чтобы понять, можно ли их устранить. -
Проверяйте изменения конфигурации: Перед применением в production тестируйте изменения конфигурации шаблонов Pod в непроизводственных средах, особенно изменения security context.
Проверка
После применения конфигураций шаблонов Pod убедитесь, что они действительно применены:
Для глобальной конфигурации
Проверьте, что конфигурация применена к ConfigMap:
Ожидаемый вывод должен показывать настроенный вами шаблон Pod.
Для конфигурации TaskRun/PipelineRun
Шаг 1: Найдите Pod, созданный вашим TaskRun или PipelineRun
Шаг 2: Проверьте спецификацию Pod
Связанная документация
- Концепции Pod Templates - Подробное описание шаблонов Pod, поддерживаемых полей и поведения при объединении
- Устранение неполадок: Сбой создания Pod с custom image - Решения для распространенных проблем с настройкой шаблонов Pod
- Настройка дополнительных параметров конфигурации - Общее руководство по настройке параметров TektonConfig
- Документация Kubernetes PodSpec - Официальная справка по Kubernetes PodSpec