Tekton之三:快速理解 Tekton 是如何工作的

本文详细解答了Tekton在云原生环境中的使用疑惑,包括Task与Pipeline的关系、如何触发Pipeline、Task间的通信方式、访问Git资源的策略、部署Tekton遇到的问题及解决方案。Tekton是Kubernetes上的CICD工具,通过Task、PipelineRun等概念组织自动化流程。在部署Tekton时,需注意网络访问限制,可能需要手动拉取并推送镜像。此外,文章还介绍了从Git获取代码、构建和部署Docker镜像的基本流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Tekton 是云原生环境下面的非常强大的 CICD 产品。 如果你按照 Tekton 的官方文档来学习,使用 Tekton, 可能会跟遇到很多障碍。 Tekton 的技术架构非常优秀,同时Tekton 不太好的产品体验,使得这个优秀工具的应用困难了很多。 

Tekton 的官方文档: Getting Started | Tekton

按照这个官方文档, 你可能会有很多疑问:

1.Task 和 Pipeline 我要单独一个个创建吗?正确的运行 Pipeline 的姿势是什么?

2.每次执行一个 Pipeline 需要通过 命令行 kubectl apply 一个 PipelineRun 的 yaml 来触发吗?

3.最简单的定义一个包含 Task 和 Pipeline 的例子是怎么样的?

4.每一个 Task/Step 都在独立的容器中运行, 那么容器直接如何交换数据,比如之前取到的代码,后面如何使用?

5.Tekton 的官方文档说不建议使用 PipelineResources,但官网还没有更新文档, 那么正确的方法如何访问 Git?  这里是  Pipeline 的文档: https://tekton.dev/docs/pipelines/pipelines/#specifying-resources

6.最简单的从 Git 仓库获取代码 的例子是怎么样的?

7.我在 kubernetes 环境中根本部署不起来 tekton,报错访问不到 gcr.io,我该如何部署呢?

8.我需要部署哪些服务和资源,可以把 tekton 用起来, 完成 从拉取代码,构建 Docker 镜像,推送镜像, 部署新镜像到 k8s 环境的过程?

有这么多的疑问, 加上在国内的环境中要部署起来 Tekton 是一件非常困难的事情。下面一个个来解答这些问题,帮助你解决遇到的这些障碍。

1.Task 和 Pipeline 我要单独一个个创建吗?正确的运行 Pipeline 的姿势是什么?

不需要一个个创建 Task,然后在 Pipeline 里面引用。 可以在 Pipeline 的 Yaml 定义内嵌的 Task。这种 Task 属于自定义的 Task。 如果用的是 Tekton Hub 里面的 Task, 比如 git-clone 这个 Task,那么是需要事先部署 Task 到 K8S 环境的,Pipeline, Task 都是 Kubernetes 里面的 CRD(自定义资源,即 Custom Resource Definition)。

几个重要的概念:

名词含义说明
Pipeline流水线,Pipeline 把多个 Task 组织到一起,完成一次 CICD 的过程Pipeline 是一个 k8s 中的 CRD
TaskTask 是一个独立的任务,可以是一个预先定义好的 Tekton Task,比如 git-clone, 也可以是自定义的一个 Task

Task 是一个 k8s 中的 CRD。

定义 Task 并不会触发 Task 执行,Task 执行需要通过 TaskRun 来实例化一个 Task 来执行。

或者在触发由引用这个 task 的 Pipeline 的执行来执行 Task (通常是这种方式运行Task)

Step

一个 Task 可以由多个 Step 组成,

每个 Step 会使用指定的镜像,创建一个实例来运行

TaskRun每次 Task 的运行,是一个 TaskRun通常不需要单独触发一个 Task 的运行,往往直接跟 Pipeline 打交到。 测试的时候可以直接跑一个 Task                        
PipelineRun每次 Pipeline 的运行,是一次 PipelineRun

Workspace工作空间, 通常挂载在 tekton 的 persistence volume上,用于在多个 task 之间共享数据是 tekton 中非常重要的一个概念,task 直接的数据交换可以通过 workspace 进行,一般代码拉取到之后,临时存储在 workspace 中
Tekton Pipelines需要部署到 kubernetes 里面的 Tekton pipelines 服务,是 Tekton 的主服务这个是必须要部署的
Tekton DashboardTekton 的可视化的管理后台如果通过 UI 来交互, 需要部署;
Tekton CliTekton 命令行工具, 即 tkton可以用来管理 Tekton 组件,安装:CLI | Tekton
Tekton Hub

Tekton Hub 里面提供了大量可以复用的 Tekton Task: Tekton Hub


 

可以使用 kubetcl apply, 或者 tkton 命令行安装 Task 到 k8s 环境。 然后就可以在 Pipeline 中使用这些 Task 了。

比如 git-clone, kanico, docker-build, 这些 task 都不是 tekton 自带的任务,在 tekton hub 上可以,需要安装/部署这些 task, 然后才能在 pipeline 中使用。

从 Tekton Hub 安装 kaniko 的 task(安装 git-clone, docker-build task 也是类似的):

kubectl apply -f https://raw.githubusercontent.com/tektoncd/catalog/main/task/kaniko/0.6/kaniko.yaml

2.每次执行一个 Pipeline 需要通过 命令行 kubectl apply 一个 PipelineRun 的 yaml 来触发吗?

简单回答, 不需要。

触发流水线的3种方法:

  • kubectl/tkton 命令,
  • dashboard,
  • webhook/api

实际运行中, 一般通过 webhook 来自动触发流水线的执行,在测试流水线,或者 webhook 没有触发的时候,可以通过人工来触发(人工通过 cli 触发,或者 dashboard 的 web 页面来触发)。

3.最简单的定义一个包含 Task 和 Pipeline 的例子是怎么样的?

前面一篇博文第三节 “三、最简化调用2个 Task 的 Pipeline 的配置” 中有示例:Tekton之二:如何使用 Tekton 创建一个任务和流水线 Pipeline 来获取 Git 代码_davidullua的博客-CSDN博客

4.每一个 Task/Step 都在独立的容器中运行, 那么容器直接如何交换数据,比如之前取到的代码,后面如何使用?

多个 Task 之间可以通过 workspace 来共享数据。 git-clone 的代码一般放在 workspace 中。 workspace 是挂载在 tekton 上的一个 Persistence Volume。

5.Tekton 的官方文档说不建议使用 PipelineResources,但官网还没有更新文档, 那么正确的方法如何访问 Git?  

直接使用 git-clone 这个任务即可, 在任务中通过参数指定 Git 仓库的地址。 

前面一篇博文第四节 “四、创建一个 Pipeline, 包含 git-clone, 并且显示出代码库的 README.md 文件内容” 中有示例:Tekton之二:如何使用 Tekton 创建一个任务和流水线 Pipeline 来获取 Git 代码_davidullua的博客-CSDN博客

6.最简单的从 Git 仓库获取代码 的例子是怎么样的?

参考前面步骤5. 简单示例如下:

7.我在 kubernetes 环境中根本部署不起来 tekton,报错访问不到 gcr.io,我该如何部署呢?

因为国内网络访问不到 gcr.io,按照这个官方文档, 部署 tekton ,会提示 pull 不到镜像:

​​​​​​https://tekton.dev/docs/pipelines/install/#installing-tekton-pipelines-on-kubernetest

同样地,在使用 git-clone 以及其他的 tekton hub 的 task 时,也会遇到 gcr.io 的镜像拉取不到的问题。 那么如何解决呢, 需要手工通过带来拉取到容器镜像, 然后 push 镜像到 k8s 集群可以访问到的镜像仓库中,或者使用别人已经 mirror 过的镜像(不少人做了这块工作,要检查 mirror 的景象是否完整,简单一点,如果你有 docker 的私有仓库的话,建议你按照前面的博文,自己做 mirror)。 参考前面的博文:

Tekton之二:如何使用 Tekton 创建一个任务和流水线 Pipeline 来获取 Git 代码_davidullua的博客-CSDN博客

8.我需要部署哪些服务和资源,可以把 tekton 用起来, 完成 从拉取代码,构建 Docker 镜像,推送镜像, 部署新镜像到 k8s 环境的过程?

使用 Tekton 的前提条件:

1).需要有一个 Kubernetes 集群;(Tekton 和 Tekton 的流水线都运行在 k8s 上面)

2).如果 Kubernetes 访问不了 gcr.io(国内的默认都访问不到),你需要有可以访问的 gcr.io 相关的 docker image 的镜像仓库, 如果没有的话,需要自己使用代理来创建镜像;(一般而言,需要一个 docker private repository, 以及一个可以访问 google, 访问 gcr.io, github 的代理服务器)

把 Tekton 用起来,完成从拉代码,到构建镜像,推送镜像到部署,需要部署这些服务资源:

1).【必选】部署 Tekton Pipelines, 然后可以定义流水线。 部署方法参考前面博文。

2).【可选】部署 Tekton Dashboard,部署之后可以通过 Web 管理台来触发流水线的执行,查看执行的结果。参考前面博文。

3).【必选】部署 Tekton Hub 上面的 Task,如: git-clone, docker-build 。这些通常是 CICD 中需要用到的,如果不需要用到,可以不用部署这些 task。 git-clone Task 的部署方法参考前面博文。其他 Task 的部署方法类似(可以通过 kubectl apply -f, 或者 tkton cli 来部署。

4). 【可选】部署 Tekton cli,tekton cli 能操作的常见操作,都可以通过 kubectl 命令来完成。

5).【必选】前面的1,3 完成之后,需要自己在 Yaml 文件中定义 tekton pipeline, 然后部署到 Tekton, 之后就可以在 Dashboard 页面运行 Pipeline,也可以另外配置 Webhook 来触发执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值