我在B站學(xué)云原生 | 下一代CI/CD工具,Tekton入門部署指南

歡迎關(guān)注「全棧工程師修煉指南」點(diǎn)我,點(diǎn)我?UP主

作者?<安全開發(fā)運(yùn)維>?答疑交流群,回復(fù)【學(xué)習(xí)交流群】即可加入

本章目錄:

首發(fā)地址:https://mp.weixin.qq.com/s/cMzgur6KE6XdswvUWhyJUA

0x00 快速入門
1.Tekton 是什么?
歷史背景
Tekton 的前身是?Knative
?的子項(xiàng)目?build-pipeline
,主要用來給?Kantive
?的 build 模塊增加 pipeline 功能之后獨(dú)立出來,Tekton的最終目標(biāo)是一個(gè)通用的?CI/CD
?工具。
目前,私有云市場(chǎng)占有率比較高的 CICD 工具對(duì)?Kubernetes
?都有所支持,比如?Jenkins、GitLab CI
。但是這些工具只是將 Kubernetes 作為其擴(kuò)展的一個(gè)方面,Kubernetes 作為新的基礎(chǔ)設(shè)施,需要原生的 CICD 方案。另一方面,Jenkins 的子項(xiàng)目?JenkinsX
?也開始默認(rèn)使用 Tekton 作為 CI 引擎。使用云原生?CRD
?(是Kubernetes內(nèi)置的資源類型,即自定義資源的定義) +?Controller
?實(shí)現(xiàn)的 Tekton ,無疑有機(jī)會(huì)成為云原生的主流編排引擎。
簡(jiǎn)單介紹
描述:?Tekton 是一個(gè)開源的云原生持續(xù)集成和持續(xù)交付/部署【Cloud Native CI/CD】解決方案, 使用Golang語言進(jìn)行開發(fā),允許開發(fā)人員通過K8S云平臺(tái)快速靈活定義流水線,從而更加便捷構(gòu)建、測(cè)試和部署系統(tǒng),目前是由CD基金會(huì)[https://cd.foundation/]管理的項(xiàng)目,其遵循OpenSSF最佳實(shí)踐。
溫馨提示: 此章節(jié)作為GitOps中的Tekton初識(shí)章節(jié),作者后續(xù)會(huì)持續(xù)更新Tekton+ArgoCD 結(jié)合實(shí)踐教程,Tekton 更專注構(gòu)建 CI/CD 流水線,ArgoCD 更專注應(yīng)用管理和部署,希望大家多多關(guān)注【全棧工程師修煉指南
】,作者將推出更多原創(chuàng)文章
。
Tekton 官網(wǎng)地址:?https://tekton.dev/
2.Tekton 有何用?
描述: 前面介紹到 Tekton 主要用于在云原生架構(gòu)環(huán)境中完成CI、CD部分,主要是devops工程師以及開發(fā)人員使用,其側(cè)重點(diǎn)應(yīng)該是在云原生微服務(wù)應(yīng)用以及傳統(tǒng)應(yīng)用
的CI持續(xù)集成上,
除此之外使用 tekton 的好處如下
可移植性: 跨平臺(tái)、語言、和部署環(huán)境。它適用于 Jenkins、Jenkins X、Skaffold、 Knative 和許多其他流行的 CI/CD 工具。
可定制:Tekton 實(shí)體是完全可定制的,從而具有高度的靈活性。平臺(tái)工程師可以定義非常詳細(xì)的構(gòu)建基目錄,以供開發(fā)人員在各種情況下使用
可重復(fù)使用:Tekton 實(shí)體是完全可移植的,因此一旦定義,組織內(nèi)的任何人都可以使用給定的管道并重用其構(gòu)造塊。這使開發(fā)人員可以快速構(gòu)建復(fù)雜的管道,而無需“重新發(fā)明輪子”。
可擴(kuò)展:Tekton Catalog是Tekton社區(qū)驅(qū)動(dòng)的存儲(chǔ)庫。您可以使用Tekton目錄中的預(yù)制組件快速創(chuàng)建新的并展開現(xiàn)有管道。
標(biāo)準(zhǔn)化:Tekton 在您的Kubernetes集群上作為擴(kuò)展安裝并運(yùn)行,并使用成熟的 Kubernetes 資源模型, 其工作負(fù)載在 Kubernetes 容器內(nèi)執(zhí)行。
縮放性:為了增加工作負(fù)載容量,您可以簡(jiǎn)單地將節(jié)點(diǎn)添加到群集, Tekton 隨集群一起擴(kuò)展 無需重新定義資源分配或?qū)艿肋M(jìn)行任何其他修改。
3.Tekton 組件介紹
?Tekton Pipelines:Tekton 的基礎(chǔ)部分,它定義了一組Kubernetes自定義資源,這些資源充當(dāng)構(gòu)建塊,您可以從中組裝CI/CD管道。
?Tekton Triggers:允許基于 event 實(shí)例化 pipeline。例如,每次PR與GitHub存儲(chǔ)庫合并時(shí),您都可以觸發(fā)管道的實(shí)例化和執(zhí)行。
?Tekton Cli:是Tekton Pipelines的一個(gè)基于Web的圖形界面,用于顯示有關(guān)管道執(zhí)行的信息。目前正在進(jìn)行中。
?Tekton Dashboard:是Tekton Pipelines的一個(gè)基于Web的圖形界面,用于顯示有關(guān)管道執(zhí)行的信息。
?Tekton Catalog:是一個(gè)由社區(qū)貢獻(xiàn)的高質(zhì)量Tekton構(gòu)建塊(任務(wù)、管道等)的存儲(chǔ)庫,可在您自己的管道中使用。
?Tekton Hub:基于Web的圖形界面,用于訪問Tekton Catalog。
?Tekton Operator:是一個(gè)Kubernetes Operator模式,允許您在Kubernete集群上安裝、更新和刪除Tekton項(xiàng)目。
?Tekton Chain : 為使用Tekton Pipelines建造的文物提供生成、存儲(chǔ)和標(biāo)記出處的工具。
4.Tekton 概念術(shù)語
Tekton Pipelines 中最重要的五個(gè)概念:Task
、TaskRun
、Pipeline
、PipelineRun
、PipelineResources
(已在v0.44版本被丟棄,此處簡(jiǎn)單了解)。
Task
:Tekton 中的最小單元,代表一個(gè)任務(wù)模板,包括多個(gè)步驟。定義一個(gè)有序的Step以及每個(gè) Step 調(diào)用特定的 在一組特定的輸入上構(gòu)建工具,并生成一組特定的輸出,這些輸出可用作下一個(gè)輸入 Step。TaskRun
:實(shí)例化一個(gè)特定的 Task 在一組特定的輸入并生成一組特定的輸出,并且一個(gè) TaskRun 會(huì)創(chuàng)建一個(gè)對(duì)應(yīng)的 Pod,每個(gè) step 對(duì)應(yīng) pod 中的一個(gè) container。Pipeline
:Tekton 中一系列有序 Task 組成的有向無環(huán)圖,定義了流水線的模板。PipelineRun
:Pipeline 執(zhí)行時(shí)需要定義一個(gè) PipelineRun,作為流水線的實(shí)例,生成一條流水線記錄。PipelineResource
(已被丟棄):流水線執(zhí)行過程中需要的資源信息。
Steps, Tasks, and Pipelines 運(yùn)行示例圖
在?
Step
?中 定義CI/CD工作流中可以完成某一階段的操作,例如代碼拉取,編譯構(gòu)建Java程序,鏡像構(gòu)建,以及應(yīng)用部署,Tekton 通常會(huì)為每一個(gè)階段生成一個(gè)Container。在?
Task
?中 是按照順序排列 Step 的集合,定義裝載一個(gè)Kubernetes卷共享環(huán)境,Tekton以Kubernetes pod的形式運(yùn)行任務(wù),其中每個(gè)步驟都成為pod中的運(yùn)行容器。在?
Pipelines
?中是按照順序排列 Task 的集合,Tekton 整理所有的Task,將它們連接到有向無環(huán)圖(DAG)中,并按順序依次執(zhí)行。換句話說,它創(chuàng)建了許多Kubernetes pod,并確保每個(gè)pod都能按要求成功運(yùn)行。

溫馨提示: 任務(wù)(Tasks
)和管道(Pipelines
)被指定為Kubernetes集群中的自定義資源(CRD
)。
知識(shí)擴(kuò)展: Task、Pipeline 分別用于什么時(shí)候?
Task
?- 適用于更簡(jiǎn)單的工作負(fù)載,例如運(yùn)行測(cè)試、lint 或構(gòu)建 Kaniko 緩存
, Task 在單個(gè)中執(zhí)行 Kubernetes Pod,使用單個(gè)磁盤,通常保持簡(jiǎn)單。Pipeline
?- 適用于復(fù)雜的工作負(fù)載,例如靜態(tài)分析,以及測(cè)試、構(gòu)建和部署復(fù)雜的項(xiàng)目
TaskRuns and PipelineRuns 運(yùn)行示例圖
pipelineRuns
?是 Pipeline 的執(zhí)行入口,可以觸發(fā)執(zhí)行 Pipeline 即?CI/CD工作流
,每次執(zhí)行都將成為Kubernetes集群中可跟蹤的pipelineRun資源。TaskRuns
?是 Task 的特定執(zhí)行, 當(dāng)您選擇在Pipeline 之外運(yùn)行Task時(shí)非常有用,您可以通過它查看任務(wù)中每個(gè)步驟執(zhí)行的細(xì)節(jié)。
知識(shí)總結(jié):?TaskRuns
?和?PipelineRuns
?運(yùn)行將資源與?Task
?和?Pipeline
?連接起來,運(yùn)行必須包括資源的實(shí)際地址,例如存儲(chǔ)庫的URL、任務(wù)或管道需求,從而允許開發(fā)人員針對(duì)不同的輸入和輸出重用?Task
?或者?Pipeline
.

溫馨提示: 您可以手動(dòng)創(chuàng)建?taskRun
或pipelineRuns
以及通過 Tekton Triggers 自動(dòng)觸發(fā)Tekton立即運(yùn)行Task或pipeline。
5.Tekton 如何使用?
描述: 本小節(jié)將講解 Tekton 如何學(xué)習(xí)及其使用,我們可以參考官方的Task、Pipeline以及Tekton Triggers示例進(jìn)行入門學(xué)習(xí),快速開始:https://tekton.dev/docs/getting-started/
其次是參考Tekton Github項(xiàng)目中的Task、Taskrun、Pipeline、Pipeline以及掛載卷、Step 結(jié)果存儲(chǔ)等高級(jí)示例示例,地址為:?https://github.com/tektoncd/pipeline/tree/main/examples
最后是參考Tekton Hub中的常用的Task腳本,幫助各位看友可以快速上手使用,等待熟悉之后后期可以自行編寫Task,再使用Pipeline進(jìn)行自定義流水線組合,地址為:https://hub.tekton.dev
至此,我們可以從上述的網(wǎng)站中可以快速學(xué)習(xí)上手使用,并應(yīng)用在你企業(yè)內(nèi)部GitOps環(huán)境中。

0x01 安裝部署
部署環(huán)境
測(cè)試環(huán)境及版本說明:
部署實(shí)踐
Tekton 組件部署
pipeline
描述: Tekton Pipelines 項(xiàng)目提供了 k8s 風(fēng)格的資源用于聲明 CI/CD 樣式的管道。Tekton Pipelines 可以部署到任何的K8S集群,管道中的任務(wù)可以獨(dú)立運(yùn)行,并且Git存儲(chǔ)資源可以在之間相互輕松交互。
項(xiàng)目地址:?https://github.com/tektoncd/pipeline/releases
溫馨提示: 針對(duì)于不同的Kubernetes版本需要采用不同的Tekton Pipelines版本,你應(yīng)該查看官方文檔 Required Kubernetes Version 章節(jié), 例如作者此時(shí)k8s環(huán)境為 v1.23.x版本應(yīng)該選用?v0.41.x <= 可選范圍 <v0.45.x
之間的版本 。
溫馨提示: Pipelines v0.44.4 | Triggers v0.22.2 | Dashboard v0.35.1 版本的相關(guān)鏡像都可以在作者dockerHub中下載,地址?https://hub.docker.com/r/weiyigeek/
安裝步驟
Step 1.下載 tektoncd pipeline 資源部署清單。
Step 2.使用作者此篇【?如何使用Github Action優(yōu)雅的同步國外鏡像到DockerHub或私有倉庫
?】文章的方式[?https://mp.weixin.qq.com/s/0STtKrlgYqpoqwMgb0QnoA],利用Github Action來拉取指定鏡像到我們的DockerHub中或私有鏡像倉庫中,執(zhí)行如下Shell腳本構(gòu)建skopeo同步命令以及替換資源清單中相關(guān)鏡像。
執(zhí)行結(jié)果:
Github項(xiàng)目地址(歡迎大家Fork,然后自行更改項(xiàng)目中的secrets即可):?https://github.com/WeiyiGeek/action-sync-images/?,將上述執(zhí)行結(jié)果復(fù)制到入下圖所示的工作流中。

Step 3.部署 Tekton-Pipelines
執(zhí)行結(jié)果:
triggers
描述: Tekton Triggers是一個(gè)Kubernetes自定義資源定義(CRD)控制器,它允許您根據(jù)從事件有效負(fù)載中提取的信息創(chuàng)建Kubernete資源。
項(xiàng)目地址:?https://github.com/tektoncd/triggers
安裝文檔:?https://tekton.dev/docs/installation/triggers/
溫馨提示: 同樣的,針對(duì)于不同的Kubernetes版本需要采用不同的Tekton triggers版本,你應(yīng)該查看官方文檔?Required Kubernetes Version?章節(jié), 例如作者此時(shí)k8s環(huán)境為 v1.23.x版本應(yīng)該選用v0.22.x
的版本 。
安裝步驟
Step 1.從官網(wǎng)下載 tekton-triggers 所需的資源清單。
Step 2.同安裝pipelines步驟2一樣,作者使用此篇【?如何使用Github Action優(yōu)雅的同步國外鏡像到DockerHub或私有倉庫
】文章的方式[https://mp.weixin.qq.com/s/0STtKrlgYqpoqwMgb0QnoA],利用Github Action來拉取指定鏡像到我們的DockerHub中或私有鏡像倉庫中,執(zhí)行如下Shell腳本構(gòu)建skopeo同步命令以及替換資源清單中相關(guān)鏡像。
執(zhí)行結(jié)果:
Github項(xiàng)目地址(歡迎大家Fork,然后自行更改項(xiàng)目中的secrets即可):?https://github.com/WeiyiGeek/action-sync-images/?,將上述執(zhí)行結(jié)果復(fù)制到pipelines步驟2圖中所示的工作流中。
Step 3.部署 Tekton Triggers
dashboard
描述:Tekton Dashboard是一個(gè)通用的、基于web的用戶界面,用于Tekton Pipelines和Tekton Triggers資源, 它允許用戶管理和查看Tekton資源的創(chuàng)建、執(zhí)行和結(jié)果查看,其支持的一些功能:
PipelineRun和TaskRun狀態(tài)和日志的實(shí)時(shí)視圖
按標(biāo)簽篩選資源
查看資源概述和YAML
顯示整個(gè)集群的資源或限制特定命名空間的可見性
直接從git存儲(chǔ)庫導(dǎo)入資源
通過擴(kuò)展添加功能
項(xiàng)目地址:?https://github.com/tektoncd/dashboard/
安裝文檔:?https://tekton.dev/docs/dashboard/
溫馨提示: 同樣的,針對(duì)于不同的Kubernetes版本需要采用不同的Tekton dashboard版本并且對(duì)應(yīng)著Pipelines Releases / Triggers Releases
版本,你應(yīng)該查看官方文檔?Required Kubernetes Version?章節(jié), 例如作者此時(shí)k8s環(huán)境為 v1.23.x版本應(yīng)該選用v0.22.x
的版本 。
安裝步驟
Step 1.從官網(wǎng)下載 Tekton Dashboard 所需的資源清單, 注意此處分為?release
?與?release-full
?兩個(gè)版本前置只支持read,而后者支持修改流水線等操作,此處作者使用full版本。
Step 2.同安裝pipelines步驟2一樣,作者使用此篇【如何使用Github Action優(yōu)雅的同步國外鏡像到DockerHub或私有倉庫
】文章的方式,利用Github Action來拉取指定鏡像到我們的DockerHub中或私有鏡像倉庫中,執(zhí)行如下Shell腳本構(gòu)建skopeo同步命令以及替換資源清單中相關(guān)鏡像。
執(zhí)行結(jié)果:?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站點(diǎn)配置域名test.weiyigeek.top
,此處我在騰訊云中申請(qǐng)了免費(fèi)SSL證書,為此站點(diǎn)配置SSL, 提交申請(qǐng)之后大約5~10分鐘的樣子即可,簽發(fā)下來此時(shí)在證書后點(diǎn)擊下載根證書下載(crt文件)以及 Nginx(適用大部分場(chǎng)景)(pem文件、crt文件、key文件),并上傳至服務(wù)器使用unzip解壓。
申請(qǐng)地址:?https://cloud.tencent.com/act/cps/redirect?redirect=10019&cps_key=b33075ae5a2baf3b47e7456ee5821502

Step 5.此處作者已經(jīng)在集群中安裝了ingress-nginx
,若還沒有安裝部署的可以參考作者此篇文章【?Ingress-Nginx 服務(wù)暴露基礎(chǔ)學(xué)習(xí)與實(shí)踐
?】[https://blog.weiyigeek.top/2020/5-27-529.html]或者ngress-nginx官網(wǎng),執(zhí)行下述命令創(chuàng)建ingress規(guī)則,以便我們通過https://test.weiyigeek.top/tekton/
地址訪問 Tekton-Dashboard 服務(wù)。
Step 6.客戶端設(shè)置硬解析或者使用內(nèi)部DNS服務(wù)器將test.weiyigeek.top
解析到Kubernetes任意一個(gè)節(jié)點(diǎn),通常會(huì)指定一個(gè)出口節(jié)點(diǎn),例如此處10.20.176.215 test.weiyigeek.top
。
然后使用瀏覽器訪問 tekton-dashboard 地址(https://test.weiyigeek.top/tekton/
) , 配置無誤將顯示如下圖所示:

至此,Tekton 在K8S常規(guī)組件的安裝完畢。
Tekton CLI
描述: Tekton Pipelines CLI項(xiàng)目提供了一個(gè)命令行界面(CLI),用于與Tekton交互,Tekton是一個(gè)用于持續(xù)集成和交付(CI/CD)系統(tǒng)的開源框架。
項(xiàng)目地址:?https://github.com/tektoncd/cli/releases
使用文檔:?https://tekton.dev/docs/cli/
安裝流程
Step 1.指定當(dāng)前最新的Cli版本,使用二進(jìn)制方式進(jìn)行安裝部署.
Step 2.將tkn添加為kubectl插件.
原文地址:https://blog.weiyigeek.top/2023/7-22-768.html
親,文章都看完了,不關(guān)注【全棧工程師修煉指南】嗎?
如果此篇文章對(duì)你有幫助,請(qǐng)你將它分享給更多的人!

學(xué)習(xí)書籍推薦?往期發(fā)布文章?

計(jì)算機(jī)從業(yè)-起始篇 | 第1章.計(jì)算機(jī)科學(xué)導(dǎo)論之【基礎(chǔ)緒論】學(xué)習(xí)筆記
計(jì)算機(jī)從業(yè)-起始篇 | 第2章.計(jì)算機(jī)科學(xué)導(dǎo)論之【數(shù)字系統(tǒng)】學(xué)習(xí)筆記
計(jì)算機(jī)從業(yè)-起始篇 | 第3章.計(jì)算機(jī)科學(xué)導(dǎo)論之【數(shù)據(jù)存儲(chǔ)】學(xué)習(xí)筆記
網(wǎng)安等保-國產(chǎn)Linux操作系統(tǒng)銀河麒麟KylinOS-V10SP3常規(guī)配置系統(tǒng)優(yōu)化與安全加固基線
網(wǎng)安等保-Linux安全加固之最新Ubuntu-22.04-LTS系統(tǒng)內(nèi)核優(yōu)化與安全加固配置腳本分享
企業(yè)運(yùn)維 | NFS、Samba服務(wù)在Docker容器環(huán)境中快速搭建部署實(shí)踐
網(wǎng)站首頁被篡改? 看我使用PhantomJS利器實(shí)現(xiàn)網(wǎng)站自動(dòng)監(jiān)控修改并截圖發(fā)送企業(yè)微信預(yù)警(視頻)
資源分享 | 申請(qǐng)永久免費(fèi)的eu.org頂級(jí)域名創(chuàng)建屬于自己的域名,再也不用給自己博客域名續(xù)費(fèi)了(視頻)
資源分享 | 每天白嫖兩小時(shí)微軟學(xué)習(xí)實(shí)驗(yàn)虛擬機(jī)云桌面上Google查學(xué)習(xí)資料(視頻)
運(yùn)維實(shí)踐-我在B站學(xué)源碼編譯Nginx利用GeoIP2模塊實(shí)現(xiàn)顯示IP所屬地及處理不同地區(qū)訪問
運(yùn)維實(shí)踐-我在B站學(xué)在源碼編譯Nginx里使用lua-nginx模塊解析Lua腳本訪問Redis數(shù)據(jù)庫

作者答疑學(xué)習(xí)交流群:歡迎各位志同道合的朋友一起學(xué)習(xí)交流關(guān)注UP主后回復(fù)【學(xué)習(xí)交流群】。
??歡迎加入交流學(xué)習(xí)群:https://weiyigeek.top/visit.html
【WeiyiGeek Blog's - 花開堪折直須折,莫待無花空折枝?】
作者主頁:【?https://weiyigeek.top?】
博客地址:【?https://blog.weiyigeek.top?】
作者交流(wechat):weiyigeeker
公眾號(hào)(wechat):全棧工程師修煉指南
溫馨提示: 由于作者水平有限,本章錯(cuò)漏缺點(diǎn)在所難免,希望讀者批評(píng)指正,并請(qǐng)?jiān)谖恼履┪擦粝履鷮氋F的經(jīng)驗(yàn)知識(shí),聯(lián)系郵箱地址?master@weiyigeek.top?或者?UP主 、UP主?聯(lián)系我。
希望各位B站看友多多支持【關(guān)注、點(diǎn)贊、評(píng)論、收藏、投幣】,助力每一個(gè)夢(mèng)想。