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

Tekton之三:快速理解 Tekton 是如何工作的,第1张

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 来触发执行。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/720947.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-25

发表评论

登录后才能评论

评论列表(0条)

保存