架构

目录

Overview

Tekton Pruner 是一个 Kubernetes controller 系统,自动管理 Tekton PipelineRun 和 TaskRun 资源的生命周期。它遵循 Kubernetes operator 模式,实现事件驱动和周期性调和,以执行可配置的基于时间(TTL)和基于历史的修剪策略。

架构原则

Tekton Pruner architecture

1. Controller 模式实现

  • 调和循环:多个 controller 监视并响应资源变化
  • 事件驱动处理:controller 响应 Kubernetes 事件(ConfigMaps、PipelineRuns、TaskRuns)
  • 基于 ConfigMap 的配置:声明式策略规范

2. 分层配置模型

  • 三级层次结构:全局 → 命名空间 → 资源选择器
  • 基于优先级的解析:更具体的配置覆盖通用默认值
  • 灵活的执行模式:可配置的粒度(全局、命名空间、资源)

3. 职责分离

  • TTL 处理器:基于时间的清理逻辑
  • 历史限制器:基于数量的保留逻辑
  • 选择器匹配器:资源识别与匹配
  • 验证 Webhook:准入时配置验证

4. Kubernetes 原生设计

  • Controller Runtime:利用 controller-runtime 框架
  • 基于注解的状态:TTL 值存储在资源注解中
  • 最小 RBAC 权限:仅需 list、get、watch、delete、patch 权限
  • 命名空间隔离:每个命名空间配置独立

组件交互

Controller 职责

Controller触发条件目的
Main PrunerConfigMap 变更对所有命名空间中 TTL 过期资源执行完整垃圾回收
PipelineRunKubernetes 事件更新 TTL 注解,执行历史限制
TaskRunKubernetes 事件更新 TTL 注解,执行历史限制
Namespace Config监听 ConfigMapConfigMap 变更时重新加载配置
Validating Webhook准入请求验证 ConfigMap 语法和规则

核心逻辑组件

组件职责
Config Store全局和命名空间配置的内存缓存
Hierarchy Resolver决定应用哪个配置(选择器 > 命名空间 > 全局)
TTL Handler计算过期时间并标记过期资源以便删除
History Limiter按状态计数资源,超出限制时标记最旧资源删除
Selector Matcher通过标签/注解匹配资源与策略

设计决策

为什么采用事件驱动 + ConfigMap 触发的 GC?

  • 事件驱动(PipelineRun/TaskRun):即时更新注解并执行历史限制
  • ConfigMap 触发的 GC:配置变更时执行全集群扫描进行 TTL 清理
  • 高效设计:避免持续轮询,仅在策略变更时清理

为什么采用分层配置?

  • 灵活性:支持单租户(全局)或多租户(命名空间)
  • 委托管理:命名空间所有者控制自己的保留策略
  • 集中默认:平台团队设置合理的默认值

为什么分开 TTL 和历史限制?

  • 独立关注点:基于时间和基于数量的保留需求不同
  • 组合使用:两者可同时应用(以最短保留期为准)
  • 语义清晰:每种机制有独立的配置和行为

为什么用注解存储 TTL 状态?

  • 可审计性:TTL 值在资源元数据中可见
  • 调试方便:用户可检查资源上的计算 TTL
  • 幂等性:避免每次调和时重复计算