Resource Groups

使用选择器对不同的 PipelineRuns/TaskRuns 集合应用不同的修剪策略。

重要提示: 选择器仅在命名空间级别的 ConfigMapstekton-pruner-namespace-spec)中生效。全局 ConfigMaps 中的选择器会被修剪器忽略。

WARNING

命名空间级别的 ConfigMaps 不受 TektonConfig 生命周期管理。如果您需要后续备份或恢复 Tekton 配置,请单独保存这些 ConfigMaps。

目录

工作原理

  • 通过 PipelineRuns/TaskRuns 的标签或注解匹配
  • 先匹配优先:组按顺序评估
  • 回退机制:未匹配的资源使用命名空间或全局默认值
  • 位置要求:必须在命名空间 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:
            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 来定义基于选择器的资源组
  2. 按从最具体到最宽泛的顺序排列选择器(先匹配优先)
  3. 使用一致的标签appcomponentenvtier
  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

相关内容