基于历史的修剪

根据运行的状态保留固定数量的运行,不考虑其年龄。

工作原理

历史限制和 TTL 都可以同时生效。如果某个运行超出历史限制,或者其 TTL 已过期,则该运行符合删除条件。这意味着保留时间更短的规则优先生效。

配置选项

SettingDescription
successfulHistoryLimit保留最近的 N 个成功运行
failedHistoryLimit保留最近的 N 个失败运行
historyLimit保留每种状态的 N 个运行(当未设置特定限制时)

基本配置

按状态分别设置限制:

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:
      successfulHistoryLimit: 5    # Keep last 5 successful
      failedHistoryLimit: 10       # Keep last 10 failed (for debugging)

两者使用相同限制:

spec:
  tektonpruner:
    global-config:
      historyLimit: 5  # Keep last 5 successful AND last 5 failed

环境特定限制

spec:
  tektonpruner:
    global-config:
      enforcedConfigLevel: namespace
      namespaces:
        dev:
          successfulHistoryLimit: 3
          failedHistoryLimit: 5     # More failed runs for debugging
        staging:
          successfulHistoryLimit: 5
          failedHistoryLimit: 5
        prod:
          successfulHistoryLimit: 10
          failedHistoryLimit: 20

Pipeline 特定限制

在 namespace ConfigMaps 中使用选择器来设置 pipeline 特定限制:

WARNING

namespace 级 ConfigMaps 不在 TektonConfig 生命周期内。如果你之后需要备份或恢复 Tekton 配置,请单独保存这些 ConfigMaps。

apiVersion: v1
kind: ConfigMap
metadata:
  name: tekton-pruner-namespace-spec
  namespace: my-app
  labels:
    app.kubernetes.io/part-of: tekton-pruner
    pruner.tekton.dev/config-type: namespace
data:
  ns-config: |
    successfulHistoryLimit: 3
    pipelineRuns:
      - selector:
          matchLabels:
            critical: "true"
        successfulHistoryLimit: 20
        failedHistoryLimit: 30
      - selector:
          matchLabels:
            pipeline-type: test
        successfulHistoryLimit: 3
        failedHistoryLimit: 5

与 TTL 的交互

历史限制不会覆盖 TTL:

data:
  ns-config: |
    ttlSecondsAfterFinished: 300
    successfulHistoryLimit: 5
    failedHistoryLimit: 10

结果:超过 5 分钟的运行会被删除,即使它们仍在最近 5 个成功运行或最近 10 个失败运行之内。只要存在超过配置数量的运行,历史限制仍然可能更早删除较旧的运行。

最佳实践

  1. 保留更多失败运行,而不是成功运行,以便调试
  2. 关键 pipeline:为审计轨迹设置更高的限制
  3. 开发环境:设置更低的限制(3-5)以便快速迭代
  4. 生产环境:设置更高的限制(10-20)以便分析
  5. 监控存储:根据集群容量调整限制

相关内容