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

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

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

    WARNING

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

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

    • Сопоставление по labels или annotations в PipelineRuns/TaskRuns
    • Первое совпадение имеет приоритет: группы оцениваются по порядку
    • Запасной вариант: для ресурсов без совпадения используются значения по умолчанию namespace или global
    • Расположение: должно находиться в ConfigMap namespace, а не в global ConfigMap

    Типы селекторов

    Селекторы labels:

    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

    Селекторы annotations:

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

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

    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. Используйте единообразные labels: app, component, env, tier
    4. Документируйте группы с помощью комментариев над селекторами
    5. Тестируйте на примерах запусков перед использованием в production

    Расширенные конфигурации

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

    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

    Добавление labels к вашим Pipeline

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

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

    Связанные разделы