TaskRuns
TaskRun 是一个 Kubernetes 自定义资源,用于实例化 Task 以执行。TaskRun 负责执行 Task 中定义的步骤并管理其生命周期,提供了一种独立运行 Task 或作为 Pipeline 一部分运行 Task 的方式。
目录
为什么需要 TaskRuns
CI/CD 执行挑战
在 CI/CD 系统中,任务执行面临以下几个挑战:
- 执行跟踪:需要跟踪每个任务执行的进度和状态
- 资源分配:需要为每个任务分配合适的资源
- 输入/输出管理:需要管理任务执行的输入和输出
- 错误处理:需要处理失败并提供调试信息
- 审计能力:需要维护所有任务执行的记录以便审计
Tekton 的解决方案
Tekton TaskRuns 通过以下方式解决这些挑战:
- 执行实例:每个 TaskRun 代表 Task 的一次具体执行,带有特定输入
- 状态跟踪:TaskRuns 跟踪每个 Step 的执行状态
- 资源绑定:TaskRuns 将实际资源(卷、凭证)绑定到 Task 的需求
- 结果收集:TaskRuns 收集并存储 Task 产生的结果
- Kubernetes 集成:TaskRuns 利用 Kubernetes 进行资源管理和调度
优势
- 隔离性:每个 TaskRun 独立执行,允许同一 Task 并行执行
- 可追溯性:TaskRuns 提供详细的执行历史和日志
- 灵活性:TaskRuns 可以覆盖 Task 参数和工作空间绑定
- 可复用性:同一 Task 可以通过不同的 TaskRuns 使用不同输入执行
- 集成性:TaskRuns 可通过 Kubernetes API 被各种系统触发
- 可观测性:可以通过 Kubernetes 工具监控 TaskRun 状态和日志
场景
TaskRuns 适用于多种场景,包括:
- 手动任务执行:按需运行 Task 进行测试或调试
- 定时操作:定期运行 Task 进行维护操作
- 事件驱动执行:响应外部事件触发 Task
- Pipeline 组件:作为更大 Pipeline 的一部分执行 Task
- CI/CD 操作:构建、测试和部署应用
约束与限制
- TaskRuns 在单个 Kubernetes 节点上执行,不能跨节点
- 启动后,TaskRun 参数不可修改
- TaskRuns 对失败 Step 的重试能力有限
- TaskRun 执行时间受 Kubernetes Pod 超时限制
- TaskRuns 一旦开始执行,不能暂停
原则
TaskRun 执行模型
创建 TaskRun 时:
- Tekton 验证 TaskRun 规范
- Kubernetes 为 TaskRun 创建 Pod
- Task 中的每个 Step 变为 Pod 中的一个容器
- Tekton 向每个 Step 容器注入入口二进制文件
- Steps 按 Task 中定义的顺序依次执行
- 每个 Step 完成后更新 TaskRun 状态
- 收集结果并存储在 TaskRun 状态中
- 所有 Steps 完成或失败时终止 Pod
TaskRun 状态
TaskRun 状态提供详细的执行信息:
- 总体状态(运行中、成功、失败等)
- 开始和完成时间
- 各个 Step 的状态
- Task 结果
- 失败原因(如适用)
- 用于访问日志的 Pod 名称
配置示例
基本 TaskRun 示例
带嵌入式 Task 定义的 TaskRun
重要参数
Timeout
Timeout 允许设置 TaskRun 执行的最长时长。
使用场景
- 防止长时间运行的 Task 无限占用资源
- 确保 CI/CD 流水线在合理时间内完成
- 处理挂起或死锁的 Task
原则
Timeout:
- 在 TaskRun 规范中指定
- 作用于整个 TaskRun 执行
- 从第一个 Step 开始到最后一个 Step 完成计时
- 超时则导致 TaskRun 失败
配置示例
资源限制
资源限制允许为 TaskRun 执行指定计算资源需求和限制。TaskRun 规范中的 computeResources 字段用于控制执行 TaskRun 步骤的 Pod 的 CPU 和内存分配。
使用场景
- 资源管理:公平分配 TaskRuns 资源
- 成本控制:防止资源过度消耗
- 性能优化:为计算密集型操作优化资源分配
- 稳定性:避免资源耗尽影响其他工作负载
原则
资源限制:
- 使用 TaskRun 规范中的
computeResources字段 - 包含
requests(最小值)和limits(最大值) - 作用于 TaskRun Pod 中的所有容器
- 可被单个 Step 规范覆盖
- 遵循 Kubernetes 资源规范格式
配置示例
基本资源限制
Pod 模板
Pod 模板允许自定义 TaskRun 执行的 Kubernetes Pod 配置。TaskRun 规范中的 podTemplate 字段用于配置执行 TaskRun 步骤的底层 Pod。
TIP
有关 Pod 模板的更多信息,请参见 Pod Templates。
使用场景
- 安全配置:设置安全上下文以非 root 用户运行容器
- 节点选择:使用节点选择器调度 Pod 到特定节点
- 容忍度:为带污点节点添加容忍度
- 服务账户:配置 Pod 执行的自定义服务账户
- 卷配置:添加额外卷或配置卷挂载
- 环境变量:在 Pod 级别设置环境变量
- 亲和性规则:配置 Pod 亲和和反亲和规则
原则
Pod 模板:
- 应用于为 TaskRun 创建的 Pod
- 可覆盖 Tekton 设置的默认 Pod 配置
- 允许对 Pod 执行环境进行细粒度控制
- 可满足特定安全、合规或资源需求
- 支持所有标准 Kubernetes Pod 规范字段
- 与 Tekton 默认 Pod 配置合并
配置示例
带安全上下文的基本 Pod 模板
带节点选择器和资源限制的 Pod 模板
带容忍度和亲和性的 Pod 模板
带服务账户和环境变量的 Pod 模板