Tekton之三:快速理解 Tekton 是如何工作的
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 是如何工作的相关推荐
- python爬虫入门教程--快速理解HTTP协议(一)
http协议是互联网里面最重要,最基础的协议之一,我们的爬虫需要经常和http协议打交道.下面这篇文章主要给大家介绍了关于python爬虫入门之快速理解HTTP协议的相关资料,文中介绍的非常详细,需要 ...
- 通俗易懂:快速理解ipv4的NAT穿透原理
NAT基础 IPv4由于最初的设计原因,长度只有32位,所以只提供了大约40亿个地址.这造成了地址耗尽危机. NAT(Network Address Translation,网络地址转换),也 ...
- 学一点 mysql 双机异地热备份----快速理解mysql主从,主主备份原理及实践
学一点 mysql 双机异地热备份----快速理解mysql主从,主主备份原理及实践 原文 学一点 mysql 双机异地热备份----快速理解mysql主从,主主备份原理及实践 感谢大家在上一篇 学一 ...
- 网络编程懒人入门(一):快速理解网络通信协议(上篇)
1.写在前面 论坛和群里常会有技术同行打算自已开发IM或者消息推送系统,很多时候连基本的网络编程理论(如网络协议等)都不了解,就贸然定方案.写代码,显得非常盲目且充满技术风险. 即时通讯网论坛里精心整 ...
- 快速理解ASP.NET Core的认证与授权
ASP.NET Core的认证与授权已经不是什么新鲜事了,微软官方的文档对于如何在ASP.NET Core中实现认证与授权有着非常详细深入的介绍.但有时候在开发过程中,我们也往往会感觉无从下手,或者由 ...
- ps2019布尔运算快捷键_超实用:换个角度教你快速理解PS CS6布尔运算
今天为大家分享快速理解PS CS6布尔运算教程,教程真的很不错,推荐过来,一起来学习吧! 我最开始接触布尔运算是在使用3DSMAX的时候,三维物体的布尔运算. 那个时候理解起来更直接,后来使用PS的时 ...
- 三分钟快速理解javascript内存管理
javascript中具有垃圾自动回收机制(Garbage Collection),也就是执行环境会负责管理代码执行过程中使用的内存,在开发过程中就可以不考虑内存的分配,以及无用内存释放的问题.但是触 ...
- 快速理解论文主旨框架:论文十问法
论文十问是可以快速理解论文主旨的一套框架,问题如下: Q1:论文试图解决什么问题? Q2:这是否是一个新的问题? Q3:这篇文章要验证一个什么科学假设? Q4:有哪些相关研究?如何归类?谁是这一课题在 ...
- c语言转fpga原理,要想玩转FPGA,就必须理解FPGA内部的工作原理-可编程逻辑-与非网...
FPGA(Field-Program mable Gate Array),即现场可编程门阵列,它是在 PAL.GAL.CPLD 等可编程器件的基础上进一步发展的产物.它是作为专用集成电路(ASIC)领 ...
最新文章
- Springboot源码分析之内嵌tomcat源码分析
- php 修改 title,WordPress通过functions.php修改meta title样式
- ************起步科技***********【申明:来源于网络】
- 关于COMMIT WORK and COMMIT WORK AND WAIT在SAT中的讨论
- 用了这么多年的泛型,你对它到底有多了解?
- ServerBootstrap
- Linux中Tomcat 服务的搭建
- 2020顶会指南:征稿截止时间、举办地、举办时间一览
- 前端网页制作-javaScripe 初学笔记
- (转载) Android两个子线程之间通信
- 数据表的创建(一对多,多对多)
- 破碎纪念---记第二次Nexus4换屏
- 如何卸载FileZilla的Ftp服务
- 智慧树知到python程序设计基础第三章答案_知到智慧树Python程序设计基础章节答案...
- netmeeting的使用(详解)
- 用飞桨,为少数民族濒危语言生成一本词典
- 【x86架构】中断基础介绍
- .net core mvc中使用ef
- 解决Win2000 不能启动的几种方法
- python中imag用法_花了一晚上时间,终于把Python的基本用法归纳好了!
热门文章
- Cetos7更改yum源镜像实现安装ninja-build软件包
- 2. Java模板引擎 —— JavaPoet的简单使用
- android javapoet 翻译
- java 利用工具包Geotools实现不同坐标系之间坐标转换
- 逆序的三位数(取余,加减乘除)[C语言/C++]
- 如何在IntelliJ IDEA中添加JDK?
- 华师大 OJ 3024
- HDU 4460 Friend Chains(map + spfa)
- 简单 python 爬虫(一)
- 解决windows服务器装虚拟机windows系统无网络连接网络