Tekton(一)在云原生时代的CI/CD新篇章:Tekton - Kubernetes原生持续交付框架
- August 7, 2023
背景
随着云原生技术的普及,容器化和Kubernetes等技术已成为现代应用程序开发和交付的标配。在这个快速变化的环境中,持续集成和持续交付(CI/CD)的实践变得至关重要,以便开发团队能够高效地构建、测试和部署应用程序。
然而,在Kubernetes环境中实现高效的CI/CD并不是一件容易的事情。传统的CI/CD工具和管道可能在Kubernetes环境中表现不佳,因为它们通常依赖于中央服务器或代理来运行构建和部署过程,与Kubernetes的分布式和自主性原则相冲突。因此,需要一种能够与Kubernetes无缝集成的CI/CD解决方案,以充分发挥其优势并兼顾容器原生的特性。
Tekton的诞生就是为了填补这个空白。作为一个由Google发起并捐赠给Cloud Native Computing Foundation(CNCF)的开源项目,Tekton旨在提供一个Kubernetes原生的、可扩展的CI/CD框架,使开发者能够在Kubernetes上轻松构建、测试和部署应用程序,并以容器原生的方式运行CI/CD工作流程。
Tekton CRD资源
Tekton 是一个用于构建、测试和部署容器化应用程序的开源框架,它是一个 Cloud Native Computing Foundation(CNCF)托管的项目。Tekton 的核心是一组 Custom Resource Definitions(CRD),用于描述持续集成(Continuous Integration,CI)和持续交付(Continuous Delivery,CD)的任务和流水线。
[root@ecs-caa3 tekton]# kubectl get crd | grep tekton
clustertasks.tekton.dev 2023-08-07T07:10:43Z
pipelineresources.tekton.dev 2023-08-07T07:10:43Z
pipelineruns.tekton.dev 2023-08-07T07:10:43Z
pipelines.tekton.dev 2023-08-07T07:10:43Z
resolutionrequests.resolution.tekton.dev 2023-08-07T07:10:43Z
runs.tekton.dev 2023-08-07T07:10:43Z
taskruns.tekton.dev 2023-08-07T07:10:43Z
tasks.tekton.dev 2023-08-07T07:10:43Z
其中Task
、TaskRun
、Pipeline
、PipelineRun
、PipelineResource
作为其核心CRD,
-
Task:
Task
是定义 CI/CD 流水线中单个步骤的最小单位。- 它描述了一个任务的输入、输出和执行步骤。
- 每个 Task 都是一个独立的、可重复使用的构建块,可以组合成更复杂的流水线。
- 每个Task由一系列有序steps构成。每个step可以定义输入和输出且可以将上一个step的输出作为下一个step的输入。每个step都会由一个container来执行
-
TaskRun:
TaskRun
是对 Task 的实例化,表示一个 Task 的一次具体执行。- 当您希望运行单个 Task 时,可以创建一个 TaskRun 来触发任务的执行。
- TaskRun 中指定了输入参数、输出参数以及执行 Task 所需的资源和配置。
-
Pipeline:
Pipeline
是一个由多个 Task 和资源组成的有向无环图(DAG)。- 它定义了任务之间的依赖关系和执行顺序。
- Pipelines 允许您构建复杂的 CI/CD 流水线,将多个任务连接在一起。
-
PipelineRun:
PipelineRun
是对 Pipeline 的实例化,表示一个 Pipeline 的一次具体执行。- 通过创建 PipelineRun,您可以触发整个 CI/CD 流水线的执行。
- PipelineRun 中可以指定各个 TaskRun 之间的参数传递和资源配置。
-
PipelineResource:(v0.30.0被废弃)
PipelineResource
是用于在 Pipeline 中引用资源的对象。- 它允许将资源绑定到 Pipeline 的输入和输出参数,例如git仓库信息,镜像信息,使得 PipelineRun 在执行时可以正确地使用资源。
Tekton组件
Tekton Controller 和 Tekton Webhook 是 Tekton Pipelines 的两个重要子组件,用于管理和处理 Tekton Pipelines 的核心资源和事件触发。
➜ ~ kubectl get deployments.apps -n tekton-pipelines
NAME READY UP-TO-DATE AVAILABLE AGE
tekton-pipelines-controller 1/1 1 1 10s
tekton-pipelines-webhook 1/1 1 1 10s
- Tekton Controller(控制器): Tekton Controller 是一个运行在 Kubernetes 集群中的控制器,它负责监控和管理 Tekton Pipelines 的核心资源,如 Task、Pipeline、PipelineRun 和 TaskRun。其主要功能包括:
- 资源创建和生命周期管理:Tekton Controller 监听 Kubernetes API 服务器上的自定义资源 (Custom Resource) 变化,如 Task 和 Pipeline 的创建、更新和删除等。它负责按照定义的规范创建新资源,并在资源的生命周期内保持其状态一致。
- 事件处理:Tekton Pipelines 中的各个资源状态可能会发生变化,例如 PipelineRun 的运行状态更新,TaskRun 的日志输出等。Tekton Controller 监听这些事件,更新资源的状态,确保资源按预期运行并记录日志等相关信息。
- 并行任务执行:Tekton Pipelines 允许定义并行执行的任务,Tekton Controller 负责协调任务的执行顺序和并行度,以确保任务在适当的时机运行。
- Tekton Webhook(钩子): Tekton Webhook 是一个 Kubernetes 服务,用于接收来自外部源的事件,例如代码仓库中的代码提交、镜像仓库中的镜像推送等。Tekton Webhook 可以与版本控制系统、镜像仓库、外部 CI/CD 工具等集成,从而触发 Tekton Pipelines 的运行。
- 事件监听:Tekton Webhook 监听外部事件源发出的 HTTP 请求,这些请求通常是代码提交、镜像推送等操作触发的。
- 事件解析:Tekton Webhook 解析接收到的事件信息,提取关键信息,如提交的代码版本、镜像的标签等。
- 触发 PipelineRun:根据预定义的触发规则,Tekton Webhook 选择合适的 Pipeline 并创建相应的 PipelineRun,从而启动 CI/CD 工作流的执行。
结论
Tekton是一个强大的Kubernetes原生CI/CD框架,为开发者提供了一种灵活、可扩展的方式来构建、测试和部署容器化应用程序。通过其自定义资源定义和组件,Tekton使得在Kubernetes环境中构建和管理CI/CD工作流程变得更加简单和高效。在云原生时代,Tekton无疑是一个引人注目的持续交付新选择。
标题:Tekton(一)在云原生时代的CI/CD新篇章:Tekton - Kubernetes原生持续交付框架
作者:lomtom