Tekton(一)在云原生时代的CI/CD新篇章:Tekton - Kubernetes原生持续交付框架

Tekton(一)在云原生时代的CI/CD新篇章:Tekton - Kubernetes原生持续交付框架

背景

随着云原生技术的普及,容器化和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

Tasks and Pipelines

其中TaskTaskRunPipelinePipelineRunPipelineResource作为其核心CRD,

  1. Task:

    • Task 是定义 CI/CD 流水线中单个步骤的最小单位。
    • 它描述了一个任务的输入、输出和执行步骤。
    • 每个 Task 都是一个独立的、可重复使用的构建块,可以组合成更复杂的流水线。
    • 每个Task由一系列有序steps构成。每个step可以定义输入和输出且可以将上一个step的输出作为下一个step的输入。每个step都会由一个container来执行
  2. TaskRun:

    • TaskRun 是对 Task 的实例化,表示一个 Task 的一次具体执行。
    • 当您希望运行单个 Task 时,可以创建一个 TaskRun 来触发任务的执行。
    • TaskRun 中指定了输入参数、输出参数以及执行 Task 所需的资源和配置。
  3. Pipeline:

    • Pipeline 是一个由多个 Task 和资源组成的有向无环图(DAG)。
    • 它定义了任务之间的依赖关系和执行顺序。
    • Pipelines 允许您构建复杂的 CI/CD 流水线,将多个任务连接在一起。
  4. PipelineRun:

    • PipelineRun 是对 Pipeline 的实例化,表示一个 Pipeline 的一次具体执行。
    • 通过创建 PipelineRun,您可以触发整个 CI/CD 流水线的执行。
    • PipelineRun 中可以指定各个 TaskRun 之间的参数传递和资源配置。
  5. PipelineResource:(v0.30.0被废弃)

    • PipelineResource 是用于在 Pipeline 中引用资源的对象。
    • 它允许将资源绑定到 Pipeline 的输入和输出参数,例如git仓库信息,镜像信息,使得 PipelineRun 在执行时可以正确地使用资源。

Runs

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
  1. 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 负责协调任务的执行顺序和并行度,以确保任务在适当的时机运行。
  2. 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无疑是一个引人注目的持续交付新选择。

lomtom

标题:Tekton(一)在云原生时代的CI/CD新篇章:Tekton - Kubernetes原生持续交付框架

作者:lomtom

链接:https://lomtom.cn/bd3i65tcm48w6