最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

云原生CI/CD工具對比

2023-03-13 11:37 作者:眾安工程效能  | 我要投稿

?

?前 言

當(dāng)前微服務(wù)和云原生應(yīng)用解決方案日趨成熟,?應(yīng)用架構(gòu)的細分和服務(wù)間的解耦使得服務(wù)有了獨立發(fā)布的能力,容器化與Kubernetes也已成為微服務(wù)應(yīng)用部署的標(biāo)準(zhǔn)方式。由此帶來構(gòu)建部署的頻率提升對CI/CD工具的并發(fā)性能、擴容能力以及穩(wěn)定性帶來新的挑戰(zhàn)。在云原生時代下,傳統(tǒng)的CI/CD工具的缺點越來越明顯,基于Kubernetes 能力打造新的云原生CI/CD平臺逐漸成為主流。

例如Jenkins 作為老牌流水線框架被大家所悉知,它依靠龐大的插件生態(tài),占據(jù)了目前大部分的企業(yè)級 CI/CD 引擎的份額。但在云原生時代,Jenkins 也暴露出很多的問題,Master單點故障、磁盤存儲、內(nèi)存占用、并行構(gòu)建性能等。因此Jenkins 也推出了 Jenkins X 作為基于 Kubernetes 的新一代流水線引擎。同時還有像Tekton、Argo?CD等較為流行的基于 Kubernetes 原生的CI/CD工具。

下面我們就來對Tekton、Jenkins X、Argo?CD等主流云原生CI/CD工具進行對比。在具體比較之前,讓我們先了解一些基礎(chǔ)內(nèi)容。

?

什么是Tekton?

Tekton 是一個基于 Kubernetes 的云原生 CI/CD 開源框架,屬于 CD 基金會的項目之一。Tekton 通過定義 CRD 的方式,讓用戶以靈活的自定義流水線以滿足自身 CI/CD 需求。

?

Tekton架構(gòu)

Tekton 引入了幾個新的 CRD,包括 Task、Pipeline、TaskRun 和 PipelineRun

l?Task: Task 為構(gòu)建任務(wù),是 Tekton 中不可分割的最小單位,正如同 Pod 在 Kubernetes 中的概念一樣。在 Task 中,可以有多個 Step,每個 Step 由一個 Container 來執(zhí)行。

l?Pipeline: Pipeline 由一個或多個 Task 組成。在 Pipeline 中,用戶可以定義這些 Task 的執(zhí)行順序以及依賴關(guān)系來組成 DAG(有向無環(huán)圖)。

l?PipelineRun: PipelineRun 是 Pipeline 的實際執(zhí)行產(chǎn)物,當(dāng)用戶定義好 Pipeline 后,可以通過創(chuàng)建 PipelineRun 的方式來執(zhí)行流水線,并生成一條流水線記錄。

l?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 通常由多個 Task 組成,這些 Task 串、并執(zhí)行。而每個 Task 中,又有若干個 Step ,Step 是串行執(zhí)行的。

?


同時 Pipeline 還定義了輸入、輸出,通常輸入 Git 倉庫,輸出鏡像。在運行時,Pipeline 對象作為一個模板,被 PipelineRun 引用,創(chuàng)建運行實例。

?


通過PipelineRunController 監(jiān)聽 PipelineRun 對象,將 PipelineRun 中所有的 Task 構(gòu)建為一張有向無環(huán)圖,創(chuàng)建 TaskRun。而 TaskRunController 監(jiān)聽 TaskRun 對象的變化,根據(jù) TaskRun 引用的 Task,創(chuàng)建 Pod 運行 Step。

?


每個任務(wù)在它自己的Kubernetes Pod中執(zhí)行。因此,默認(rèn)情況下,Pipeline中的任務(wù)不共享數(shù)據(jù)。要在任務(wù)之間共享數(shù)據(jù),必須顯式地配置每個任務(wù),使其輸出可用于下一個任務(wù),并將先前執(zhí)行的任務(wù)的輸出作為其輸入,還可以通過PV的方式共享數(shù)據(jù)。

?

Tekton的組件

l?Tekton Pipelines:tekton 的基礎(chǔ),定義了一組 CRD,用于定義 pipeline。包含tekton-pipeline-controller和tekton-pipeline-webhook兩個組件。

l?Tekton Triggers:允許基于 event 實例化 pipeline。比如:git的pr請求

l?Tekton Cli:提供命令行工具和 tekton 交互

l?Tekton Dashboard:圖形化界面展示 pipeline 信息

l?Tekton Catalog:高質(zhì)量的、社區(qū)貢獻的 pipeline 倉庫

l?Tekton Hub:圖形化界面訪問 tekton catalog

l?Tekton Operator:在k8s上安裝、移除、更新tekton組件的項目

?

什么是Jenkins?X?

????Jenkins X是基于Kubernetes的持續(xù)集成、持續(xù)部署平臺。也是Jenkins的子項目。Jenkins X旨在使程序員在研發(fā)過程中能夠輕松遵循DevOps原理和最佳實踐。

?

Jenkins X架構(gòu)

??Jenkins X 基于松耦合架構(gòu)的 DevOps 模型,被設(shè)計用來支持在多個團隊間,部署大量可重復(fù)、可管理的分布式微服務(wù)。在Jenkins X的設(shè)計中,整合了Tekton,Helm,Draft,GitOps,以及Nexus,Chartmuseum,Monocular,Skaffold等諸多系統(tǒng)和工具,從而實現(xiàn)自動構(gòu)建編譯環(huán)境,生成容器鏡像,流水線,自動化部署,并通過簡單的Review實現(xiàn)不同環(huán)境間的自動發(fā)布。


Jenkins X 特性

1.完美封裝的命令行工具

Jenkins X 帶來了一個方便使用的命令行工具 jx :

l?安裝 Jenkins X 到已經(jīng)存在的 Kubernetes 集群

l?創(chuàng)建一個新的 kubernetes 集群 并安裝Jenkins X

l?導(dǎo)入項目到Jenkins X 中以及他們的持續(xù)部署流水線設(shè)置

l?創(chuàng)建新的Spring Boot應(yīng)用 并導(dǎo)入Jenkins X 中,以及他們的持續(xù)部署流水線設(shè)置

?

2.自動化流水線

選擇項目類型自動生成Jenkinsfile定義流水線

l?自動生成Dockerfile并打包容器鏡像

l?自動創(chuàng)建Helm Chart并運行在Kubernetes集群

l?自動關(guān)聯(lián)代碼庫和流水線,作為代碼變更自動觸發(fā)(基于Webhook實現(xiàn))

l?自動版本號自動歸檔

?

3基于GitOps的部署升級

l?所有的環(huán)境,應(yīng)用列表,版本,配置信息統(tǒng)一放在代碼庫中進行版本控制

l?通過Pull Request實現(xiàn)研發(fā)和運維的協(xié)同,完成應(yīng)用部署升級(Promotion)

l?可自動部署和手動部署,在必要的時候增加手工Review

?

4.自動生成預(yù)覽環(huán)境和信息同步反饋

l?預(yù)覽環(huán)境用于代碼Review環(huán)節(jié)中臨時創(chuàng)建

l?同Pull Request工作流程集成并實現(xiàn)信息同步和有效通知

l?驗證完畢后自動清理

l?提交和應(yīng)用狀態(tài)自動同步到Github注釋

l?自動生成release notes信息供驗證

?

什么是Argo?CD?

??Argo CD 是一個為 Kubernetes 而生的,遵循聲明式 GitOps 理念的持續(xù)部署(CD)工具。Argo CD 可在 Git 存儲庫更改時自動同步和部署應(yīng)用程序

Argo?CD架構(gòu)

Argo CD 是通過一個 Kubernetes 控制器來實現(xiàn)的,它持續(xù) watch 正在運行的應(yīng)用程序并將當(dāng)前的實時狀態(tài)與所需的目標(biāo)狀態(tài)( Git 存儲庫中指定的)進行比較。已經(jīng)部署的應(yīng)用程序的實際狀態(tài)與目標(biāo)狀態(tài)有差異,則被認(rèn)為是異常狀態(tài),Argo CD 會報告顯示這些差異,同時提供工具來自動或手動將狀態(tài)同步到期望的目標(biāo)狀態(tài)。在 Git 倉庫中對期望目標(biāo)狀態(tài)所做的任何修改都可以自動應(yīng)用反饋到指定的目標(biāo)環(huán)境中去。

?


從整體上看,Argo CD 有三個主要的組成部分:API Server 、Repository Server 、Application Controller。

?

API Server

Argo CD 的 API Server 是一個 gRPC/REST server,它公開 Web UI、CLI 以及一些其他場景需要用到的 API。

它主要進行以下幾個內(nèi)容:

l?應(yīng)用程序管理和狀態(tài)報告;

l?調(diào)用應(yīng)用程序操作(例如:同步、回滾、用戶定義的操作);

l?repository 和集群 credential 管理(存 K8s secrets);

l?身份驗證和授權(quán)委托給外部身份認(rèn)證組件;

l?RBAC(Role-based access control 基于角色的訪問控制);

l?Git webhook 事件的 listener/forwarder;

?

Repository Server

???Repository Server 是一個內(nèi)部服務(wù),它負(fù)責(zé)保存應(yīng)用程序 Git 倉庫的本地緩存,并負(fù)責(zé)生成和返回可供 Kubernetes 使用的 manifests,它接受的輸入信息主要有以下內(nèi)容:

l?倉庫地址(URL)

l?revision(commit, tag, branch)

l?應(yīng)用程序路徑

l?模板的特定設(shè)置:比如 helm values.yaml 等

?

Application Controller

Application Controller 是一個 Kubernetes controller,它持續(xù)監(jiān)聽正在運行的應(yīng)用程序并將當(dāng)前的實時狀態(tài)與所需的目標(biāo)狀態(tài)(如 repo 中指定的)進行比較。它檢測 OutOfSync 應(yīng)用程序狀態(tài)并有選擇地采取糾正措施。它負(fù)責(zé)為生命周期事件(PreSync、Sync、PostSync)調(diào)用任何用戶定義的 hooks。

?

Argo?CD特性:

l?將應(yīng)用程序自動部署到指定的目標(biāo)環(huán)境

l?支持多種配置管理/模板工具(Kustomize、Helm、Jsonnet、plain-YAML)

l?能夠管理和部署到多個集群

l?SSO 集成(OIDC、OAuth2、LDAP、SAML 2.0、GitHub、GitLab、Microsoft、LinkedIn)

l?支持多租戶和 RBAC 授權(quán)策略

l?可隨地滾動回滾到 Git 存儲庫中提交的任何應(yīng)用程序配置

l?應(yīng)用資源健康狀態(tài)分析

l?自動配置檢測和可視化

l?自動或手動將應(yīng)用程序同步到所需狀態(tài)

l?提供應(yīng)用程序活動實時視圖的 Web UI

l?用于自動化和 CI 集成的 CLI

l?Webhook 集成(GitHub、BitBucket、GitLab)

l?用于自動化的訪問令牌

l?提供PreSync、Sync、PostSync Hooks以支持復(fù)雜的應(yīng)用程序推出(例如藍/綠和金絲雀升級)

l?應(yīng)用程序事件和 API 調(diào)用的審計跟蹤

l?Prometheus 監(jiān)控指標(biāo)

l?用于覆蓋 Git 中的 ksonnet/helm 參數(shù)

?

指標(biāo)對比


總結(jié)

云原生CI/CD工具由于都是基于Kubernetes 打造的在高可用、并發(fā)性能、擴容能力都非常不錯沒有太大的區(qū)別。如何選擇適合自己的云原生CI/CD工具主要就是根據(jù)業(yè)務(wù)需求、使用場景、擴展性以及易用性來選擇了。下面我們總結(jié)了一下Tekton、Jenkins?X、Argo?CD的優(yōu)勢與適用場景,希望能幫助您更好的做出決策。

Tekton更像是一套構(gòu)建 CI/CD 系統(tǒng)的開發(fā)框架,它非常的輕量、靈活、可擴展性極高。它不能立即使你獲得CI/CD的能力。但得益于 Tekton 高度抽象化的設(shè)計,可以設(shè)計出各式各樣具有創(chuàng)造力的CI/CD流水線。Tekton更適用于具有良好工程能力的團隊,希望從零打造一套極具特色的CI/CD平臺。

Jenkins X是一個雄心勃勃的項目,他整合了眾多工具提供開箱即用的強大功能,不需要自己拼湊出一整套獨立的工具和配置。采用Jenkins X的最大挑戰(zhàn)是,很難知道它是解決公司所有CI/CD需求的完美解決方案,還是一個過于復(fù)雜的怪獸,它最初會帶來一些快速的勝利,但在未來的發(fā)展中可能會成為一個障礙。Jenkins?X更適用于具有非常豐富的Jenkins使用經(jīng)驗的團隊,希望在兼容現(xiàn)有平臺的前提下引入云原生的CI/CD,那么Jenkins?X是一個不錯的選擇。

Argo?CD也足夠輕量級,Gitops是它的主要優(yōu)勢。它使用Gitops的方式管理不同集群中多個應(yīng)用程序的部署,應(yīng)用程序部署和生命周期管理是自動化的、可審計的以及易于回滾的。但是靈活性和擴展能力不足,對于CI部分還需要與其他工具協(xié)作。Argo?CD更適用于團隊中已有成熟穩(wěn)定的CI工具,希望引入Gitops來優(yōu)化CD部署與管理。

?

眾安實踐

基于以上對比結(jié)果,眾安從自身需求出發(fā),采用Tekton架構(gòu)開發(fā)DevCube研發(fā)運維一體化平臺的發(fā)布上線平臺SHIP,基于K8s云原生設(shè)計,可提供快速、安全、便捷的自動化構(gòu)建、部署、上線能力。支持金絲雀、滾動、藍綠等多種發(fā)布方式及可靠的服務(wù)治理能力。

云原生CI/CD工具對比的評論 (共 條)

分享到微博請遵守國家法律
杨浦区| 大理市| 同心县| 庆元县| 榆中县| 乌拉特后旗| 郧西县| 天峻县| 宜宾市| 瑞金市| 盱眙县| 平定县| 合水县| 哈密市| 桓仁| 石景山区| 孝感市| 宕昌县| 水城县| 保靖县| 石狮市| 惠州市| 潞城市| 延吉市| 天水市| 东乡县| 宁城县| 鄯善县| 新源县| 黑龙江省| 砚山县| 泰兴市| 平凉市| 镇安县| 临江市| 宜昌市| 青神县| 龙南县| 陆良县| 富蕴县| 大埔区|