定期清理 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:
    # 是否禁用 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 中有两个 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: false 并且 schedule 为空,则全局 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 资源。

参考