基于时间的清理(TTL)

使用 ttlSecondsAfterFinished 在指定时长后删除已完成的资源。

工作原理

TTL 适用于所有已完成的运行(成功和失败)。计时器在运行结束时开始。

基本配置

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:
      ttlSecondsAfterFinished: 3600  # Delete after 1 hour

常见 TTL 值

持续时间秒数使用场景
5 分钟300Dev/test 快速迭代
1 小时3600CI 流水线
1 天86400通用工作负载
7 天604800Staging/release
30 天2592000生产/审计/合规

按环境设置 TTL

spec:
  tektonpruner:
    global-config:
      enforcedConfigLevel: namespace
      ttlSecondsAfterFinished: 3600  # Default
      namespaces:
        dev:
          ttlSecondsAfterFinished: 300      # 5 min
        staging:
          ttlSecondsAfterFinished: 86400    # 1 day
        prod:
          ttlSecondsAfterFinished: 2592000

按 Pipeline 设置 TTL

在 namespace ConfigMap 中使用选择器为特定 Pipeline 设置 TTL:

WARNING

Namespace 级别的 ConfigMap 不属于 TektonConfig 生命周期的一部分。如果你需要在以后备份或恢复 Tekton 配置,请单独保存这些 ConfigMap。

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: |
    ttlSecondsAfterFinished: 3600
    pipelineRuns:
      - selector:
          matchLabels:
            pipeline-type: release
        ttlSecondsAfterFinished: 604800
      - selector:
          matchLabels:
            pipeline-type: test
        ttlSecondsAfterFinished: 300

将 TTL 与历史限制结合使用

历史限制会覆盖 TTL,以保证最小保留量:

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

结果:运行会在 5 分钟后删除,除非它们属于最近 5 个成功或最近 10 个失败中的一部分。

最佳实践

  1. 开发:使用较短的 TTL(5-60 分钟)以支持快速迭代
  2. 生产:使用较长的 TTL(7-30 天)以满足审计/合规要求
  3. 关键 Pipeline:使用选择器实现更长的保留时间
  4. 平衡:权衡存储成本与保留需求

相关内容