TaskRun 和 PipelineRun 资源的定期清理

概述

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

使用场景

  • 定期清理 TaskRun 资源
  • 定期清理 PipelineRun 资源
  • 根据 namespace 配置不同的清理策略

前提条件

  • 必须已安装 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:
    # 是否禁用 pruner 功能,默认值为 false
    disabled: false
    # 定时清理的 cron 表达式
    schedule: "0 8 * * *"
    # 可选:任务启动截止时间(单位:秒)
    startingDeadlineSeconds: 100
    # 要清理的资源类型
    resources:
      - taskrun
      - pipelinerun
    # 要保留的资源数量
    keep: 3
    # 针对每种资源类型分别应用清理策略
    prune-per-resource: true
    # 在指定时间范围内保留资源(单位:分钟)
    # keep-since: 1440
    # 注意:keep 和 keep-since 只能使用其中一个

关键配置说明:

  • disabled:设置为 true 时,禁用 pruner 功能(默认值:false
  • schedule:清理任务的执行计划,使用 cron 表达式格式
  • startingDeadlineSeconds:任务启动截止时间的可选配置(单位:秒)。如果任务错过了计划执行时间并超过该持续时间,则会被计为失败
  • resources:支持清理的资源类型,包括 taskrunpipelinerun
  • keep:清理时保留的最大资源数量
  • keep-since:在指定时间范围内保留资源(单位:分钟)
  • prune-per-resource:设置为 true 时(默认值为 false),会针对每种资源分别应用 keep 配置
    • 例如:如果 ns-1 namespace 中有两个 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 任务将被禁用。 但是,如果某个 namespace 中存在值为 operator.tekton.dev/prune.schedule 的注解,则会为该 namespace 创建 pruner 任务。

步骤 3

通过 namespace 注解配置清理策略(可选)

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

支持的注解:

  • operator.tekton.dev/prune.skip:设置为 true 时,跳过该 namespace 的 pruner 任务
  • operator.tekton.dev/prune.schedule:设置该 namespace 的清理计划
  • 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 资源。

参考