国产精品免费久久久久电影院_亚洲日韩蜜桃av无码一二三区_AV在线无码免费特黄毛片_亚洲欧美日韩电影在线专区_福利小视频午夜福利一区二区中文字幕_在线免费观看黄黄色视频_欧美菊爆视频在线观看免费_婷婷六月丁香五月_久久伊人精品中文字幕有码_强奸国产无码激情

Kubernetes DevOps CD工具對(duì)比選型

2022-06-24

823

作者:kaiyun開云創(chuàng)新 何小云


一、Flux

Kubernetes DevOps CD工具對(duì)比選型


1.1 安裝


Flux安裝和部署其他Pod的方式一樣,支持Helm Charts或Kustomize方式的安裝。同時(shí)fluxctl還提供命令行(CLI)工具。


可以通過(guò)fluxctl install命令添加參數(shù)得方式來(lái)監(jiān)視的Git倉(cāng)庫(kù)的URL。


1.2 GitOps部署


Flux會(huì)定期拉取遠(yuǎn)程Git倉(cāng)庫(kù),如果倉(cāng)庫(kù)里的文件有新更改,F(xiàn)lux會(huì)以GitOps方式將文件更新到目標(biāo)集群。可以是部署應(yīng)用程序,或維護(hù)Kubernetes集群配置等。


除了定期自動(dòng)方式,也可以通過(guò)fluxctl sync命令手動(dòng)觸發(fā)。


1.3 管理


從K8S群集管理的角度來(lái)看, Flux實(shí)際上是在Pod中部署的單個(gè)二進(jìn)制文件,安裝后幾乎不需要管理。


可以通過(guò)更新yaml文件的方式來(lái)更改配置或升級(jí)到新版本,或使用Kustomize或Helm進(jìn)行更改。


除此之外,還可以fluxctl命令行工具進(jìn)行管理,如立即觸發(fā)同步、或查詢并展示集群中部署的相關(guān)配置和工作負(fù)載。


1.4 多租戶


由于Flux在架構(gòu)設(shè)計(jì)上沒(méi)考慮遠(yuǎn)程Git倉(cāng)庫(kù)和K8S命名空間的復(fù)雜性, Flux沒(méi)有考慮多租戶模式。


雖然Flux沒(méi)有多租戶模式,但可以由團(tuán)隊(duì)來(lái)自行管理Git倉(cāng)庫(kù),以及如何在K8S集群中用命名空間代表的應(yīng)用程序和目標(biāo)環(huán)境進(jìn)行關(guān)聯(lián)。為了實(shí)現(xiàn)不同團(tuán)隊(duì)之間的隔離,可以使用不同的Git倉(cāng)庫(kù),以及使用不同的Flux實(shí)例來(lái)監(jiān)視每一個(gè)Git倉(cāng)庫(kù)。


在使用方式上,可以在同一個(gè)K8S集群中創(chuàng)建多個(gè)Flux實(shí)例,每一個(gè)實(shí)例監(jiān)視不同的Git倉(cāng)庫(kù),并同步倉(cāng)庫(kù)的更新到不同的K8S命名空間中。這種方式需要不同的團(tuán)隊(duì)分別管理自己的Git倉(cāng)庫(kù)。


雖然在集群中運(yùn)行多個(gè)Flux實(shí)例可能會(huì)增加一些管理開銷,但它可以讓團(tuán)隊(duì)管理自己的環(huán)境倉(cāng)庫(kù),并擁有適當(dāng)?shù)臋?quán)限來(lái)提交更改和批準(zhǔn)PR。此外它還可以在命名空間之間實(shí)現(xiàn)一定程度的隔離,為集群中不同的Flux實(shí)例使用的每個(gè)服務(wù)賬戶提供更具體的RBAC設(shè)置。


1.5 多集群

基于多租戶的使用方案,F(xiàn)lux同樣可以用于多集群場(chǎng)景:不同的集群會(huì)有不同的Flux實(shí)例來(lái)監(jiān)視Git倉(cāng)庫(kù)中的變化。


可以在倉(cāng)庫(kù)中指定一個(gè)要監(jiān)視的目錄,團(tuán)隊(duì)可以靈活的選擇多集群情況下的最佳Git目錄結(jié)構(gòu)。一個(gè)單一的版本庫(kù)可以由兩個(gè)或多個(gè)來(lái)自不同集群的Flux實(shí)例來(lái)監(jiān)視,每一個(gè)Flux實(shí)例監(jiān)視一個(gè)特定的目錄;也可以使用單獨(dú)的版本庫(kù)來(lái)實(shí)現(xiàn)相應(yīng)的功能。


1.6 附加功能


1.6.1 自動(dòng)部署新版本容器鏡像


當(dāng)新版本的容器鏡像可用時(shí),F(xiàn)lux可以選擇更新集群中的工作負(fù)載。如果需要啟用該功能,需要運(yùn)行fluxctl automate或者在工作負(fù)載的部署文件中添加注釋,它會(huì)輪詢鏡像倉(cāng)庫(kù)中的鏡像元數(shù)據(jù),如果指定鏡像有新版本可用,它可以使用新的鏡像來(lái)更新部署。


當(dāng)自動(dòng)部署新版本鏡像時(shí),F(xiàn)lux會(huì)寫一個(gè)提交回原始Git倉(cāng)庫(kù),以更新yaml文件中使用的鏡像版本,因此Git仍然會(huì)與集群中運(yùn)行的實(shí)例保持一致。


1.6.2 重新應(yīng)用偏移的資源


不管Git倉(cāng)庫(kù)有什么新的變化,F(xiàn)lux都會(huì)在一段時(shí)間內(nèi)同步工作負(fù)載的狀態(tài),并重新應(yīng)用其清單。當(dāng)應(yīng)用程序和配置的狀態(tài)在GitOps工作流外部更改時(shí),這非常有用。


1.6.3 垃圾回收


當(dāng)資源從環(huán)境倉(cāng)庫(kù)中被刪除時(shí),F(xiàn)lux可以將其從集群中刪除。這種潛在的危險(xiǎn)操作需要跟蹤GitOps工作流程已創(chuàng)建了哪些資源。


當(dāng)啟用此功能后,F(xiàn)lux將根據(jù)源(倉(cāng)庫(kù)URL、分支和安裝過(guò)程中指定的路徑組合),在同步循環(huán)期間給集群中部署的所有資源貼上特定的標(biāo)簽。當(dāng)涉及到垃圾回收循環(huán)時(shí),F(xiàn)lux將查詢APIServer,以檢索所有標(biāo)記為來(lái)自源的對(duì)象,并刪除那些在上一階段沒(méi)有同步的對(duì)象。


1.6.4 局限性


Flux最大的局限,可能是設(shè)計(jì)上的,也是它最大的優(yōu)勢(shì)。它只支持一個(gè)單一的倉(cāng)庫(kù)。這個(gè)特性使它成為一個(gè)相當(dāng)簡(jiǎn)單的工具,易于理解和故障排除??紤]到它運(yùn)行在輕量級(jí)部署上,這個(gè)限制可以通過(guò)集群中的多個(gè)實(shí)例來(lái)克服,正如前面的“多租戶”部分所描述的那樣。


二、ArgoCD


ArgoCD 是一個(gè)用于 Kubernetes的、聲明性的、基于 GitOps 的持續(xù)交付 (CD) 工具。它專注于應(yīng)用程序部署的管理,具有出色的功能集,涵蓋多個(gè)同步選項(xiàng)、用戶訪問(wèn)控制、狀態(tài)檢查等。它自2018年以來(lái)由Intuit開發(fā),并在Apache 2.0許可證下在Github上開源。


部署從 ArgoCD 跟蹤的 Git 存儲(chǔ)庫(kù)中的應(yīng)用程序清單的更改開始,類似于 Flux 的工作方式。但是,使它大放異彩的是能夠通過(guò)精細(xì)控制來(lái)管理多租戶和多群集部署。它可以將不同團(tuán)隊(duì)的多個(gè)應(yīng)用程序同步到一個(gè)或多個(gè) Kubernetes 集群。此外,它還具有一個(gè)很好的現(xiàn)代Web UI,用戶可以在其中查看其應(yīng)用程序部署的狀態(tài),管理員可以管理項(xiàng)目和用戶訪問(wèn)權(quán)限。


Kubernetes DevOps CD工具對(duì)比選型


2.1 安裝與管理


ArgoCD完全以Kubernetes原生方式安裝和管理。它在Kubernetes上在自己的命名空間中運(yùn)行,所有的配置都存儲(chǔ)在ConfigMaps、Secrets和Custom Resources中。這使得我們可以使用GitOps工作流程來(lái)管理ArgoCD本身。


2.2 支持的清單格式


ArgoCD在GitOps倉(cāng)庫(kù)中提供了對(duì)不同格式的最廣泛支持。根據(jù)文檔,它可以處理:

  • · Kustomize應(yīng)用程序
  • · 2.Helm Charts
  • · 3.Ksonnet應(yīng)用
  • · 4.YAML/JSON清單目錄,包含Jsonnet
  • · 5.配置管理插件配置的任何自定義配置管理工具


2.3 特性


ArgoCD在多租戶等重要功能方面非常出色,同時(shí)也提供有眾多的自定義選項(xiàng)。


2.3.1 多租戶


一個(gè)ArgoCD實(shí)例可以處理不同團(tuán)隊(duì)的許多應(yīng)用程序。它使用項(xiàng)目的概念進(jìn)行此操作。項(xiàng)目可以容納多個(gè)應(yīng)用程序,并映射到一個(gè)團(tuán)隊(duì)。團(tuán)隊(duì)成員僅能看到分配給他們的項(xiàng)目,并且通過(guò)擴(kuò)展僅能看到那些項(xiàng)目中的應(yīng)用程序。這種模式與Kubernetes中的命名空間中的資源非常相似。


2.3.2 多集群


ArgoCD可以在運(yùn)行它的Kubernetes集群上同步應(yīng)用程序,還可以管理外部集群??梢詫⑵渑渲脼閮H有權(quán)訪問(wèn)一組受限制的命名空間。


其他群集的API服務(wù)器的憑證會(huì)作為秘密存儲(chǔ)在ArgoCD的命名空間中。只要你可以遠(yuǎn)程公開其他集群的API,這對(duì)于從一個(gè)地方管理所有部署都是非常有用的功能。內(nèi)置的RBAC機(jī)制提供了一些選項(xiàng),以控制僅特定用戶對(duì)不同環(huán)境中的部署的訪問(wèn)。


2.3.3 配置偏移檢測(cè)


當(dāng)集群的操作員在沒(méi)有通過(guò) GitOps 工作流(即提交到 Git)的情況下更改資源時(shí),Kubernetes 資源可能會(huì)和存儲(chǔ)在 Git 中的配置不一致。這在GitOps中時(shí)一個(gè)比較棘手和嚴(yán)重的問(wèn)題:因?yàn)楹苋菀走M(jìn)行這些更改并使Git存儲(chǔ)庫(kù)中的狀態(tài)過(guò)時(shí)。與Flux類似,ArgoCD可以檢測(cè)到這些更改并恢復(fù)它們,從而將狀態(tài)恢復(fù)到Git中定義的狀態(tài)。


2.3.4 垃圾回收


刪除資源是GitOps的另一個(gè)問(wèn)題。當(dāng)從Git中刪除諸如部署之類的資源時(shí),kubectl apply將忽略它(除非使用實(shí)驗(yàn)性的--prune標(biāo)志)。這使得開發(fā)人員無(wú)法刪除他們創(chuàng)建的資源,因?yàn)樗鼈兣cKubernetes的接口是Git倉(cāng)庫(kù)。Helm確實(shí)解決了這個(gè)問(wèn)題,但ArgoCD也是如此。它可以在自己的同步過(guò)程中刪除過(guò)時(shí)的資源,所以你不必使用Helm來(lái)實(shí)現(xiàn)這個(gè)功能。


2.4 局限性


ArgoCD感覺就像Flux的老大哥。它是一個(gè)功能豐富的工具,與Kubernetes完美集成。它的范圍也非常明確:它將清單從Git存儲(chǔ)庫(kù)同步到集群。


基本上團(tuán)隊(duì)所屬項(xiàng)目的整個(gè)配置都保存在存儲(chǔ)ArgoCD配置的Git倉(cāng)庫(kù)中的文件中。這意味著,每次創(chuàng)建或修改新團(tuán)隊(duì)時(shí),都必須更新此文件。在大公司里,開發(fā)團(tuán)隊(duì)的組建和解散都是在不斷地進(jìn)行,這種管理方式可能會(huì)變得很繁瑣,也限制了ArgoCD提供的多租戶設(shè)置。


三、Jenkins X


Jenkins X是一個(gè)圍繞GitOps構(gòu)建的完整的CI/CD解決方案,其底層使用了Tekton。首先,從名稱來(lái)看,我們希望看到大家都了解到的Jenkins的下一代,包含其任務(wù)和插件功能。實(shí)際上,Jenkins X采取了不同的方向,與經(jīng)典的Jenkins幾乎沒(méi)有共同點(diǎn)。


它拋開了Jenkins的master-worker節(jié)點(diǎn)架構(gòu),并以成為Kubernetes原生CI/CD引擎打造。它在GitHub上以Apache 2.0許可下開源,由Cloudbees開發(fā),該公司還提供了商業(yè)發(fā)行版。


值得注意的是,除了基于GitOps的部署功能外,Jenkins X還涵蓋了更廣泛的開發(fā)周期,包括來(lái)自典型CI流水線的構(gòu)建和測(cè)試階段,以及容器鏡像的構(gòu)建和存儲(chǔ)。為此,它將一組令人印象深刻的云原生項(xiàng)目捆綁并配置在一起,從而實(shí)現(xiàn)了現(xiàn)代化的開發(fā)工作流程。


Jenkins X將設(shè)置Skaffold和Kaniko來(lái)構(gòu)建容器圖像,并使用Helm圖表來(lái)打包Kubernetes清單。在內(nèi)部,它使用Tekton運(yùn)行流水線,并使用Lighthouse與你選擇的Git提供程序集成(例如GitHub),并在PR線程中啟用豐富的交互。



4.1 安裝


安裝必須使用jx boot命令完成,并且它假定用戶具有對(duì)Kubernetes群集的廣泛權(quán)限,足以創(chuàng)建名稱空間,CRD,設(shè)置sa以及創(chuàng)建GCP資源(如Cloud Storage buckets)。


在這個(gè)過(guò)程的開始,將克隆啟動(dòng)配置庫(kù),并提示用戶接受或更改一些默認(rèn)選項(xiàng),并提供 GitHub 用戶的憑據(jù),這些憑據(jù)將在PR線程中用作機(jī)器人的GitHub用戶的憑據(jù)。


默認(rèn)情況下,在GitHub中提供了三個(gè)Git倉(cāng)庫(kù),以保持集群中環(huán)境的狀態(tài):dev、staging和production。dev環(huán)境(從引導(dǎo)配置倉(cāng)庫(kù)中克隆出來(lái)的)是工具運(yùn)行的地方。staging環(huán)境和production環(huán)境是用戶應(yīng)用程序部署時(shí)運(yùn)行的環(huán)境。每個(gè)環(huán)境在集群中都有自己的命名空間和Git倉(cāng)庫(kù)。


4.2 GitOps部署


如果應(yīng)用倉(cāng)庫(kù)中合并到master后成功構(gòu)建了應(yīng)用程序,則會(huì)創(chuàng)建應(yīng)用程序Helm chart的新發(fā)布版本。要在其中一個(gè)環(huán)境中部署此新版本,需要更新相應(yīng)的GitOps存儲(chǔ)庫(kù)。例如,要部署到生產(chǎn)環(huán)境中,需要更新代表生產(chǎn)環(huán)境的Git倉(cāng)庫(kù)。


遵循GitOps原則,環(huán)境倉(cāng)庫(kù)中的這種變化會(huì)觸發(fā)Tekton的部署流水線,使用Tekton將倉(cāng)庫(kù)中描述的內(nèi)容與集群中正在運(yùn)行的內(nèi)容同步。部署過(guò)程也可以通過(guò)jx promote命令啟動(dòng),該命令將更新環(huán)境倉(cāng)庫(kù),從而觸發(fā)同步。


4.4 管理


安裝完成后,可以通過(guò)更新dev環(huán)境倉(cāng)庫(kù)中的配置文件來(lái)調(diào)整某些內(nèi)部配置。當(dāng)更改提交并推送后,會(huì)觸發(fā)一個(gè)流水線,Jenkins X會(huì)在其中讀取配置并自行更新。此外,Jenkins X本身就是由GitOps工作流來(lái)管理的。


4.5 多租戶


考慮到Jenkins X集群中來(lái)自不同團(tuán)隊(duì)的應(yīng)用程序之間沒(méi)有特別的隔離,因此不支持多租戶。用戶和應(yīng)用程序都將共享相同的內(nèi)部資源和組件,以及同一套環(huán)境。盡管存在團(tuán)隊(duì)的概念,并由jx team子命令支持,但這是一個(gè)半生不熟的解決方案,基本上是復(fù)制粘貼整個(gè)Jenkins X的部署。


4.6 多集群

應(yīng)用程序環(huán)境(例如staging和production)可以在其他集群中運(yùn)行。這是Jenkins X中的一個(gè)新功能,被忽視了太久了。這種忽視的后果是,現(xiàn)在有不同的解決方案,有不同的弊端,看來(lái)我們還得再等一段時(shí)間才能找到最終的解決方案。


4.6.1 功能特性Features


Jenkins X自帶了大量獨(dú)特的功能,使得開發(fā)者的體驗(yàn)比其他兩個(gè)工具更加流暢和完善。


4.6.2 快速入門新項(xiàng)目


對(duì)于新項(xiàng)目,jx quickstart命令可以幫助創(chuàng)建一個(gè)新的Git倉(cāng)庫(kù),其中包含帶有Helm chart的應(yīng)用程序框架,以及使用Skaffold構(gòu)建Docker鏡像的預(yù)定義構(gòu)建流水線。它還在GitHub中配置了Git倉(cāng)庫(kù),在分支中的新提交和PR之后設(shè)置了一個(gè)Webhook來(lái)觸發(fā)構(gòu)建和其他操作。可以使用jx import命令配置現(xiàn)有項(xiàng)目,這將有助于創(chuàng)建Dockerfile和Helm chart(如果不存在),并設(shè)置適當(dāng)?shù)膚ebhooks。


4.6.3 配置Git倉(cāng)庫(kù)


使用提供的GitHub用戶憑據(jù),在安裝過(guò)程中,將在選定組織的GitHub中創(chuàng)建環(huán)境倉(cāng)庫(kù)(dev,staging和production),或作為用戶倉(cāng)庫(kù)創(chuàng)建。同樣,對(duì)于上面提到的新的快速入門項(xiàng)目,也會(huì)提供一個(gè)Git倉(cāng)庫(kù)與應(yīng)用框架。


4.6.4 構(gòu)建流水線


Jenkins X支持在應(yīng)用程序倉(cāng)庫(kù)中發(fā)生事件后觸發(fā)任務(wù)流水線。例如,為新的分支或拉取請(qǐng)求,構(gòu)建應(yīng)用程序并運(yùn)行測(cè)試。在所謂的構(gòu)建包(buildpacks)中有針對(duì)不同編程語(yǔ)言和框架的默認(rèn)構(gòu)建流水線。應(yīng)用程序需有一個(gè)指向其父構(gòu)建包的jenkins-x.yaml文件,并且可以自定義流水線。


4.6.5 ChatOps


ChatOps是用于在聊天線程中管理開發(fā)和操作活動(dòng)的術(shù)語(yǔ),通常在機(jī)器人用戶的支持下執(zhí)行一些自動(dòng)或請(qǐng)求的操作。在Jenkins X中,在應(yīng)用程序或環(huán)境倉(cāng)庫(kù)中創(chuàng)建的新PR將觸發(fā)運(yùn)行流水線。流水線步驟的結(jié)果由bot(安裝過(guò)程中配置的GitHub用戶)發(fā)布到PR線程中。用戶可以與機(jī)器人進(jìn)行交互,以請(qǐng)求其他任務(wù),例如重新運(yùn)行測(cè)試,或批準(zhǔn)并合并PR。


為了集成Webhook,觸發(fā)器和事件,Jenkins X在內(nèi)部使用Prow,該工具最初是為GitHub中的Kubernetes項(xiàng)目運(yùn)行構(gòu)建的。另外,Jenkins X團(tuán)隊(duì)正在開發(fā)Lighthouse,以提供類似的功能,擴(kuò)展對(duì)不同的Git發(fā)行版(如BitBucket和GitLab)的支持。


4.6.6 預(yù)覽環(huán)境


成功構(gòu)建后,例如在Jenkins X配置的應(yīng)用程序倉(cāng)庫(kù)中新創(chuàng)建的PR中,將為當(dāng)前構(gòu)建創(chuàng)建臨時(shí)預(yù)覽部署。通過(guò)此預(yù)覽,可以手動(dòng)檢查作為 PR 提交的當(dāng)前更改(例如,在瀏覽器中打開 Web API 應(yīng)用程序),然后再將其合并到 master。


4.7 局限性


雖然其他兩個(gè)工具的范圍比Jenkins X要小得多,但它們能完美地實(shí)現(xiàn)它們所說(shuō)的功能。另一方面,Jenkins X是一個(gè)復(fù)雜的全方位解決方案,這就給人們?cè)O(shè)定了不同的期望。最顯著的缺失的功能是多租戶功能。當(dāng)Jenkins X被安裝到一個(gè)集群上時(shí),我們會(huì)期望它能夠服務(wù)于所有團(tuán)隊(duì)。遺憾的是,Jenkins X的多租戶模式可以與Flux的多租戶模式進(jìn)行比較,雖然后者是一個(gè)簡(jiǎn)單的工具,但Jenkins X安裝了大量的組件,管理員應(yīng)該不想為每個(gè)團(tuán)隊(duì)重復(fù)安裝這些組件。


六、方案比較




Flux是一個(gè)小型、輕量級(jí)的組件,可以實(shí)現(xiàn)基于GitOps的部署,可能會(huì)對(duì)你當(dāng)前的設(shè)置進(jìn)行互補(bǔ)。它只需要訪問(wèn)一個(gè)(也只有一個(gè))Git倉(cāng)庫(kù),并且可以在有限的RBAC權(quán)限下運(yùn)行。


ArgoCD可以管理不同集群中多個(gè)應(yīng)用程序的部署。它在集群內(nèi)運(yùn)行,但也可以管理團(tuán)隊(duì)和項(xiàng)目的訪問(wèn)權(quán)限和權(quán)限。它有一個(gè)流暢的Web界面來(lái)管理應(yīng)用程序和項(xiàng)目,并提供了一套不錯(cuò)的功能來(lái)管理部署。


Jenkins X捆綁了一些有爭(zhēng)議的工具,來(lái)構(gòu)建一個(gè)圍繞GitHub倉(cāng)庫(kù)的開發(fā)工作流(很快就會(huì)支持其他供應(yīng)商)。它運(yùn)行CI流水線來(lái)構(gòu)建和運(yùn)行應(yīng)用程序的測(cè)試,在PR中提供豐富的交互,并根據(jù)Git倉(cāng)庫(kù)中的變化管理部署。

技術(shù)交流
我們建立了多個(gè)云原生技術(shù)交流群,其中有來(lái)自O(shè)racle、Citrix、華為、騰訊等國(guó)內(nèi)外云計(jì)算專家,立即掃碼,拉你進(jìn)群。目前已有2000+開發(fā)者加入我們......
云原生廠商 云原生技術(shù)服務(wù)商
在云原生時(shí)代,kaiyun開云創(chuàng)新致力于通過(guò)賦能開發(fā)者,實(shí)現(xiàn)企業(yè)快速迭代與交付,大幅提升創(chuàng)新效率。
產(chǎn)品下載