基于Tekton和ArgoCD的GitOps實戰(zhàn)
隨著云原生持續(xù)升溫,CI/CD成為了人們討論的焦點,GitOps就是云原生的一種持續(xù)交付模式,它將應(yīng)用系統(tǒng)的聲明性基礎(chǔ)架構(gòu)和應(yīng)用程序存放在Git的版本控制庫中。
實現(xiàn)GitOps的工具有很多,Tekton和Argo CD就是后起之秀的代表。
一、Tekton
Tekton是一個強大而靈活的開源框架,用于創(chuàng)建CI/CD系統(tǒng),通過Operator的方式集成到k8s集群中,并以容器作為驅(qū)動,完成流水線模版定義的任務(wù),社區(qū)也提供了很多任務(wù)模版來方便使用。
Tekton 為 CI/CD 系統(tǒng)提供了諸多好處(主要用于CI):
- 可定制:Tekton 是完全可定制的,具有高度的靈活性,我們可以定義非常詳細的構(gòu)建塊目錄,供開發(fā)人員在各種場景中使用。
- 可重復(fù)使用:Tekton 是完全可移植的,任何人都可以使用給定的流水線并重用其構(gòu)建塊,可以使得開發(fā)人員無需"造輪子"就可以快速構(gòu)建復(fù)雜的流水線。
- 可擴展:Tekton Catalog 是社區(qū)驅(qū)動的 Tekton 構(gòu)建塊存儲庫,我們可以使用 Tekton Catalog 中定義的組件快速創(chuàng)建新的流水線并擴展現(xiàn)有管道。
- 標(biāo)準(zhǔn)化:Tekton 在你的 Kubernetes 集群上作為擴展安裝和運行,并使用完善的 Kubernetes 資源模型,Tekton 工作負載在 Kubernetes Pod 內(nèi)執(zhí)行。
- 伸縮性:要增加工作負載容量,只需添加新的節(jié)點到集群即可,Tekton 可隨集群擴展,無需重新定義資源分配或?qū)艿肋M行任何其他修改。
Tekton為Kubernetes提供了多種CRD資源對象,可用于定義我們的流水線,主要有以下幾個:Task、TaksRun、Pipeline、PipelineRun和PipelineResource。
- Task:Task 為構(gòu)建任務(wù),是 Tekton 中不可分割的最小單位,正如同 Pod 在 Kubernetes 中的概念一樣。在 Task 中,可以有多個 Step,每個 Step 由一個 Container 來執(zhí)行。
- TaskRun:PipelineRun 被創(chuàng)建出來后,會對應(yīng) Pipeline 里面的 Task 創(chuàng)建各自的 TaskRun。一個 TaskRun 控制一個 Pod,Task 中的 Step 對應(yīng) Pod 中的 Container。當(dāng)然,TaskRun 也可以單獨被創(chuàng)建。
- Pipeline:Pipeline 由一個或多個 Task 組成。在 Pipeline 中,用戶可以定義這些 Task 的執(zhí)行順序以及依賴關(guān)系來組成 DAG(有向無環(huán)圖)。
- PipelineRun:PipelineRun 是 Pipeline 的實際執(zhí)行產(chǎn)物,當(dāng)用戶定義好 Pipeline 后,可以通過創(chuàng)建 PipelineRun 的方式來執(zhí)行流水線,并生成一條流水線記錄。
- PipelineResource:表示Pipeline輸入資源,比如GitHub上的源碼,或者Pipeline速輸出資源,例如一個容器鏡像或者構(gòu)建生成的jar包等。
二、Argo CD
Argo CD 從名字就能看出(有個 CD),它側(cè)重于持續(xù)部署這一塊兒,因而CD部分使用Argo CD來完成。
Argo CD是用于Kubernetes的聲明性GitOps持續(xù)交付工具,可以在指定的目標(biāo)環(huán)境中自動部署所需的應(yīng)用程序狀態(tài),應(yīng)用程序部署可以在Git提交時跟蹤對分支,標(biāo)簽的更新或固定到清單的特定版本。
Argo CD的主要功能
- 可搭配使用各種配置管理工具(如 ksonnet/jsonnet、Helm 和 kustomize)使應(yīng)用程序與 Git 中定義的保持一致;
- 將應(yīng)用程序自動部署到指定的目標(biāo)環(huán)境;
- 持續(xù)監(jiān)控已部署的應(yīng)用程序;
- 基于 Web 和 CLI 的操作,以及應(yīng)用程序可視化;
- 部署或回滾到 Git 倉庫中提交的應(yīng)用程序的任何狀態(tài)(這也是使用 Git 進行版本管理的一大好處);
- PreSync、Sync、PostSync hooks 以支持復(fù)雜的應(yīng)用程序部署策略(例如:blue/green 、canary upgrades);
- SSO 集成(OIDC、LDAP、SAML 2.0、GitLab、Microsoft、LinkedIn),這些是企業(yè)比較需要的功能;
- Webhook 集成(GitHub、BitBucket、GitLab)。
- 可以獨立使用,也可以作為現(xiàn)有 Pipeline 的一部分使用,例如與 Argo Workflow、Jenkins 以及 GitLab CI 等配合使用;
Aego CD中的幾個主要組件:
- API服務(wù):API服務(wù)是一個gRPC/REST服務(wù),它暴露了Web暴露了 Web UI、CLI 和 CI/CD 系統(tǒng)使用的接口。
- 倉庫服務(wù):存儲倉庫服務(wù)是一個內(nèi)部服務(wù),負責(zé)維護保存應(yīng)用程序清單Git倉庫的本地緩存。
- 應(yīng)用控制器:應(yīng)用控制器是一個Kuberntes控制器,他持續(xù)watch正在運行的應(yīng)用程序并將當(dāng)前的實時狀態(tài)與所期望的目標(biāo)狀態(tài)進行比較。
三、總結(jié)
目前,很多敏捷和DevOps實踐已經(jīng)被廣泛應(yīng)用,一條條CI/CD流水線已經(jīng)被建立起來,我們已經(jīng)也有很好的工具來實現(xiàn)CI/CD,那么下一步就是基于這些工具,我們是否能很好地實踐應(yīng)用。