Pruner 配置

概述

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

配置

Pruner 配置存储在一个 ConfigMap 中,该 ConfigMap 具有 app.kubernetes.io/part-of: tekton-pruner 和 pruner.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配置层级global 或 namespace

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-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 配置。
      • 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 中找到。

参考