美文网首页
Tekton 入门-概念篇

Tekton 入门-概念篇

作者: 晓码君 | 来源:发表于2021-05-07 08:52 被阅读0次

    什么是 Tekton

    Tekton 的前身是 Knative 的子项目 build-pipeline,主要用来给 Kantive 的 build 模块增加 pipeline 功能。之后独立出来,Tekton 的目标是一个通用的 CI/CD 工具。这是一种常见的产品孵化机制。

    目前,私有云市场占有率比较高的 CICD 工具对 Kubernetes 都有所支持,比如 Jenkins、GitLab CI。但是,这些工具只是将 Kubernetes 作为其扩展的一个方面,Kubernetes 作为新的基础设施,需要原生的 CICD 方案。

    另一方面,Jenkins 的子项目 JenkinsX 也开始默认使用 Tekton 作为 CI 引擎。使用云原生一等公民 CRD + Controller 实现的 Tekton ,无疑有机会成为云原生的主流编排引擎。

    组成及原理

    相关组成

    • Tekton Pipelines
      定义 Tekton 的 CRD 资源。下面会详细介绍,Task、TaskRun、Pipeline 等,用来定义数据结构。
    • Tekton Operator
      采用 Operator 模式,使用 Controller 监听 CR 数据,执行相关的动作,是编排引擎的核心。
    • Trigger Trigger
      pipeline 触发器,可以在 GitHub 推送或者合并 PR 后,触发流水线。
    • Tekton CLI
      Tekton CLI 是一个与 Tekton 交互的命令行工具。
    • Tekton Dashboard
      Tekton Pipelines 的 Web 图形界面。
    • Tekton Catalog
      社区维护的 Tasks 、Pipelines 库,降低用户使用门槛、提高复用率。
    • Tekton Hub
      Tekton 的 Web 图形界面。

    核心对象

    Task

    Task 定义任务模板,包含一系列的 Step 步骤。每个 Step 表示一个动作,比如执行命令、推送镜像等。下面是一个示例:

    apiVersion: tekton.dev/v1beta1
    kind: Task
    metadata:
      name: task-with-parameters
    spec:
      params:
        - name: flags
          type: array
        - name: someURL
          type: string
      steps:
        - name: build
          image: my-builder
          args: ["build", "$(params.flags[*])", "url=$(params.someURL)"]
    

    TaskRun

    TaskRun 是 Task 的执行实例。通过 taskRef 引用一个 Task,描述执行参数。下面是一个示例:

    apiVersion: tekton.dev/v1beta1
    kind: TaskRun
    metadata:
      name: run-with-parameters
    spec:
      taskRef:
        name: task-with-parameters
      params:
        - name: flags
          value:
            - "--set"
            - "arg1=foo"
            - "--randomflag"
            - "--someotherflag"
        - name: someURL
          value: "http://google.com"
    

    Pipeline

    Pipeline 完整定义了一个流水线,可以包含一系列的 Task 。下面是一个示例:

    apiVersion: tekton.dev/v1beta1
    kind: Pipeline
    metadata:
      name: pipeline-with-parameters
    spec:
      params:
        - name: context
          type: string
          description: Path to context
          default: /some/where/or/other
      tasks:
        - name: build-skaffold-web
          taskRef:
            name: build-push
          params:
            - name: pathToDockerFile
              value: Dockerfile
            - name: pathToContext
              value: "$(params.context)"
    

    PipelineRun

    PipelineRun 是 Pipeline 的执行实例。通过 pipelineRef 引用 Pipeline ,描述执行参数。下面是一个示例:

    apiVersion: tekton.dev/v1beta1
    kind: PipelineRun
    metadata:
      name: pipelinerun-with-parameters
    spec:
      pipelineRef:
        name: pipeline-with-parameters
      params:
        - name: "context"
          value: "/workspace/examples/microservices/leeroy-web"
    

    PipelineResource

    PipelineResource 定义 Task 的输入输出,包括 Git、Pull Request、Image、Cluster、Storage 等类型。下面是一个示例:

    apiVersion: tekton.dev/v1alpha1
    kind: PipelineResource
    metadata:
      name: test-cluster
    spec:
      type: cluster
      params:
        - name: url
          value: https://10.10.10.10
        - name: username
          value: admin
    

    在 Task 中可以使用这些自定义变量,下面是一个使用 $(resources.inputs.test-cluster.name) 的示例:

    apiVersion: tekton.dev/v1beta1
    kind: Task
    metadata:
      name: deploy-image
      namespace: default
    spec:
      resources:
        inputs:
          - name: test-cluster
            type: cluster
      steps:
        - name: deploy
          image: image-with-kubectl
          command: ["bash"]
          args:
            - "-c"
            - kubectl --kubeconfig
              /workspace/$(resources.inputs.test-cluster.name)/kubeconfig --context
              $(resources.inputs.test-cluster.name) apply -f /workspace/service.yaml'
    

    Run

    apiVersion: tekton.dev/v1alpha1
    kind: Run
    metadata:
      name: my-example-run
    spec:
      ref:
        apiVersion: example.dev/v1alpha1
        kind: Example
        name: my-example-task
    

    支持用户自己实现 Controller ,读取 Yaml 中的配置,执行相关的动作。这里 Controller 监听的就是 Example 类型 CR 的变动。

    工作原理

    上面是一个 Pipeline 的示意图。一个 Pipeline 通常由多个 Task 组成,这些 Task 串、并执行。而每个 Task 中,又有若干个 Step ,Step 是串行执行的。

    同时 Pipeline 还定义了输入、输出,通常输入 Git 仓库,输出镜像。在运行时,Pipeline 对象作为一个模板,被 PipelineRun 引用,创建运行实例。如下图:

    PipelineRunController 监听 PipelineRun 对象,将 PipelineRun 中所有的 Task 构建为一张有向无环图,创建 TaskRun 。而 TaskRunController 监听 TaskRun 对象的变化,根据 TaskRun 引用的 Task ,创建 Pod 运行 Step 。

    参考

    https://cd.foundation/
    https://tekton.dev/docs/concepts/

    相关文章

      网友评论

          本文标题:Tekton 入门-概念篇

          本文链接:https://www.haomeiwen.com/subject/pfcsdltx.html