定期清理 TaskRun 和 PipelineRun 资源

概述

使用 Pruner 功能自动清理 Tekton 中的 TaskRunPipelineRun 资源。Pruner 通过在后台执行 tkn 命令来执行资源清理。

使用场景

  • 定期清理 TaskRun 资源
  • 定期清理 PipelineRun 资源
  • 根据命名空间配置不同的清理策略

前提条件

  • 必须安装 Tekton Operator 组件
  • 环境中必须已自动创建 TektonConfig 资源

步骤

步骤 1

编辑 TektonConfig 资源

$ kubectl edit tektonconfigs.operator.tekton.dev config

步骤 2

修改 spec.pruner 配置,如下所示:

apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
  name: config
spec:
  pruner:
    # Whether to disable the pruner functionality, defaults to false
    disabled: false
    # Cron expression for scheduled cleanup
    schedule: "0 8 * * *"
    # Optional: Deadline for task start (in seconds)
    startingDeadlineSeconds: 100
    # Types of resources to clean up
    resources:
      - taskrun
      - pipelinerun
    # Number of resources to retain
    keep: 3
    # Apply cleanup strategies separately for each resource type
    prune-per-resource: true
    # Retain resources within the specified time (in minutes)
    # keep-since: 1440
    # Note: only one of keep and keep-since can be used

关键配置说明:

  • disabled:设置为 true 时,禁用 pruner 功能(默认值:false
  • schedule:清理任务的执行计划,使用 cron 表达式格式
  • startingDeadlineSeconds:任务启动截止时间的可选配置(单位:秒)。如果任务错过计划时间且超过此时长,则视为失败
  • resources:支持清理的资源类型,包括 taskrunpipelinerun
  • keep:清理时保留的资源最大数量
  • keep-since:保留指定时间范围内的资源(单位:分钟)
  • prune-per-resource:设置为 true 时(默认值为 false),会分别对每种资源应用 keep 配置
    • 例如:如果命名空间 ns-1 中有两个 Pipelines,名为 pipeline-1pipeline-2,将执行以下命令:
      tkn pipelinerun delete --pipeline=my-pipeline-1 --keep=3 --namespace=ns-1
      tkn pipelinerun delete --pipeline=my-pipeline-2 --keep=3 --namespace=ns-1
    • 注意:在使用 keep-since 时,启用 prune-per-resource=true 没有实际意义,因为 keep-since 是基于资源的时间约束,与资源数量无关。
Note

如果 disabled: falseschedule 为空,则全局 pruner 任务将被禁用。 但是,如果命名空间中存在值不为空的注解 operator.tekton.dev/prune.schedule,则会为该命名空间创建 pruner 任务。

步骤 3

通过命名空间注解配置清理策略(可选)

默认情况下,pruner 任务将使用全局配置(spec.pruner),但用户可以通过以下注解为特定命名空间自定义 pruner 配置。如果某些注解缺失或值无效,将使用全局配置值,或者跳过该命名空间。

支持的注解:

  • operator.tekton.dev/prune.skip:设置为 true 时,跳过该命名空间的 pruner 任务
  • operator.tekton.dev/prune.schedule:设置该命名空间的清理计划
  • operator.tekton.dev/prune.keep:设置要保留的资源最大数量
  • operator.tekton.dev/prune.keep-since:设置保留指定时间范围内资源的保留期(单位:分钟)
  • operator.tekton.dev/prune.prune-per-resource:设置是否为每种资源分别应用清理策略
  • operator.tekton.dev/prune.resources:设置要清理的资源类型,可以是 taskrun 和/或 pipelinerun,多个值用逗号分隔
  • operator.tekton.dev/prune.strategy:设置清理策略,可选值为 keepkeep-since

示例:

$ kubectl annotate namespace default \
    operator.tekton.dev/prune.schedule="0 1 * * *" \
    operator.tekton.dev/prune.keep="5" \
    operator.tekton.dev/prune.resources="taskrun,pipelinerun"

::: note 如果未设置全局配置,将使用以下默认值:

  • resources: pipelinerun
  • keep: 100 :::

结果

配置完成后,系统将按照设定的计划自动清理已过期的 TaskRun 和 PipelineRun 资源。

参考