欢迎光临散文网 会员登陆 & 注册

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

2023-08-02 16:00 作者:全栈工程师修炼指南  | 我要投稿

欢迎关注「全栈工程师修炼指南点我,点我 UP主

全栈工程师修炼指南 UP 主,个人介绍

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

本章目录:

首发地址: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 中最重要的五个概念:TaskTaskRunPipelinePipelineRunPipelineResources(已在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.

温馨提示: 您可以手动创建 taskRunpipelineRuns以及通过 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站多支持【关注、点赞、评论、收藏、投币】,助力每一个梦想

我在B站学云原生 | 下一代CI/CD工具,Tekton入门部署指南的评论 (共 条)

分享到微博请遵守国家法律