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
Task Task 是一个独立的任务,可以是一个预先定义好的 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 Dashboard Tekton 的可视化的管理后台 如果通过 UI 来交互, 需要部署;
Tekton Cli Tekton 命令行工具, 即 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 来触发执行。

Tekton之三:快速理解 Tekton 是如何工作的相关推荐

  1. python爬虫入门教程--快速理解HTTP协议(一)

    http协议是互联网里面最重要,最基础的协议之一,我们的爬虫需要经常和http协议打交道.下面这篇文章主要给大家介绍了关于python爬虫入门之快速理解HTTP协议的相关资料,文中介绍的非常详细,需要 ...

  2. 通俗易懂:快速理解ipv4的NAT穿透原理

    NAT基础   IPv4由于最初的设计原因,长度只有32位,所以只提供了大约40亿个地址.这造成了地址耗尽危机.   NAT(Network Address Translation,网络地址转换),也 ...

  3. 学一点 mysql 双机异地热备份----快速理解mysql主从,主主备份原理及实践

    学一点 mysql 双机异地热备份----快速理解mysql主从,主主备份原理及实践 原文 学一点 mysql 双机异地热备份----快速理解mysql主从,主主备份原理及实践 感谢大家在上一篇 学一 ...

  4. 网络编程懒人入门(一):快速理解网络通信协议(上篇)

    1.写在前面 论坛和群里常会有技术同行打算自已开发IM或者消息推送系统,很多时候连基本的网络编程理论(如网络协议等)都不了解,就贸然定方案.写代码,显得非常盲目且充满技术风险. 即时通讯网论坛里精心整 ...

  5. 快速理解ASP.NET Core的认证与授权

    ASP.NET Core的认证与授权已经不是什么新鲜事了,微软官方的文档对于如何在ASP.NET Core中实现认证与授权有着非常详细深入的介绍.但有时候在开发过程中,我们也往往会感觉无从下手,或者由 ...

  6. ps2019布尔运算快捷键_超实用:换个角度教你快速理解PS CS6布尔运算

    今天为大家分享快速理解PS CS6布尔运算教程,教程真的很不错,推荐过来,一起来学习吧! 我最开始接触布尔运算是在使用3DSMAX的时候,三维物体的布尔运算. 那个时候理解起来更直接,后来使用PS的时 ...

  7. 三分钟快速理解javascript内存管理

    javascript中具有垃圾自动回收机制(Garbage Collection),也就是执行环境会负责管理代码执行过程中使用的内存,在开发过程中就可以不考虑内存的分配,以及无用内存释放的问题.但是触 ...

  8. 快速理解论文主旨框架:论文十问法

    论文十问是可以快速理解论文主旨的一套框架,问题如下: Q1:论文试图解决什么问题? Q2:这是否是一个新的问题? Q3:这篇文章要验证一个什么科学假设? Q4:有哪些相关研究?如何归类?谁是这一课题在 ...

  9. c语言转fpga原理,要想玩转FPGA,就必须理解FPGA内部的工作原理-可编程逻辑-与非网...

    FPGA(Field-Program mable Gate Array),即现场可编程门阵列,它是在 PAL.GAL.CPLD 等可编程器件的基础上进一步发展的产物.它是作为专用集成电路(ASIC)领 ...

最新文章

  1. Springboot源码分析之内嵌tomcat源码分析
  2. php 修改 title,WordPress通过functions.php修改meta title样式
  3. ************起步科技***********【申明:来源于网络】
  4. 关于COMMIT WORK and COMMIT WORK AND WAIT在SAT中的讨论
  5. 用了这么多年的泛型,你对它到底有多了解?
  6. ServerBootstrap
  7. Linux中Tomcat 服务的搭建
  8. 2020顶会指南:征稿截止时间、举办地、举办时间一览
  9. 前端网页制作-javaScripe 初学笔记
  10. (转载) Android两个子线程之间通信
  11. 数据表的创建(一对多,多对多)
  12. 破碎纪念---记第二次Nexus4换屏
  13. 如何卸载FileZilla的Ftp服务
  14. 智慧树知到python程序设计基础第三章答案_知到智慧树Python程序设计基础章节答案...
  15. netmeeting的使用(详解)
  16. 用飞桨,为少数民族濒危语言生成一本词典
  17. 【x86架构】中断基础介绍
  18. .net core mvc中使用ef
  19. 解决Win2000 不能启动的几种方法
  20. python中imag用法_花了一晚上时间,终于把Python的基本用法归纳好了!

热门文章

  1. Cetos7更改yum源镜像实现安装ninja-build软件包
  2. 2. Java模板引擎 —— JavaPoet的简单使用
  3. android javapoet 翻译
  4. java 利用工具包Geotools实现不同坐标系之间坐标转换
  5. 逆序的三位数(取余,加减乘除)[C语言/C++]
  6. 如何在IntelliJ IDEA中添加JDK?
  7. 华师大 OJ 3024
  8. HDU 4460 Friend Chains(map + spfa)
  9. 简单 python 爬虫(一)
  10. 解决windows服务器装虚拟机windows系统无网络连接网络