• Русский
  • Конфигурация Namespace

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

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

    Поток настроек: GlobalNamespaceResource Group

    Установите enforcedConfigLevel: namespace в global config, чтобы включить переопределения на уровне namespace.

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

    WARNING

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

    ЗАПРЕЩЕННЫЕ namespaces (валидация отклонит):

    • System: kube-*
    • Tekton controllers: tekton-pipelines, tekton-*

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

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

    ConfigMap на уровне namespace находятся вне жизненного цикла TektonConfig. Если позже потребуется выполнить backup или restore конфигурации Tekton, сохраните эти ConfigMap отдельно.

    Способ 1: Inline Namespace Specs (централизованно)

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

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonConfig
    metadata:
      name: config
    spec:
      pruner:
        disabled: true  # Must disable job-based pruner
      tektonpruner:
        disabled: false  # Enable event-based pruner
        global-config:
          enforcedConfigLevel: namespace
          ttlSecondsAfterFinished: 3600  # Global fallback
          namespaces:
            dev:
              ttlSecondsAfterFinished: 300
              successfulHistoryLimit: 3
            staging:
              ttlSecondsAfterFinished: 86400
              successfulHistoryLimit: 5
            prod:
              ttlSecondsAfterFinished: 604800
              successfulHistoryLimit: 10

    Способ 2: ConfigMap для каждого namespace (self-service)

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

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

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonConfig
    metadata:
      name: config
    spec:
      pruner:
        disabled: true  # Must disable job-based pruner
      tektonpruner:
        disabled: false  # Enable event-based pruner
        global-config:
          enforcedConfigLevel: namespace
          ttlSecondsAfterFinished: 3600  # Fallback for namespaces without config

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

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: tekton-pruner-namespace-spec  # Fixed name
      namespace: my-app  # User namespace only
      labels:
        app.kubernetes.io/part-of: tekton-pruner
        pruner.tekton.dev/config-type: namespace
    data:
      ns-config: |
        ttlSecondsAfterFinished: 300
        successfulHistoryLimit: 5
        failedHistoryLimit: 10

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

    • Self-service для владельцев namespace
    • Независимое управление жизненным циклом
    • Имеет приоритет над global config

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

    Конфигурации namespace проверяются на соответствие ограничениям, чтобы предотвратить исчерпание ресурсов.

    1. Явные global limits

    Если global config задает limit, конфигурации namespace не могут его превышать.

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonConfig
    metadata:
      name: config
    spec:
      pruner:
        disabled: true  # Must disable job-based pruner
      tektonpruner:
        disabled: false  # Enable event-based pruner
        global-config:
          ttlSecondsAfterFinished: 3600
          successfulHistoryLimit: 10
          namespaces:
            development:
              ttlSecondsAfterFinished: 7200   # Invalid: exceeds global limit
              successfulHistoryLimit: 5       # Valid: within global limit

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

    Если global limit не задан, система применяет следующие максимумы:

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

    Пример:

    spec:
      tektonpruner:
        global-config:
          enforcedConfigLevel: namespace
          # No limits defined - system maximums apply
    ---
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: tekton-pruner-namespace-spec
      namespace: my-app
    data:
      ns-config: |
        ttlSecondsAfterFinished: 2592001   # Invalid: exceeds system maximum
        successfulHistoryLimit: 150        # Invalid: exceeds system maximum

    3. Переопределение defaults

    Администраторы кластера могут задать более строгие ограничения через global config. Глобальные limits переопределяют системные defaults, но не могут превышать системные максимумы.

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonConfig
    metadata:
      name: config
    spec:
      pruner:
        disabled: true  # Must disable job-based pruner
      tektonpruner:
        disabled: false  # Enable event-based pruner
        global-config:
          ttlSecondsAfterFinished: 86400     # Admin limit: 1 day
          successfulHistoryLimit: 20         # Admin limit: 20 runs
          namespaces:
            development:
              ttlSecondsAfterFinished: 3600   # Valid: within global limit
            # ttlSecondsAfterFinished: 172800 # Invalid example: exceeds global limit

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

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

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonConfig
    metadata:
      name: config
    spec:
      pruner:
        disabled: true  # Must disable job-based pruner
      tektonpruner:
        disabled: false  # Enable event-based pruner
        global-config:
          enforcedConfigLevel: namespace
          ttlSecondsAfterFinished: 3600     # Global default
          successfulHistoryLimit: 5          # Global default
          namespaces:
            dev:
              ttlSecondsAfterFinished: 300   # Override TTL
              # Inherits successfulHistoryLimit: 5 from global

    Поддержка selectors

    ВАЖНО: Resource selectors (matchLabels, matchAnnotations) работают только в ConfigMap на уровне namespace (tekton-pruner-namespace-spec), а НЕ во встроенных namespace specs global ConfigMap.

    Это работает (namespace 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

    Это ИГНОРИРУЕТСЯ (inline namespace в global ConfigMap):

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

    Для resource groups на основе selectors используйте отдельные namespace ConfigMap (Способ 2).

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

    На основе среды:

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

    Рекомендации

    1. Используйте понятные соглашения об именовании namespace
    2. Начинайте с более разрешительных limits в development
    3. Применяйте более строгие политики retention в production
    4. Документируйте решения по конфигурации namespace
    5. Регулярно пересматривайте и корректируйте настройки
    6. Проверяйте конфигурации перед развертыванием
    7. Используйте namespace ConfigMap для групп на основе selectors

    Дальнейшие шаги