深入理解 Tekton Results
Tekton Results 是一个复杂的系统,通过提供持久存储、查询和管理 CI/CD 执行数据的能力,扩展了 Tekton 的功能。本文档深入探讨了 Tekton Results 的工作原理、架构以及如何有效利用其功能。
目录
术语表我们为什么需要 Tekton ResultsCI/CD 数据管理的挑战Tekton Results 如何解决这些挑战优势适用场景架构和原则API 服务器架构观察者架构保留策略代理架构数据模型深入结果结构记录结构身份验证和授权高级过滤重要参数观察者参数API 服务器参数保留策略参数参考文献术语表
我们为什么需要 Tekton Results
CI/CD 数据管理的挑战
在传统的基于 Kubernetes 的 CI/CD 系统(如 Tekton Pipelines)中,所有执行数据都存储在 Kubernetes API 服务器的 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 所能实现的强大过滤和查询能力
优势
- 提升集群性能:减少 Kubernetes API 服务器和 etcd 的负载,通过卸载已完成的 CI/CD 数据
- 增强数据组织:将相关的 CI/CD 活动聚合在一起,以提高可视化和管理效果
- 更长的数据保留:在不影响集群资源的情况下,支持执行历史的长期存储
- 强大的查询能力:为 CI/CD 数据提供高级过滤和搜索能力
- 集成日志管理:将日志与执行数据一起存储,以获得完整的管道历史
- 自动清理:通过可配置的保留策略管理数据生命周期
适用场景
Tekton Results 在以下场景中特别有价值:
- 高容量 CI/CD 环境:运行多个生成大量执行数据的管道的组织
- 合规要求:需要维护执行历史以满足审计或合规目的的环境
- 资源有限的集群:etcd 资源有限并需要优化的集群
- 高级分析:想对 CI/CD 执行模式进行分析和报告的团队
- 多团队环境:多个团队共享 Tekton 基础设施且需要隔离其 CI/CD 数据的组织
架构和原则
Tekton Results 遵循微服务架构,具有三个主要组件共同协作以提供完整解决方案:
API 服务器架构
API 服务器是核心组件,负责:
- 提供数据访问:公开 gRPC 和 REST 端点用于存储和检索结果及记录
- 管理身份验证:使用 Kubernetes 风格的身份验证(服务帐户、令牌)
- 实施授权:对结果资源实现基于 RBAC 的访问控制
- 处理数据持久性:与底层数据库(PostgreSQL)接口
- 支持过滤:实现 CEL(通用表达式语言)以进行强大的查询过滤
API 服务器使用父子层次关系,其中:
- 命名空间/工作区是结果的父级
- 结果是记录的父级
- 记录包含实际的执行数据
观察者架构
观察者作为 Kubernetes 控制器运行,其职责包括:
- 监控资源:监听集群中的 TaskRun 和 PipelineRun 事件
- 确定分组:使用注释、标签和拥有者引用对相关资源进行分组
- 创建/更新记录:通过 API 服务器将执行数据存储在 Results 数据库中
- 注释资源:为原始 Kubernetes 资源添加结果标识符
- 管理删除:根据需要删除存储在数据库中的已完成资源
观察者使用多种策略对相关资源进行分组:
results.tekton.dev/result注释triggers.tekton.dev/triggers-eventid标签- 与 PipelineRuns 的拥有者引用
- 当未找到分组信息时自动生成新的结果名称
保留策略代理架构
保留策略代理负责:
- 调度清理:根据配置的计划运行修剪作业
- 实施保留:删除超出配置保留期的数据
- 管理数据库大小:防止 Results 数据库无限增长
数据模型深入
结果结构
结果包含:
记录结构
记录包含:
身份验证和授权
Tekton Results 使用 Kubernetes 风格的身份验证和 RBAC 进行访问控制:
- 身份验证:使用服务帐户令牌、用户模拟和其他 Kubernetes 身份验证方法
- 授权:对资源(
results,records)及动词(get,list,create,update,delete)实施 RBAC - 命名空间隔离:在多租户环境中按命名空间范围限制权限
示例 RBAC 角色:
tekton-results-readonly:对结果和记录的只读访问tekton-results-readwrite:对结果和记录的读写访问tekton-results-admin:完全访问,包括删除结果和记录
高级过滤
Tekton Results 使用 CEL(通用表达式语言)实现强大的过滤能力: