Tekton Results
Tekton Results 是一个高级系统,通过提供持久存储、查询和管理 CI/CD 执行数据的能力,扩展了 Tekton 的功能。本文档深入探讨了 Tekton Results 的工作原理、架构以及如何有效利用其特性。
目录
术语表为什么需要 Tekton ResultsCI/CD 数据管理的挑战Tekton Results 如何解决这些挑战优势适用场景架构与原则API Server 架构Watcher 架构保留策略 Agent 架构数据模型详解Result 结构Record 结构认证与授权高级过滤重要参数Watcher 参数API Server 参数保留策略参数参考资料术语表
为什么需要 Tekton Results
CI/CD 数据管理的挑战
在传统的基于 Kubernetes 的 CI/CD 系统如 Tekton Pipelines 中,所有执行数据都存储在 Kubernetes API server 的 etcd 数据库中。这种方式存在以下限制:
- 存储容量有限:etcd 设计用于存储少量配置数据,而非大量执行历史和日志
- 资源限制:随着 CI/CD 工作负载的积累,可能消耗大量 etcd 资源,影响集群性能
- 数据分散:相关的 CI/CD 活动(TaskRuns、PipelineRuns)作为独立资源存储,缺乏明确关联
- 日志管理:日志通常存储在容器运行时或外部日志系统,难以与特定流水线执行关联
- 数据生命周期:没有内置机制管理已完成 CI/CD 数据的生命周期
随着 CI/CD 使用规模扩大,这些限制会导致性能问题和管理负担。
Tekton Results 如何解决这些挑战
Tekton Results 提供了全面的解决方案:
- 卸载数据存储:将已完成的 CI/CD 执行数据从 etcd 移动到专用数据库,针对该用途进行优化
- 建立关联关系:通过 Result/Record 数据模型创建相关 CI/CD 活动之间的显式关系
- 集中日志存储:将日志与对应的 TaskRuns/PipelineRuns 一起存储
- 提供数据生命周期管理:通过保留策略自动管理数据
- 支持高级查询:提供比 Kubernetes API 更强大的过滤和查询功能
优势
- 提升集群性能:通过卸载已完成的 CI/CD 数据,减轻 Kubernetes API server 和 etcd 负载
- 增强数据组织:将相关 CI/CD 活动分组,提升可视化和管理能力
- 延长数据保留时间:支持长期存储执行历史,且不影响集群资源
- 强大查询能力:提供高级过滤和搜索功能
- 集成日志管理:将日志与执行数据一同存储,完整记录流水线历史
- 自动清理:通过可配置的保留策略管理数据生命周期
适用场景
Tekton Results 在以下场景中特别有价值:
- 高负载 CI/CD 环境:运行大量流水线,产生大量执行数据的组织
- 合规需求:需要保留执行历史以满足审计或合规要求的环境
- 资源受限集群:etcd 资源有限,需要优化的集群
- 高级分析:希望对 CI/CD 执行模式进行分析和报告的团队
- 多团队环境:多个团队共享 Tekton 基础设施,需要隔离查看各自 CI/CD 数据的组织
架构与原则
Tekton Results 采用微服务架构,包含三个主要组件协同工作,提供完整解决方案:
API Server 架构
API Server 是核心组件,负责:
- 提供数据访问:暴露 gRPC 和 REST 接口,用于存储和检索 Results 和 Records
- 管理认证:采用 Kubernetes 风格的认证(服务账户、令牌)
- 执行授权:基于 RBAC 实现对 Results 资源的访问控制
- 处理数据持久化:与底层数据库(PostgreSQL)交互
- 支持过滤:实现 CEL(Common Expression Language)以支持强大查询过滤
API Server 采用父子层级结构:
- Namespace/workspace 是 Result 的父级
- Result 是 Record 的父级
- Record 包含实际执行数据
Watcher 架构
Watcher 作为 Kubernetes 控制器,负责:
- 监控资源:监听集群中的 TaskRun 和 PipelineRun 事件
- 确定分组:通过注解、标签和所有者引用对相关资源进行分组
- 创建/更新 Records:通过 API Server 将执行数据存储到 Results 数据库
- 注释资源:向原始 Kubernetes 资源添加 Result 标识符
- 管理删除:可选地在数据存储后删除已完成资源
Watcher 使用多种策略分组相关资源:
results.tekton.dev/result注解triggers.tekton.dev/triggers-eventid标签- PipelineRuns 的所有者引用
- 无分组信息时自动生成新的 Result 名称
保留策略 Agent 架构
保留策略 Agent 负责:
- 调度清理:根据配置的计划执行修剪任务
- 执行保留策略:删除超过保留期限的数据
- 管理数据库大小:防止 Results 数据库无限增长
数据模型详解
Result 结构
一个 Result 包含:
Record 结构
一个 Record 包含:
认证与授权
Tekton Results 使用 Kubernetes 风格的认证和 RBAC 进行访问控制:
- 认证:使用服务账户令牌、用户模拟等 Kubernetes 认证方法
- 授权:基于 RBAC,针对资源(
results、records)和操作(get、list、create、update、delete)进行控制 - 命名空间隔离:针对多租户环境,权限按命名空间范围划分
示例 RBAC 角色:
tekton-results-readonly:对 Results 和 Records 的只读访问tekton-results-readwrite:对 Results 和 Records 的读写访问tekton-results-admin:完全访问权限,包括删除 Results 和 Records
高级过滤
Tekton Results 使用 CEL(Common Expression Language)实现强大过滤功能: