Pruner 配置

概述

Tekton Pruner 会根据可配置的基于时间(TTL)和基于历史记录的策略,自动清理已完成的 PipelineRun 和 TaskRun,从而管理 Tekton 资源的生命周期。

配置

Pruner 配置存储在一个带有 app.kubernetes.io/part-of: tekton-pruner 和 pruner.tekton.dev/config-type: <global|namespace> 标签的 ConfigMap 中。你可以修改此 ConfigMap 来更改 Pruner 的行为。

默认情况下,Tekton Pruner 由 TektonConfig 资源禁用。你可以修改 TektonConfig 资源来配置 Pruner。

本质上,Tekton Operator 会将 TektonConfig 资源中的 Pruner 配置同步到 TektonPruner 资源中,最终反映到 ConfigMap 中。

WARNING

如果你通过 TektonConfig 部署 Pruner,就必须通过 TektonConfig 配置 Pruner。

如果你只修改 ConfigMap 中的配置,而它没有同步到 TektonPruner 资源,配置可能会丢失。

当 TektonConfig 中的配置发生变化,或因其他原因触发协调时,ConfigMap 中的配置将被覆盖。

下面演示配置 Pruner 的几种不同方式。

在 ConfigMap 中配置

WARNING

CRITICAL:所有 pruner ConfigMap 必须包含以下标签:

labels:
  app.kubernetes.io/part-of: tekton-pruner
  pruner.tekton.dev/config-type: <global|namespace>

这些标签使 pruner webhook 能够验证 ConfigMap,并使控制器能够正确处理它们。

以下是 Tekton Pruner ConfigMap 的示例:

apiVersion: v1
data:
  global-config: |
    enforcedConfigLevel: global
    ttlSecondsAfterFinished: 300
    successfulHistoryLimit: 3
    failedHistoryLimit: 3
    historyLimit: 100
kind: ConfigMap
metadata:
  labels:
    app.kubernetes.io/part-of: tekton-pruner
    operator.tekton.dev/operand-name: pruner
    pruner.tekton.dev/config-type: global
    pruner.tekton.dev/release: v0.3.4
  name: tekton-pruner-default-spec

YAML 字段说明:

设置描述示例
ttlSecondsAfterFinished在清理前保留已完成运行的时间(秒)300(5 分钟)
successfulHistoryLimit要保留的成功运行最大数量3
failedHistoryLimit要保留的失败运行最大数量3
historyLimit每种状态要保留的运行最大数量(分别适用于成功和失败运行)5
enforcedConfigLevel配置层级global 或 namespace

enforcedConfigLevel 用于确定配置层级:

  • global:集群范围的默认值适用于所有命名空间(不允许命名空间覆盖)
  • namespace:允许通过各个命名空间中的 ConfigMap 进行命名空间级覆盖

在 TektonConfig 中配置

在 TektonConfig 资源中,Pruner 的配置大致如下:

apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
  name: config
spec:
  pruner:
    disabled: true  # Must disable job-based pruner
  tektonpruner:
    disabled: false  # Enable event-based pruner
    global-config:
      enforcedConfigLevel: global  # Options: global, namespace
      ttlSecondsAfterFinished: 3600  # Delete runs older than 1 hour (optional)
      historyLimit: 100              # Keep only 100 runs total (optional)
      successfulHistoryLimit: 50     # Keep only 50 successful runs (optional)
      failedHistoryLimit: 20         # Keep only 20 failed runs (optional)
      namespaces:
        dev-namespace:
          historyLimit: 50
          ttlSecondsAfterFinished: 1800  # 30 minutes for dev
        prod-namespace:
          successfulHistoryLimit: 200
          failedHistoryLimit: 50
          ttlSecondsAfterFinished: 86400  # 24 hours for prod
WARNING

重要:Tekton Pruner 是一种 event-based pruner,默认处于禁用状态。要启用 event-based pruner,必须先禁用现有的 job-based pruner。

  • 不能同时启用两个 pruner(job-based 和 event-based)
  • event-based pruner 会实时响应资源事件,从而提供更高效的清理

如果你想使用 job-based pruner,请参考 TaskRun 和 PipelineRun 资源的定期清理。

YAML 字段说明:

  • spec.pruner:此部分包含 job-based pruner 的配置。
    • disabled:是否禁用 job-based pruner。
  • spec.tektonpruner:此部分包含 event-based pruner 的配置。
    • disabled:是否禁用 event-based pruner。
    • enforcedConfigLevel:确定配置层级。更多详情请参考 Namespace Configuration。
      • global:集群范围的默认值适用于所有命名空间(不允许命名空间覆盖)。
      • namespace:允许通过各个命名空间中的 ConfigMap 进行命名空间级覆盖。
    • ttlSecondsAfterFinished:在清理前保留已完成运行的时间(秒)。更多详情请参考 Time-based Pruning (TTL)。
    • historyLimit:每种状态要保留的运行最大数量(分别适用于成功和失败运行)。更多详情请参考 History-based Pruning。
    • successfulHistoryLimit:要保留的成功运行最大数量。更多详情请参考 History-based Pruning。
    • failedHistoryLimit:要保留的失败运行最大数量。更多详情请参考 History-based Pruning。
    • namespaces:为特定命名空间配置不同的默认清理策略。更多详情请参考 Namespace Configuration。
    • options:Tekton Pruner 控制器的选项。更详细的支持信息请参见 Additional fields as options。

参考