基于历史记录的清理

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

工作原理

历史限制和 TTL 可以同时生效。如果某个运行超出历史限制,或者其 TTL 已过期,则该运行有资格被删除。这意味着保留期限较短的一方优先生效。

配置选项

SettingDescription
successfulHistoryLimit保留最近的 N 个成功运行
failedHistoryLimit保留最近的 N 个失败运行
historyLimit为 EACH 状态保留 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 中使用 selector 来设置 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. 监控存储:根据集群容量调整限制

相关内容