• Русский
  • Группы ресурсов

    Применяйте разные политики очистки к разным наборам PipelineRuns/TaskRuns с помощью селекторов.

    ВАЖНО: Селекторы работают только в ConfigMaps на уровне namespace (tekton-pruner-namespace-spec). Селекторы в глобальных ConfigMaps игнорируются pruner.

    WARNING

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

    Как это работает

    • Соответствие по меткам или аннотациям на PipelineRuns/TaskRuns
    • Побеждает первое совпадение: группы оцениваются по порядку
    • Запасной вариант: ресурсы без совпадений используют значения по умолчанию из namespace или глобальные
    • Расположение: должно быть в 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:
                environment: production
                tier: frontend
            ttlSecondsAfterFinished: 604800
            successfulHistoryLimit: 10

    Селекторы по аннотациям:

    data:
      ns-config: |
        pipelineRuns:
          - selector:
              matchAnnotations:
                tekton.dev/release: "true"
            ttlSecondsAfterFinished: 2592000

    Смешанные селекторы (должны совпадать и метки, и аннотации):

    data:
      ns-config: |
        pipelineRuns:
          - selector:
              matchLabels:
                app: myapp
              matchAnnotations:
                critical: "true"
            successfulHistoryLimit: 50

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

    По типу Pipeline:

    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: 3600
        pipelineRuns:
          - selector:
              matchLabels:
                pipeline-type: build
            ttlSecondsAfterFinished: 300
          - selector:
              matchLabels:
                pipeline-type: test
            ttlSecondsAfterFinished: 3600
          - selector:
              matchLabels:
                pipeline-type: release
            ttlSecondsAfterFinished: 604800
            successfulHistoryLimit: 20

    По окружению:

    data:
      ns-config: |
        pipelineRuns:
          - selector:
              matchLabels:
                env: dev
            ttlSecondsAfterFinished: 300
          - selector:
              matchLabels:
                env: staging
            ttlSecondsAfterFinished: 86400
          - selector:
              matchLabels:
                env: prod
            ttlSecondsAfterFinished: 604800

    По критичности:

    data:
      ns-config: |
        pipelineRuns:
          - selector:
              matchLabels:
                critical: "true"
            ttlSecondsAfterFinished: 2592000
            successfulHistoryLimit: 50
          - selector:
              matchLabels:
                critical: "false"
            ttlSecondsAfterFinished: 3600
            successfulHistoryLimit: 3

    Порядок имеет значение

    Побеждает первое совпадение — упорядочивайте селекторы от самых специфичных к менее специфичным:

    data:
      ns-config: |
        pipelineRuns:
          - selector:
              matchLabels:
                env: prod
                critical: "true"
            ttlSecondsAfterFinished: 2592000
          - selector:
              matchLabels:
                env: prod
            ttlSecondsAfterFinished: 604800
          - selector:
              matchLabels:
                app: myapp
            ttlSecondsAfterFinished: 3600

    Лучшие практики

    1. Используйте ConfigMaps на уровне namespace для групп на основе селекторов
    2. Упорядочивайте селекторы от самых специфичных к менее специфичным (побеждает первое совпадение)
    3. Используйте согласованные метки: app, component, env, tier
    4. Документируйте группы комментариями над селекторами
    5. Тестируйте на примерах перед использованием в продакшене

    Расширенные настройки

    Многоуровневое приложение

    data:
      ns-config: |
        pipelineRuns:
          - selector:
              matchLabels:
                tier: frontend
            ttlSecondsAfterFinished: 604800
            successfulHistoryLimit: 10
          - selector:
              matchLabels:
                tier: backend
            ttlSecondsAfterFinished: 1209600
            successfulHistoryLimit: 15
          - selector:
              matchLabels:
                tier: database
            ttlSecondsAfterFinished: 2592000
            successfulHistoryLimit: 30

    Типы релизов

    data:
      ns-config: |
        pipelineRuns:
          - selector:
              matchLabels:
                release-type: feature
            ttlSecondsAfterFinished: 604800
          - selector:
              matchLabels:
                release-type: hotfix
            ttlSecondsAfterFinished: 2592000
          - selector:
              matchLabels:
                release-type: major
            ttlSecondsAfterFinished: 7776000

    Метки для ваших Pipeline

    Добавьте метки к PipelineRuns для группировки:

    apiVersion: tekton.dev/v1
    kind: PipelineRun
    metadata:
      generateName: my-pipeline-
      labels:
        pipeline-type: release
        env: prod
        critical: "true"
    spec:
      pipelineRef:
        name: my-pipeline

    См. также