• Русский
  • Конфигурация пространства имён

    Настройте различные политики очистки для каждого пространства имён в соответствии с требованиями к хранению данных в конкретной среде.

    Иерархия конфигурации

    Порядок применения настроек: GlobalNamespaceResource Group

    Установите enforcedConfigLevel: namespace в глобальной конфигурации для включения переопределений на уровне пространства имён.

    Границы валидации

    WARNING

    КРИТИЧНО - Системные границы: Создавайте ConfigMaps на уровне пространства имён ТОЛЬКО в пользовательских пространствах имён, где выполняются PipelineRuns/TaskRuns.

    ЗАПРЕЩЁННЫЕ пространства имён (валидация отклонит):

    • Системные: kube-*
    • Контроллеры Tekton: tekton-pipelines, tekton-*

    Обязательные метки для всех конфигураций:

    labels:
      app.kubernetes.io/part-of: tekton-pruner
      pruner.tekton.dev/config-type: <global|namespace>
    WARNING

    ConfigMaps на уровне пространства имён находятся вне жизненного цикла TektonConfig. Если потребуется резервное копирование или восстановление конфигурации Tekton, сохраните эти ConfigMaps отдельно.

    Метод 1: Встроенные спецификации пространства имён (Централизованно)

    Определите все конфигурации пространств имён внутри TektonConfig:

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonConfig
    metadata:
      name: config
    spec:
      pruner:
        disabled: true  # Необходимо отключить job-based pruner
      tektonpruner:
        disabled: false  # Включить event-based pruner
        global-config:
          enforcedConfigLevel: namespace
          ttlSecondsAfterFinished: 3600  # Глобальный запасной вариант
          namespaces:
            dev:
              ttlSecondsAfterFinished: 300
              successfulHistoryLimit: 3
            staging:
              ttlSecondsAfterFinished: 86400
              successfulHistoryLimit: 5
            prod:
              ttlSecondsAfterFinished: 604800
              successfulHistoryLimit: 10

    Метод 2: ConfigMaps на уровне пространства имён (Самообслуживание)

    Рекомендуется для изоляции пространств имён и автономии команд.

    Шаг 1: Включите конфигурацию на уровне пространства имён в TektonConfig:

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonConfig
    metadata:
      name: config
    spec:
      pruner:
        disabled: true  # Необходимо отключить job-based pruner
      tektonpruner:
        disabled: false  # Включить event-based pruner
        global-config:
          enforcedConfigLevel: namespace
          ttlSecondsAfterFinished: 3600  # Запасной вариант для пространств без конфигурации

    Шаг 2: Создайте ConfigMap, специфичный для пространства имён (фиксированное имя: tekton-pruner-namespace-spec):

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: tekton-pruner-namespace-spec  # Фиксированное имя
      namespace: my-app  # Только пользовательское пространство имён
      labels:
        app.kubernetes.io/part-of: tekton-pruner
        pruner.tekton.dev/config-type: namespace
    data:
      ns-config: |
        ttlSecondsAfterFinished: 300
        successfulHistoryLimit: 5
        failedHistoryLimit: 10

    Преимущества:

    • Самообслуживание для владельцев пространств имён
    • Независимое управление жизненным циклом
    • Приоритет над глобальной конфигурацией

    Правила валидации

    Конфигурации пространств имён проверяются на соответствие лимитам для предотвращения исчерпания ресурсов.

    1. Явные глобальные лимиты

    Если в глобальной конфигурации задан лимит, конфигурации пространств имён не могут его превышать.

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonConfig
    metadata:
      name: config
    spec:
      pruner:
        disabled: true  # Необходимо отключить job-based pruner
      tektonpruner:
        disabled: false  # Включить event-based pruner
        global-config:
          ttlSecondsAfterFinished: 3600
          successfulHistoryLimit: 10
          namespaces:
            development:
              ttlSecondsAfterFinished: 7200   # Недопустимо: превышает глобальный лимит
              successfulHistoryLimit: 5       # Допустимо: в пределах глобального лимита

    2. Системные лимиты по умолчанию

    Если глобальные лимиты не заданы, система применяет следующие максимумы:

    Поле конфигурацииМаксимум системы
    ttlSecondsAfterFinished2,592,000 секунд (30 дней)
    successfulHistoryLimit100
    failedHistoryLimit100
    historyLimit100

    Пример:

    spec:
      tektonpruner:
        global-config:
          enforcedConfigLevel: namespace
          # Лимиты не заданы - применяются системные максимумы
    ---
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: tekton-pruner-namespace-spec
      namespace: my-app
    data:
      ns-config: |
        ttlSecondsAfterFinished: 2592001   # Недопустимо: превышает системный максимум
        successfulHistoryLimit: 150        # Недопустимо: превышает системный максимум

    3. Переопределение значений по умолчанию

    Администраторы кластера могут задавать более строгие лимиты через глобальную конфигурацию. Глобальные лимиты имеют приоритет над системными, но не могут превышать системные максимумы.

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonConfig
    metadata:
      name: config
    spec:
      pruner:
        disabled: true  # Необходимо отключить job-based pruner
      tektonpruner:
        disabled: false  # Включить event-based pruner
        global-config:
          ttlSecondsAfterFinished: 86400     # Лимит администратора: 1 день
          successfulHistoryLimit: 20         # Лимит администратора: 20 запусков
          namespaces:
            development:
              ttlSecondsAfterFinished: 3600   # Допустимо: в пределах глобального лимита
            # ttlSecondsAfterFinished: 172800 # Пример недопустимого значения: превышает глобальный лимит

    Наследование конфигурации

    Неуказанные настройки наследуются с более высокого уровня:

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonConfig
    metadata:
      name: config
    spec:
      pruner:
        disabled: true  # Необходимо отключить job-based pruner
      tektonpruner:
        disabled: false  # Включить event-based pruner
        global-config:
          enforcedConfigLevel: namespace
          ttlSecondsAfterFinished: 3600     # Глобальное значение по умолчанию
          successfulHistoryLimit: 5          # Глобальное значение по умолчанию
          namespaces:
            dev:
              ttlSecondsAfterFinished: 300   # Переопределение TTL
              # Наследует successfulHistoryLimit: 5 из глобальной конфигурации

    Поддержка селекторов

    ВАЖНО: Селекторы ресурсов (matchLabels, matchAnnotations) работают только в ConfigMaps на уровне пространства имён (tekton-pruner-namespace-spec), НЕ в встроенных спецификациях пространств имён глобального ConfigMap.

    Работает (ConfigMap пространства имён):

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: tekton-pruner-namespace-spec
      namespace: my-app
      labels:
        app.kubernetes.io/part-of: tekton-pruner
        pruner.tekton.dev/config-type: namespace
    data:
      ns-config: |
        pipelineRuns:
          - selector:
              matchLabels:
                critical: "true"
            ttlSecondsAfterFinished: 2592000

    Игнорируется (встроенное пространство имён в глобальном ConfigMap):

    spec:
      tektonpruner:
        global-config:
          namespaces:
            production:
              pipelineRuns:
                - selector:
                    matchLabels:
                      critical: "true"

    Для групп ресурсов на основе селекторов используйте отдельные ConfigMaps на уровне пространства имён (Метод 2).

    Распространённые шаблоны

    По средам:

    spec:
      tektonpruner:
        global-config:
          enforcedConfigLevel: namespace
          namespaces:
            dev:
              ttlSecondsAfterFinished: 300
              successfulHistoryLimit: 3
            staging:
              ttlSecondsAfterFinished: 86400
              successfulHistoryLimit: 5
            prod:

    Рекомендации по использованию

    1. Используйте понятные соглашения по именованию пространств имён
    2. Начинайте с более свободных лимитов в разработке
    3. Внедряйте более строгие правила хранения в продакшене
    4. Документируйте решения по конфигурации пространств имён
    5. Регулярно пересматривайте и корректируйте настройки
    6. Тестируйте конфигурации перед развертыванием
    7. Используйте ConfigMaps на уровне пространства имён для групп с селекторами

    Следующие шаги

    • Изучите Resource Groups — конфигурации на основе селекторов
    • Ознакомьтесь с Time-based Pruning — стратегии TTL
    • Просмотрите History-based Pruning — ограничения хранения истории