Pruner 配置

目录

概述

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

配置

Pruner 的配置存储在带有 app.kubernetes.io/part-of: tekton-prunerpruner.tekton.dev/config-type: <global|namespace> 标签的 ConfigMap 中。您可以修改此 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

重要:所有 pruner ConfigMaps 必须 包含以下标签:

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

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

以下是 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配置层级globalnamespace

enforcedConfigLevel 决定配置层级:

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

TektonConfig 中的配置

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

apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
  name: config
spec:
  pruner:
    disabled: true  # 必须禁用基于 Job 的 pruner
  tektonpruner:
    disabled: false  # 启用基于事件的 pruner
    global-config:
      enforcedConfigLevel: global  # 选项:global, namespace
      ttlSecondsAfterFinished: 3600  # 删除超过 1 小时的运行(可选)
      historyLimit: 100              # 总共只保留 100 个运行(可选)
      successfulHistoryLimit: 50     # 只保留 50 个成功运行(可选)
      failedHistoryLimit: 20         # 只保留 20 个失败运行(可选)
      namespaces:
        dev-namespace:
          historyLimit: 50
          ttlSecondsAfterFinished: 1800  # dev 命名空间为 30 分钟
        prod-namespace:
          successfulHistoryLimit: 200
          failedHistoryLimit: 50
          ttlSecondsAfterFinished: 86400  # prod 命名空间为 24 小时
WARNING

重要提示:Tekton Pruner 是基于 事件 的 pruner,默认处于禁用状态。要启用基于事件的 pruner,必须禁用现有的基于 Job 的 pruner。

  • 两种 pruner(基于 Job 和基于事件)不能同时启用
  • 基于事件的 pruner 实时响应资源事件,提供更高效的清理

如果您想使用基于 Job 的 pruner,请参考TaskRun 和 PipelineRun 资源的定期清理

YAML 字段说明:

  • spec.pruner:此部分包含基于 Job 的 pruner 配置。
    • disabled:是否禁用基于 Job 的 pruner。
  • spec.tektonpruner:此部分包含基于事件的 pruner 配置。
    • disabled:是否禁用基于事件的 pruner。
    • enforcedConfigLevel:决定配置层级。详情请参见命名空间配置
      • global:集群范围的默认配置,适用于所有命名空间(不允许命名空间覆盖)。
      • namespace:允许通过各命名空间中的 ConfigMaps 进行命名空间级别的覆盖。
    • ttlSecondsAfterFinished:保留已完成运行的时间(秒),超过该时间后进行清理。详情请参见基于时间的清理(TTL)
    • historyLimit:每种状态下保留的最大运行数(分别独立应用于成功和失败运行)。详情请参见基于历史的清理
    • successfulHistoryLimit:保留的成功运行的最大数量。详情请参见基于历史的清理
    • failedHistoryLimit:保留的失败运行的最大数量。详情请参见基于历史的清理
    • namespaces:为特定命名空间配置不同的默认清理策略。详情请参见命名空间配置
    • options:Tekton Pruner 控制器的选项。更多详细支持请参见作为选项的附加字段

参考资料