Pruner 配置

概述

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

配置

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

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

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

WARNING

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

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

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

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

在 ConfigMap 中配置

WARNING

CRITICAL: 所有 pruner ConfigMap MUST 都具有以下标签:

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

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

以下是 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 字段说明:

SettingDescriptionExample
ttlSecondsAfterFinished在 pruning 之前保留已完成运行的时间(秒)300(5 分钟)
successfulHistoryLimit要保留的成功运行的最大数量3
failedHistoryLimit要保留的失败运行的最大数量3
historyLimit每种状态要保留的运行最大数量(对成功和失败运行分别独立生效)5
enforcedConfigLevel配置层级globalnamespace

enforcedConfigLevel 决定配置层级:

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

在 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 MUST 被禁用。

  • 不能同时启用两个 pruner(job-basedevent-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 配置
      • global:集群级默认值适用于所有 namespace(不允许 namespace 覆盖)。
      • namespace:允许通过各个 namespace 中的 ConfigMap 进行 namespace 级覆盖。
    • ttlSecondsAfterFinished:在 pruning 之前保留已完成运行的时间(秒)。更多详情,请参阅 基于时间的 Pruning (TTL)
    • historyLimit:每种状态要保留的运行最大数量(对成功和失败运行分别独立生效)。更多详情,请参阅 基于历史记录的 Pruning
    • successfulHistoryLimit:要保留的成功运行最大数量。更多详情,请参阅 基于历史记录的 Pruning
    • failedHistoryLimit:要保留的失败运行最大数量。更多详情,请参阅 基于历史记录的 Pruning
    • namespaces:为特定 namespace 配置不同的默认 pruning 策略。更多详情,请参阅 Namespace 配置
    • options:Tekton Pruner controller 的选项。更详细的支持信息可在 Additional fields as options 中找到。

参考