Проверка ConfigMap
Tekton Pruner использует ValidatingWebhook, чтобы гарантировать, что ConfigMap соответствуют требуемым спецификациям до их создания или обновления в кластере. В этом документе объясняется, как работает проверка и какие требования должны быть выполнены.
Содержание
ОбзорКак работает проверкаПравила проверки1. Обязательные labels2. Ограничения на selectors3. Требования к именованию3. Ограничения на namespace4. Проверка содержимого конфигурации5. Защита от удаления6. Принудительное применение глобальной конфигурацииРаспространенные ошибки проверкиОшибка: отсутствуют labelsОшибка: неверный тип конфигурацииОшибка: неверное имяОшибка: превышен глобальный лимитОшибка: удаление заблокированоУстранение неполадокПроверка состояния webhookПроверка валидацииОбход проверки (не рекомендуется)РекомендацииОбзор
Webhook pruner проверяет ConfigMap на соответствие следующим требованиям:
- Обеспечивать обязательные labels и соглашения об именовании
- Не допускать применения некорректных конфигураций
- Защищать от случайного удаления критически важных конфигураций
- Гарантировать, что конфигурации на уровне namespace соблюдают глобальные границы
Как работает проверка
Webhook проверки автоматически устанавливается вместе с pruner и перехватывает операции CREATE, UPDATE и DELETE для ConfigMap. Он проверяет только те ConfigMap, у которых есть label app.kubernetes.io/part-of: tekton-pruner, поэтому обычные ConfigMap в вашем кластере не затрагиваются.
Правила проверки
1. Обязательные labels
Все ConfigMap pruner ДОЛЖНЫ иметь следующие labels:
Проверки валидации:
- Должны присутствовать оба labels
app.kubernetes.io/part-ofдолжен быть равенtekton-prunerpruner.tekton.dev/config-typeдолжен иметь значениеglobalилиnamespace
Пример ошибки:
2. Ограничения на selectors
ВАЖНО: selectors (matchLabels/matchAnnotations) поддерживаются ТОЛЬКО в ConfigMap на уровне namespace (tekton-pruner-namespace-spec), НО НЕ в глобальных ConfigMap.
Допустимо — selectors в namespace ConfigMap:
Недопустимо — selectors в глобальном ConfigMap:
Пример ошибки:
Почему действует это ограничение?
- Сопоставление ресурсов на основе selectors требует доступа к labels/annotations ресурса во время выполнения
- Глобальные ConfigMap предназначены для кластерных значений по умолчанию, а не для сопоставления с конкретными ресурсами
- ConfigMap уровня namespace обеспечивают корректную область действия для динамического выбора ресурсов
См. также: Resource Groups — примеры использования selectors
3. Требования к именованию
Глобальная конфигурация:
- Имя: Должно быть
tekton-pruner-default-spec(фиксированное) - Namespace: Должен быть
tekton-pipelines(или системный namespace) - Label:
pruner.tekton.dev/config-type: global
Конфигурация namespace:
- Имя: Должно быть
tekton-pruner-namespace-spec(фиксированное) - Namespace: Должен находиться в пользовательском namespace (НЕ в системном namespace и НЕ в Tekton namespace)
- Label:
pruner.tekton.dev/config-type: namespace
Примеры ошибок:
3. Ограничения на namespace
Запрещенные namespace для конфигураций уровня namespace:
- System namespace:
kube-* - Tekton namespace:
tekton-pipelines,tekton-*
Попытка создать конфигурацию уровня namespace в этих местах будет отклонена.
Пример ошибки:
4. Проверка содержимого конфигурации
Webhook проверяет данные конфигурации, включая:
- Значения времени: ttlSecondsAfterFinished должен быть неотрицательным
- Ограничения истории: historyLimit, successfulHistoryLimit и failedHistoryLimit должны быть неотрицательными и не могут превышать глобальные максимумы, если они заданы
- Selectors (только для namespace ConfigMap): selectors по labels и annotations должны содержать допустимые пары ключ-значение; selectors по имени должны быть допустимыми именами ресурсов
Примечание: selectors (массивы pipelineRuns, taskRuns с matchLabels/matchAnnotations) обрабатываются только в ConfigMap уровня namespace. В глобальных ConfigMap они игнорируются.
5. Защита от удаления
Webhook предотвращает удаление глобальной конфигурации, если namespace-level конфигурации все еще существуют. Перед удалением глобальной конфигурации необходимо удалить все namespace-конфигурации. Namespace-конфигурации можно удалять без ограничений.
6. Принудительное применение глобальной конфигурации
При создании или обновлении конфигураций уровня namespace webhook получает глобальную конфигурацию и проверяет, что значения namespace не превышают глобальные максимумы, если они определены (например, maxTTLSecondsAfterFinished, maxHistoryLimit).
Распространенные ошибки проверки
Ошибка: отсутствуют labels
Решение: Добавьте в ConfigMap обязательные labels:
Ошибка: неверный тип конфигурации
Решение: Используйте только значения global или namespace для config-type.
Ошибка: неверное имя
Решение: Используйте точное требуемое имя:
- Global:
tekton-pruner-default-spec - Namespace:
tekton-pruner-namespace-spec
Ошибка: превышен глобальный лимит
Решение: Уменьшите значение в namespace до уровня, не превышающего глобальные ограничения, либо попросите администратора увеличить глобальный максимум.
Ошибка: удаление заблокировано
Решение: Сначала удалите все namespace-конфигурации:
Устранение неполадок
Проверка состояния webhook
Проверка валидации
Создайте некорректный ConfigMap, чтобы убедиться, что webhook работает:
Ожидаемая ошибка: admission webhook denied the request: Invalid pruner ConfigMap labels
Обход проверки (не рекомендуется)
Предупреждение: Обход проверки может привести к некорректной работе pruner и должен использоваться только в аварийных ситуациях.
Чтобы временно обойти проверку:
-
Удалите идентифицирующий label:
-
Внесите необходимые изменения
-
Снова добавьте label:
Примечание: Контроллер pruner не будет обрабатывать ConfigMap без корректных labels.
Рекомендации
- Сразу добавляйте обязательные labels с самого начала
- Используйте точные соглашения об именовании для глобальных конфигураций и конфигураций namespace
- Сначала проверяйте конфигурации в непроизводственном namespace
- Внимательно изучайте ошибки валидации — они указывают, что нужно исправить
- Следите за логами webhook при внедрении новых конфигураций
- Удаляйте namespace-конфигурации перед попыткой удаления глобальной конфигурации