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