開發(fā)成功GitOps模型的三個(gè)步驟
在這篇文章中,我們將探索 GitOps 如何為基于容器化和微服務(wù)開發(fā)云原生解決方案的組織提供最佳服務(wù)。
什么是 GitOps,為什么它對(duì)組織很重要?
GitOps 是一種自動(dòng)化和管理基礎(chǔ)設(shè)施和應(yīng)用程序的模型,它通過許多團(tuán)隊(duì)已經(jīng)使用過的相同 DevOps 最佳實(shí)踐來完成,例如版本控制、代碼審查和 CI/CD 管道等等。在實(shí)施 DevOps 過程中,我們雖然在軟件開發(fā)生命周期找到了自動(dòng)化的方法,但在基礎(chǔ)設(shè)施安裝和部署方面,仍然需要手工處理。使用 GitOps,團(tuán)隊(duì)可以自動(dòng)化基礎(chǔ)設(shè)施配置過程。這得益于我們能夠?qū)⒒A(chǔ)架構(gòu)作為代碼 (IaC)編寫、在 Git 倉庫中對(duì)代碼進(jìn)行版本控制以及基于云交付進(jìn)行持續(xù)部署。
因?yàn)樗哂刑岣呱a(chǎn)力和軟件質(zhì)量的巨大潛力,很多公司一直在采用 GitOps,而它也最適合開發(fā)基于容器化和微服務(wù)的云原生解決方案的組織。
GitOps 如何改善開發(fā)人員和運(yùn)維人員的日常工作?
GitOps 帶來的基礎(chǔ)設(shè)施自動(dòng)化的增長(zhǎng)創(chuàng)造了為應(yīng)用程序開發(fā)人員開發(fā)更具有“自助服務(wù)”方法的機(jī)會(huì)。熟練的開發(fā)人員可以使用基礎(chǔ)設(shè)施即代碼來聲明他們的云資源需求,而不是協(xié)商云資源。這成為對(duì)基礎(chǔ)設(shè)施的期望狀態(tài),集中存儲(chǔ)起來并可以用作代碼中聲明的需求與運(yùn)行環(huán)境的實(shí)際狀態(tài)之間的不可變參考點(diǎn)。
自助服務(wù)方法解放了開發(fā)人員。它讓開發(fā)人員更有效率,使他們能夠?qū)W⒂趧?chuàng)新,并讓他們的應(yīng)用程序更快地推向市場(chǎng)。此外,它避免了開發(fā)人員和運(yùn)營(yíng)人員需要協(xié)商資源時(shí)可能引入的泥潭。
另一方面,經(jīng)常存在一種誤解,即運(yùn)營(yíng)自動(dòng)化程度的提高意味著運(yùn)營(yíng)團(tuán)隊(duì)需要更少的人員,并且運(yùn)營(yíng)在管道中的角色正被邊緣化。我們的觀點(diǎn)恰恰相反;我們認(rèn)為 GitOps 和內(nèi)部開發(fā)平臺(tái)等現(xiàn)代方法為 Ops(平臺(tái)團(tuán)隊(duì))提供了振奮人心的機(jī)會(huì),以提高他們的技能并為組織創(chuàng)造更多價(jià)值。在一個(gè)采用 GitOps 的高水平的云原生軟件開發(fā)組織中,您可能會(huì)發(fā)現(xiàn)正是因?yàn)榇嬖谝粋€(gè)不斷壯大的平臺(tái)團(tuán)隊(duì)才讓一切工作正常。
平臺(tái)團(tuán)隊(duì)使用的實(shí)際技術(shù)可能會(huì)有所不同。在某些情況下,這可能只是一個(gè)封閉的 PaaS 解決方案。在其他情況下,它可以是創(chuàng)建適合組織需求的定制平臺(tái)各種工具的組合。這使他們能夠?qū)A(chǔ)設(shè)施資源和架構(gòu)施加更大的影響和控制,并創(chuàng)建“護(hù)欄”,以執(zhí)行簡(jiǎn)單、高效和標(biāo)準(zhǔn)化的云原生應(yīng)用程序部署方法。
GitOps 有助于改善開發(fā)人員和運(yùn)營(yíng)團(tuán)隊(duì)之間的協(xié)作,提高他們的生產(chǎn)力,并增加部署頻率。它使開發(fā)人員無需了解底層基礎(chǔ)架構(gòu)即可貢獻(xiàn)功能,從而增強(qiáng)了開發(fā)人員的體驗(yàn)。同時(shí),它通過代碼審查和批準(zhǔn)來控制操作。通過這些改進(jìn),團(tuán)隊(duì)可以更快、更安全地發(fā)布,以保持其在市場(chǎng)中的地位。
實(shí)施 GitOps 的三個(gè)必做步驟是什么?
如果想讓公司實(shí)施的 GitOps 模型發(fā)揮最大優(yōu)勢(shì),例如整體工作流程的標(biāo)準(zhǔn)化和一致性,您需要考慮以下幾點(diǎn)。
一切皆為代碼
-
聲明你的 IaC。
-
使用 Git 倉庫進(jìn)行 IaC 開發(fā)。
-
將屬于應(yīng)用程序代碼生命周期一部分的實(shí)踐也復(fù)制到基礎(chǔ)架構(gòu)代碼中。
-
使用 Docker 和 Kubernetes 等技術(shù),將您的環(huán)境、版本、配置和依賴項(xiàng)定義為代碼,并確保它們?cè)谶\(yùn)行時(shí)得到強(qiáng)制執(zhí)行。
-
逐漸將 GitOps 模型擴(kuò)展到可以定義為代碼的任何事物,例如安全性、策略、合規(guī)性以及基礎(chǔ)架構(gòu)之外的所有操作。
編輯搜圖
圖1: 一切皆為代碼
聲明式代碼提高了可讀性和可維護(hù)性。CloudFormation、Terraform、Pulumi 和 Crossplane 是一些可能的聲明性語言,您可以使用這些語言來定義您的基礎(chǔ)架構(gòu)配置。
當(dāng)一切都定義為代碼時(shí),您可以使用 Git 倉庫進(jìn)行開發(fā)并探索諸如版本控制、協(xié)作和審計(jì)等內(nèi)容。
審核流程
一個(gè)正確的 Git 流程包括:
-
主分支,通常代表一個(gè)環(huán)境,如 dev、test、stage、prod 和在該環(huán)境上運(yùn)行的狀態(tài)。
-
當(dāng)開發(fā)人員需要對(duì)代碼進(jìn)行更改時(shí),他們會(huì)從主分支創(chuàng)建一個(gè)新分支。
-
當(dāng)更改準(zhǔn)備就緒時(shí),開發(fā)人員會(huì)創(chuàng)建一個(gè)拉取請(qǐng)求,該請(qǐng)求應(yīng)該由運(yùn)營(yíng)團(tuán)隊(duì)審核以驗(yàn)證和批準(zhǔn)。安全和合規(guī)專家也可以參與此階段,正確地驗(yàn)證環(huán)境的狀態(tài)。
-
一旦獲得批準(zhǔn),代碼就可以合并到主分支并交付到測(cè)試或生產(chǎn)環(huán)境。
使用此工作流程,您可以跟蹤誰進(jìn)行了哪些更改并確保環(huán)境具有正確的代碼版本。
編輯搜圖
圖 2:GitOps 工作流程
如果您已經(jīng)通過功能分支使用了Git 流程系統(tǒng)的拉取請(qǐng)求特性,那么您無需在 GitOps 的新流程上投入太多。此外,由于您的基礎(chǔ)設(shè)施(和其他操作)也被定義為代碼,您將能夠?qū)嵤┫嗤拇a審查實(shí)踐。
獨(dú)立的構(gòu)建和部署流程(CI 和 CD)
-
CI 流程負(fù)責(zé)構(gòu)建應(yīng)用程序代碼并將其打包到容器鏡像中。
-
CD 流程執(zhí)行使最終狀態(tài)與倉庫代碼中描述的系統(tǒng)所需狀態(tài)保持一致的自動(dòng)化操作。
最終,GitOps 將 CI 和 CD 視為兩個(gè)獨(dú)立的過程——CI 是一個(gè)開發(fā)過程,而 CD 是一個(gè)操作過程。
通常用于分離這些進(jìn)程的 GitOps 方法是引入另一個(gè) Git 倉庫作為中介者。此倉庫包含有關(guān)環(huán)境的信息,并且每次提交都會(huì)觸發(fā)部署過程。另外會(huì)有一個(gè)組件,稱為操作器,位于管道和編排工具之間。該操作器會(huì)不斷將環(huán)境倉庫中的目標(biāo)狀態(tài)與部署的基礎(chǔ)設(shè)施中的實(shí)際狀態(tài)進(jìn)行比較,如果操作器檢測(cè)到任何更改,它就會(huì)更改基礎(chǔ)設(shè)施以匹配環(huán)境倉庫。此外,它還監(jiān)控鏡像倉庫以識(shí)別要部署的鏡像的新版本。這樣,CI 過程永遠(yuǎn)不會(huì)觸及底層基礎(chǔ)設(shè)施(例如,Kubernetes 集群)。
編輯搜圖
圖 3:基于拉取的 GitOps 部署
將構(gòu)建管道與部署管道解耦是針對(duì)錯(cuò)誤配置的強(qiáng)大保護(hù),這樣做有助于實(shí)現(xiàn)更高的安全性和合規(guī)性。
結(jié)論
GitOps 作為一種運(yùn)營(yíng)模型,使用了許多團(tuán)隊(duì)都知道的 DevOps 實(shí)踐。使用 GitOps,您可以自動(dòng)化基礎(chǔ)設(shè)施配置過程,并將 Git 用作基礎(chǔ)設(shè)施配置變更的單一事實(shí)來源。因此,要?jiǎng)?chuàng)建成功的 GitOps 模型,您需要對(duì)環(huán)境進(jìn)行聲明性定義。
如果您的團(tuán)隊(duì)中也有拉取請(qǐng)求工作流程,那就最好不過了。為了能夠在基礎(chǔ)架構(gòu)代碼上進(jìn)行協(xié)作并創(chuàng)建操作更改,您應(yīng)該提交一個(gè)拉取請(qǐng)求。隨后,高級(jí) DevOps 工程師和安全專家會(huì)審查該拉取請(qǐng)求以驗(yàn)證更改并在一切正常的情況下將它們合并到主分支中。
對(duì)于完整的 GitOps 實(shí)施,您需要 CI/CD 自動(dòng)化設(shè)置參數(shù)并配置底層環(huán)境以及部署定義的代碼。
最后,公司內(nèi)部應(yīng)該有一種支持性的組織文化。根據(jù)我們的經(jīng)驗(yàn),GitOps 方法很自然地形成了一種結(jié)構(gòu),在這種結(jié)構(gòu)中,開發(fā)人員將會(huì)受益于自助服務(wù)基礎(chǔ)設(shè)施資源自動(dòng)化的增長(zhǎng),而平臺(tái)工程師則可以在組織中扮演更有影響力的角色。這將是一種雙贏的方法,使團(tuán)隊(duì)中的每個(gè)人都更團(tuán)結(jié)一致,感到充實(shí)。