我在B站学云原生 | 下一代CI/CD工具,Tekton入门部署指南


作者 <安全开发运维> 答疑交流群,回复【学习交流群】即可加入

本章目录:

首发地址:https://mp.weixin.qq.com/s/cMzgur6KE6XdswvUWhyJUA

0x00 快速入门
1.Tekton 是什么?
历史背景
Tekton 的前身是 Knative
的子项目 build-pipeline
,主要用来给 Kantive
的 build 模块增加 pipeline 功能之后独立出来,Tekton的最终目标是一个通用的 CI/CD
工具。
目前,私有云市场占有率比较高的 CICD 工具对 Kubernetes
都有所支持,比如 Jenkins、GitLab CI
。但是这些工具只是将 Kubernetes 作为其扩展的一个方面,Kubernetes 作为新的基础设施,需要原生的 CICD 方案。另一方面,Jenkins 的子项目 JenkinsX
也开始默认使用 Tekton 作为 CI 引擎。使用云原生 CRD
(是Kubernetes内置的资源类型,即自定义资源的定义) + Controller
实现的 Tekton ,无疑有机会成为云原生的主流编排引擎。
简单介绍
描述: Tekton 是一个开源的云原生持续集成和持续交付/部署【Cloud Native CI/CD】解决方案, 使用Golang语言进行开发,允许开发人员通过K8S云平台快速灵活定义流水线,从而更加便捷构建、测试和部署系统,目前是由CD基金会[https://cd.foundation/]管理的项目,其遵循OpenSSF最佳实践。
温馨提示: 此章节作为GitOps中的Tekton初识章节,作者后续会持续更新Tekton+ArgoCD 结合实践教程,Tekton 更专注构建 CI/CD 流水线,ArgoCD 更专注应用管理和部署,希望大家多多关注【全栈工程师修炼指南
】,作者将推出更多原创文章
。
Tekton 官网地址: https://tekton.dev/
2.Tekton 有何用?
描述: 前面介绍到 Tekton 主要用于在云原生架构环境中完成CI、CD部分,主要是devops工程师以及开发人员使用,其侧重点应该是在云原生微服务应用以及传统应用
的CI持续集成上,
除此之外使用 tekton 的好处如下
可移植性: 跨平台、语言、和部署环境。它适用于 Jenkins、Jenkins X、Skaffold、 Knative 和许多其他流行的 CI/CD 工具。
可定制:Tekton 实体是完全可定制的,从而具有高度的灵活性。平台工程师可以定义非常详细的构建基目录,以供开发人员在各种情况下使用
可重复使用:Tekton 实体是完全可移植的,因此一旦定义,组织内的任何人都可以使用给定的管道并重用其构造块。这使开发人员可以快速构建复杂的管道,而无需“重新发明轮子”。
可扩展:Tekton Catalog是Tekton社区驱动的存储库。您可以使用Tekton目录中的预制组件快速创建新的并展开现有管道。
标准化:Tekton 在您的Kubernetes集群上作为扩展安装并运行,并使用成熟的 Kubernetes 资源模型, 其工作负载在 Kubernetes 容器内执行。
缩放性:为了增加工作负载容量,您可以简单地将节点添加到群集, Tekton 随集群一起扩展 无需重新定义资源分配或对管道进行任何其他修改。
3.Tekton 组件介绍
Tekton Pipelines:Tekton 的基础部分,它定义了一组Kubernetes自定义资源,这些资源充当构建块,您可以从中组装CI/CD管道。
Tekton Triggers:允许基于 event 实例化 pipeline。例如,每次PR与GitHub存储库合并时,您都可以触发管道的实例化和执行。
Tekton Cli:是Tekton Pipelines的一个基于Web的图形界面,用于显示有关管道执行的信息。目前正在进行中。
Tekton Dashboard:是Tekton Pipelines的一个基于Web的图形界面,用于显示有关管道执行的信息。
Tekton Catalog:是一个由社区贡献的高质量Tekton构建块(任务、管道等)的存储库,可在您自己的管道中使用。
Tekton Hub:基于Web的图形界面,用于访问Tekton Catalog。
Tekton Operator:是一个Kubernetes Operator模式,允许您在Kubernete集群上安装、更新和删除Tekton项目。
Tekton Chain : 为使用Tekton Pipelines建造的文物提供生成、存储和标记出处的工具。
4.Tekton 概念术语
Tekton Pipelines 中最重要的五个概念:Task
、TaskRun
、Pipeline
、PipelineRun
、PipelineResources
(已在v0.44版本被丢弃,此处简单了解)。
Task
:Tekton 中的最小单元,代表一个任务模板,包括多个步骤。定义一个有序的Step以及每个 Step 调用特定的 在一组特定的输入上构建工具,并生成一组特定的输出,这些输出可用作下一个输入 Step。TaskRun
:实例化一个特定的 Task 在一组特定的输入并生成一组特定的输出,并且一个 TaskRun 会创建一个对应的 Pod,每个 step 对应 pod 中的一个 container。Pipeline
:Tekton 中一系列有序 Task 组成的有向无环图,定义了流水线的模板。PipelineRun
:Pipeline 执行时需要定义一个 PipelineRun,作为流水线的实例,生成一条流水线记录。PipelineResource
(已被丢弃):流水线执行过程中需要的资源信息。
Steps, Tasks, and Pipelines 运行示例图
在
Step
中 定义CI/CD工作流中可以完成某一阶段的操作,例如代码拉取,编译构建Java程序,镜像构建,以及应用部署,Tekton 通常会为每一个阶段生成一个Container。在
Task
中 是按照顺序排列 Step 的集合,定义装载一个Kubernetes卷共享环境,Tekton以Kubernetes pod的形式运行任务,其中每个步骤都成为pod中的运行容器。在
Pipelines
中是按照顺序排列 Task 的集合,Tekton 整理所有的Task,将它们连接到有向无环图(DAG)中,并按顺序依次执行。换句话说,它创建了许多Kubernetes pod,并确保每个pod都能按要求成功运行。

温馨提示: 任务(Tasks
)和管道(Pipelines
)被指定为Kubernetes集群中的自定义资源(CRD
)。
知识扩展: Task、Pipeline 分别用于什么时候?
Task
- 适用于更简单的工作负载,例如运行测试、lint 或构建 Kaniko 缓存
, Task 在单个中执行 Kubernetes Pod,使用单个磁盘,通常保持简单。Pipeline
- 适用于复杂的工作负载,例如静态分析,以及测试、构建和部署复杂的项目
TaskRuns and PipelineRuns 运行示例图
pipelineRuns
是 Pipeline 的执行入口,可以触发执行 Pipeline 即CI/CD工作流
,每次执行都将成为Kubernetes集群中可跟踪的pipelineRun资源。TaskRuns
是 Task 的特定执行, 当您选择在Pipeline 之外运行Task时非常有用,您可以通过它查看任务中每个步骤执行的细节。
知识总结: TaskRuns
和 PipelineRuns
运行将资源与 Task
和 Pipeline
连接起来,运行必须包括资源的实际地址,例如存储库的URL、任务或管道需求,从而允许开发人员针对不同的输入和输出重用 Task
或者 Pipeline
.

温馨提示: 您可以手动创建 taskRun
或pipelineRuns
以及通过 Tekton Triggers 自动触发Tekton立即运行Task或pipeline。
5.Tekton 如何使用?
描述: 本小节将讲解 Tekton 如何学习及其使用,我们可以参考官方的Task、Pipeline以及Tekton Triggers示例进行入门学习,快速开始:https://tekton.dev/docs/getting-started/
其次是参考Tekton Github项目中的Task、Taskrun、Pipeline、Pipeline以及挂载卷、Step 结果存储等高级示例示例,地址为: https://github.com/tektoncd/pipeline/tree/main/examples
最后是参考Tekton Hub中的常用的Task脚本,帮助各位看友可以快速上手使用,等待熟悉之后后期可以自行编写Task,再使用Pipeline进行自定义流水线组合,地址为:https://hub.tekton.dev
至此,我们可以从上述的网站中可以快速学习上手使用,并应用在你企业内部GitOps环境中。

0x01 安装部署
部署环境
测试环境及版本说明:
部署实践
Tekton 组件部署
pipeline
描述: Tekton Pipelines 项目提供了 k8s 风格的资源用于声明 CI/CD 样式的管道。Tekton Pipelines 可以部署到任何的K8S集群,管道中的任务可以独立运行,并且Git存储资源可以在之间相互轻松交互。
项目地址: https://github.com/tektoncd/pipeline/releases
温馨提示: 针对于不同的Kubernetes版本需要采用不同的Tekton Pipelines版本,你应该查看官方文档 Required Kubernetes Version 章节, 例如作者此时k8s环境为 v1.23.x版本应该选用 v0.41.x <= 可选范围 <v0.45.x
之间的版本 。
温馨提示: Pipelines v0.44.4 | Triggers v0.22.2 | Dashboard v0.35.1 版本的相关镜像都可以在作者dockerHub中下载,地址 https://hub.docker.com/r/weiyigeek/
安装步骤
Step 1.下载 tektoncd pipeline 资源部署清单。
Step 2.使用作者此篇【 如何使用Github Action优雅的同步国外镜像到DockerHub或私有仓库
】文章的方式[ https://mp.weixin.qq.com/s/0STtKrlgYqpoqwMgb0QnoA],利用Github Action来拉取指定镜像到我们的DockerHub中或私有镜像仓库中,执行如下Shell脚本构建skopeo同步命令以及替换资源清单中相关镜像。
执行结果:
Github项目地址(欢迎大家Fork,然后自行更改项目中的secrets即可): https://github.com/WeiyiGeek/action-sync-images/ ,将上述执行结果复制到入下图所示的工作流中。

Step 3.部署 Tekton-Pipelines
执行结果:
triggers
描述: Tekton Triggers是一个Kubernetes自定义资源定义(CRD)控制器,它允许您根据从事件有效负载中提取的信息创建Kubernete资源。
项目地址: https://github.com/tektoncd/triggers
安装文档: https://tekton.dev/docs/installation/triggers/
温馨提示: 同样的,针对于不同的Kubernetes版本需要采用不同的Tekton triggers版本,你应该查看官方文档 Required Kubernetes Version 章节, 例如作者此时k8s环境为 v1.23.x版本应该选用v0.22.x
的版本 。
安装步骤
Step 1.从官网下载 tekton-triggers 所需的资源清单。
Step 2.同安装pipelines步骤2一样,作者使用此篇【 如何使用Github Action优雅的同步国外镜像到DockerHub或私有仓库
】文章的方式[https://mp.weixin.qq.com/s/0STtKrlgYqpoqwMgb0QnoA],利用Github Action来拉取指定镜像到我们的DockerHub中或私有镜像仓库中,执行如下Shell脚本构建skopeo同步命令以及替换资源清单中相关镜像。
执行结果:
Github项目地址(欢迎大家Fork,然后自行更改项目中的secrets即可): https://github.com/WeiyiGeek/action-sync-images/ ,将上述执行结果复制到pipelines步骤2图中所示的工作流中。
Step 3.部署 Tekton Triggers
dashboard
描述:Tekton Dashboard是一个通用的、基于web的用户界面,用于Tekton Pipelines和Tekton Triggers资源, 它允许用户管理和查看Tekton资源的创建、执行和结果查看,其支持的一些功能:
PipelineRun和TaskRun状态和日志的实时视图
按标签筛选资源
查看资源概述和YAML
显示整个集群的资源或限制特定命名空间的可见性
直接从git存储库导入资源
通过扩展添加功能
项目地址: https://github.com/tektoncd/dashboard/
安装文档: https://tekton.dev/docs/dashboard/
温馨提示: 同样的,针对于不同的Kubernetes版本需要采用不同的Tekton dashboard版本并且对应着Pipelines Releases / Triggers Releases
版本,你应该查看官方文档 Required Kubernetes Version 章节, 例如作者此时k8s环境为 v1.23.x版本应该选用v0.22.x
的版本 。
安装步骤
Step 1.从官网下载 Tekton Dashboard 所需的资源清单, 注意此处分为 release
与 release-full
两个版本前置只支持read,而后者支持修改流水线等操作,此处作者使用full版本。
Step 2.同安装pipelines步骤2一样,作者使用此篇【如何使用Github Action优雅的同步国外镜像到DockerHub或私有仓库
】文章的方式,利用Github Action来拉取指定镜像到我们的DockerHub中或私有镜像仓库中,执行如下Shell脚本构建skopeo同步命令以及替换资源清单中相关镜像。
执行结果: skopeo copy --all docker://gcr.io/tekton-releases/github.com/tektoncd/dashboard/cmd/dashboard:v0.35.1 docker://weiyigeek/tektoncd-dashboard-dashboard:v0.35.1
Step 3.部署Tekton Dashboard
Step 4.为Tekton Dashboard站点配置域名test.weiyigeek.top
,此处我在腾讯云中申请了免费SSL证书,为此站点配置SSL, 提交申请之后大约5~10分钟的样子即可,签发下来此时在证书后点击下载根证书下载(crt文件)以及 Nginx(适用大部分场景)(pem文件、crt文件、key文件),并上传至服务器使用unzip解压。
申请地址: https://cloud.tencent.com/act/cps/redirect?redirect=10019&cps_key=b33075ae5a2baf3b47e7456ee5821502

Step 5.此处作者已经在集群中安装了ingress-nginx
,若还没有安装部署的可以参考作者此篇文章【 Ingress-Nginx 服务暴露基础学习与实践
】[https://blog.weiyigeek.top/2020/5-27-529.html]或者ngress-nginx官网,执行下述命令创建ingress规则,以便我们通过https://test.weiyigeek.top/tekton/
地址访问 Tekton-Dashboard 服务。
Step 6.客户端设置硬解析或者使用内部DNS服务器将test.weiyigeek.top
解析到Kubernetes任意一个节点,通常会指定一个出口节点,例如此处10.20.176.215 test.weiyigeek.top
。
然后使用浏览器访问 tekton-dashboard 地址(https://test.weiyigeek.top/tekton/
) , 配置无误将显示如下图所示:

至此,Tekton 在K8S常规组件的安装完毕。
Tekton CLI
描述: Tekton Pipelines CLI项目提供了一个命令行界面(CLI),用于与Tekton交互,Tekton是一个用于持续集成和交付(CI/CD)系统的开源框架。
项目地址: https://github.com/tektoncd/cli/releases
使用文档: https://tekton.dev/docs/cli/
安装流程
Step 1.指定当前最新的Cli版本,使用二进制方式进行安装部署.
Step 2.将tkn添加为kubectl插件.
原文地址:https://blog.weiyigeek.top/2023/7-22-768.html
亲,文章都看完了,不关注【全栈工程师修炼指南】吗?
如果此篇文章对你有帮助,请你将它分享给更多的人!

学习书籍推荐 往期发布文章


作者答疑学习交流群:欢迎各位志同道合的朋友一起学习交流关注UP主后回复【学习交流群】。
🌐欢迎加入交流学习群:https://weiyigeek.top/visit.html
【WeiyiGeek Blog's - 花开堪折直须折,莫待无花空折枝 】
作者主页:【 https://weiyigeek.top 】
博客地址:【 https://blog.weiyigeek.top 】
作者交流(wechat):weiyigeeker
公众号(wechat):全栈工程师修炼指南
温馨提示: 由于作者水平有限,本章错漏缺点在所难免,希望读者批评指正,并请在文章末尾留下您宝贵的经验知识,联系邮箱地址 master@weiyigeek.top 或者 UP主 、UP主 联系我。
希望各位B站看友多多支持【关注、点赞、评论、收藏、投币】,助力每一个梦想。