GitOps 和 DevOps 有一些相同的原則和目標(biāo)。DevOps 是關(guān)于文化變革的,并為開發(fā)團隊和運維團隊提供了一種協(xié)同工作的方式。GitOps 提供了采用 DevOps 實踐(如協(xié)作、CI/CD 和版本控制)的工具和框架,并將其應(yīng)用于基礎(chǔ)設(shè)施自動化和應(yīng)用程序部署。
(資料圖)
現(xiàn)代信息社會,快速穩(wěn)定的交付客戶所需的應(yīng)用是企業(yè)成功的關(guān)鍵,隨著時代發(fā)展,開發(fā)現(xiàn)代應(yīng)用程序與過去的方法不同,許多團隊開始探索使用DevOps來加速實現(xiàn)自己的業(yè)務(wù)價值。
DevOps:加速價值交付
DevOps 描述了加快流程的方法,通過這些流程,可以快速將一個想法(如新的軟件功能、增強請求或錯誤修復(fù))實現(xiàn)從開發(fā)到部署,并最終為用戶提供價值。這些方法要求開發(fā)團隊和運維團隊保持持續(xù)溝通,并用同理心來處理他們的工作。雙方一起密切合作,在不犧牲可靠性的情況下加快軟件構(gòu)建、測試和發(fā)布。
DevOps是“development”和“operations”的混搭,但它不僅代表了開發(fā)和運維,更代表了一組想法和實踐,包括安全性、協(xié)作工作方式、數(shù)據(jù)分析和許多其他內(nèi)容。同時DevOps 也依賴于開源原則和透明、敏捷的工作方式相一致的協(xié)作文化。
DevOps 加快了創(chuàng)意從開發(fā)到部署的過程。DevOps 的核心依賴于在應(yīng)用的整個生命周期中自動執(zhí)行日常操作任務(wù)和標(biāo)準(zhǔn)化環(huán)境。容器可以提供標(biāo)準(zhǔn)化的環(huán)境,大規(guī)模容器需要一個平臺來管理它們,并結(jié)合自動化能力支持。
引入DevOps改變的不僅僅是工作方式,所做的工作也不可避免地會改變。DevOps 不僅僅是加快創(chuàng)建單體軟件,而是創(chuàng)建更適合這種持續(xù)交付節(jié)奏的新型軟件。這就是為什么 DevOps 團隊通常會使用微服務(wù)架構(gòu)構(gòu)建軟件并將這些服務(wù)與 API 連接在一起的原因。團隊通過專注于創(chuàng)建較小的功能來更快地交付。
CI/CD:通過自動化加速交付
CI/CD(Continuous integration/continuous deployment)是一種通過將自動化引入應(yīng)用開發(fā)階段來頻繁向客戶交付應(yīng)用的方法。CI/CD 的主要概念是持續(xù)集成、持續(xù)交付和持續(xù)部署。
CI/CD 是 DevOps 方法的支柱,它將開發(fā)人員和運維團隊聚集在一起部署軟件,讓代碼發(fā)布的速度成為競爭優(yōu)勢。
CI/CD 在整個應(yīng)用程序生命周期(從集成和測試階段到交付和部署)中應(yīng)用自動化,以快速生成經(jīng)過測試和驗證的應(yīng)用程序。它包含兩個不同但相關(guān)的功能:
持續(xù)集成 (CI)幫助開發(fā)人員快速驗證功能,并更頻繁地將其代碼更改合并回共享分支。通過自動構(gòu)建應(yīng)用程序并運行不同級別的自動化測試(通常是單元測試和集成測試)來驗證合并的代碼更改,以確保更改正常工作。如果測試發(fā)現(xiàn)新代碼和現(xiàn)有代碼之間存在沖突,CI 可以更輕松、更快速地修復(fù)這些錯誤。持續(xù)部署 (CD)自動執(zhí)行將應(yīng)用程序發(fā)布到生產(chǎn)環(huán)境的過程。在生產(chǎn)前的開發(fā)管道階段,很少有手動干預(yù),因此CD嚴(yán)重依賴精心設(shè)計的測試自動化。因此,如果開發(fā)人員對云應(yīng)用程序的更改通過所有自動化測試,則它可以在編寫云應(yīng)用程序后的幾分鐘內(nèi)上線。CD 使持續(xù)接收和合并用戶反饋變得更加容易。CI/CD 允許以較小的部分發(fā)布對應(yīng)用程序的更改,從而使應(yīng)用程序部署更加可靠。同時也可以將 CI/CD 應(yīng)用于組織內(nèi)的許多組件和資產(chǎn),包括應(yīng)用程序、平臺、基礎(chǔ)結(jié)構(gòu)、網(wǎng)絡(luò)和自動化代碼。
基礎(chǔ)設(shè)施即代碼IaC
基礎(chǔ)設(shè)施即代碼(Infrastructure as Code, IaC)是實施 DevOps 實踐和持續(xù)集成/持續(xù)交付 (CI/CD) 的重要組成部分。IaC 可以標(biāo)準(zhǔn)化開發(fā)與運維團隊的交互方式,并確?;A(chǔ)設(shè)施的一致性,釋放開發(fā)與運維的大部分準(zhǔn)備和協(xié)調(diào)工作。
配置基礎(chǔ)設(shè)施歷來是一個耗時且成本高昂的手動過程。現(xiàn)在,基礎(chǔ)設(shè)施的管理已經(jīng)從數(shù)據(jù)中心的物理硬件(盡管這仍然是您組織的組件)轉(zhuǎn)向虛擬化、容器和云計算。借助云計算,基礎(chǔ)設(shè)施組件的數(shù)量不斷增長,每天都有更多的應(yīng)用程序發(fā)布到生產(chǎn)環(huán)境,并且基礎(chǔ)設(shè)施需要能夠頻繁地啟動、擴展和關(guān)閉。如果沒有 IaC ,管理當(dāng)今基礎(chǔ)設(shè)施的規(guī)模變得越來越困難。
與此同時,CI/CD 依賴于從集成和測試到交付和部署的整個應(yīng)用程序生命周期的持續(xù)自動化和持續(xù)監(jiān)視。為了使環(huán)境自動化,需要保持一致。當(dāng)開發(fā)團隊以一種方式部署應(yīng)用程序或配置環(huán)境,而運維團隊以另一種方式部署和配置環(huán)境時,自動化應(yīng)用程序部署不起作用。通過 DevOps 方法協(xié)調(diào)開發(fā)和運營團隊可以減少錯誤、手動部署和不一致。IaC 可幫助協(xié)調(diào)開發(fā)和運維,兩個團隊可以使用相同的應(yīng)用程序部署描述,從而支持 DevOps 實踐。
DevOps 最佳實踐也適用于 IaC 中的基礎(chǔ)設(shè)施?;贗aC,基礎(chǔ)設(shè)施可以實現(xiàn)與應(yīng)用程序在軟件開發(fā)期間相同的 CI/CD 管道,對基礎(chǔ)設(shè)施代碼應(yīng)用相同的測試和版本控制。這引出了GitOps。
GitOps
GitOps 可以被視為基礎(chǔ)設(shè)施即代碼 (IaC) 的演變,并使用 Git 作為基礎(chǔ)設(shè)施配置的版本控制系統(tǒng)。IaC 通常通過定義系統(tǒng)的所需狀態(tài)并跟蹤系統(tǒng)的實際狀態(tài)來遵循聲明性基礎(chǔ)設(shè)施的管理方法。與 IaC 一樣,GitOps 要求以聲明方式描述系統(tǒng)的所需狀態(tài)。通過使用聲明性工具,可以在 Git 中對所有配置文件和源代碼進行版本控制。
GitOps 提供:
應(yīng)用程序開發(fā)的標(biāo)準(zhǔn)工作流程提高了預(yù)先設(shè)置應(yīng)用程序要求的安全性通過 Git 提高可見性和版本控制的可靠性跨任何集群、任何云和任何本地環(huán)境的一致性通過使用開發(fā)人員熟悉的基于 Git 的相同工作流,GitOps 擴展了從應(yīng)用程序開發(fā)到部署、應(yīng)用程序生命周期管理和基礎(chǔ)設(shè)施配置的現(xiàn)有流程。整個應(yīng)用程序生命周期中的每個更改都會在 Git 存儲庫中進行跟蹤,并且是可審核的。通過 Git 進行更改意味著開發(fā)人員最終可以做他們想做的事:按照自己的節(jié)奏編寫代碼,而無需等待運維團隊分配或批準(zhǔn)資源。
對于運維團隊而言,變更可見性意味著能夠快速跟蹤和重現(xiàn)問題,從而提高整體安全性。借助最新的審計跟蹤,組織可以降低不必要的更改的風(fēng)險,并在投入生產(chǎn)之前對其進行更正。
GitOps 方法的目標(biāo)和優(yōu)勢顯而易見。通過將所需基礎(chǔ)設(shè)施和應(yīng)用程序配置的定義存儲在 Git 存儲庫中,團隊將擁有在結(jié)構(gòu)化且安全的存儲部署應(yīng)用程序所需的一切。如果出于災(zāi)難恢復(fù)或復(fù)原能力的原因需要將應(yīng)用程序重新部署到新位置,則可以輕松自信地執(zhí)行此操作。此外,GitOps 模型將幫助組織在生產(chǎn)過程中通過各個測試階段推進應(yīng)用程序。此過程需要將應(yīng)用程序部署到不同的群集或群集中的不同命名空間,而 GitOps 模型確??梢酝耆⒖煽壳易孕诺赝瓿纱瞬僮?。
基礎(chǔ)設(shè)施和應(yīng)用程序這兩個域之間有明顯的區(qū)別,組織的不同團隊負責(zé)每個領(lǐng)域?;A(chǔ)設(shè)施配置負責(zé) Kubernetes 平臺的定義和交付,包括計算節(jié)點、基于角色的訪問控制、治理策略以及創(chuàng)建應(yīng)用程序可以運行的平臺的許多其他屬性。應(yīng)用程序可以分段為編譯為容器映像中的可執(zhí)行文件的源代碼組件,以及在特定環(huán)境中配置容器映像的 Kubernetes 資源。
GitOps 工作流
若要開始使用 GitOps,需要能夠以聲明方式管理的基礎(chǔ)設(shè)施。正因為如此,GitOps 通常被用作 Kubernetes 和云原生應(yīng)用程序開發(fā)的模型,并且與Kubernetes實現(xiàn)持續(xù)部署。
CI/CD 管道通常由外部事件觸發(fā),例如將代碼推送到存儲庫。在 GitOps 工作流中,使用拉取請求(pull request)進行更改,這些請求修改 Git 存儲庫中的狀態(tài)。批準(zhǔn)并合并更改后,它們將自動應(yīng)用于實時基礎(chǔ)設(shè)施。開發(fā)人員可以繼續(xù)使用其標(biāo)準(zhǔn)工作流和 CI/CD。
當(dāng)將 GitOps 與 Kubernetes 一起使用時,自動化同步的實現(xiàn)通常是 Kubernetes Operator。Operator 將存儲庫中的所需狀態(tài)與已部署基礎(chǔ)設(shè)施的實際狀態(tài)進行比較。每當(dāng)發(fā)現(xiàn)實際狀態(tài)與存儲庫中存在的狀態(tài)之間存在差異時,將更新基礎(chǔ)設(shè)施。還可以監(jiān)視容器映像存儲庫,并以相同的方式進行更新以部署新映像。
GitOps 工作流可以提高生產(chǎn)力以及開發(fā)和部署的速度,同時提高系統(tǒng)的穩(wěn)定性和可靠性。
總結(jié)
GitOps 和 DevOps 有一些相同的原則和目標(biāo)。DevOps 是關(guān)于文化變革的,并為開發(fā)團隊和運維團隊提供了一種協(xié)同工作的方式。GitOps 提供了采用 DevOps 實踐(如協(xié)作、CI/CD 和版本控制)的工具和框架,并將其應(yīng)用于基礎(chǔ)設(shè)施自動化和應(yīng)用程序部署。開發(fā)人員可以在他們的代碼庫中工作,而 Operator 可以將其他必要的部分放置到位。在實踐中,逐漸形成了:
以DevOps理念為指導(dǎo)使用微服務(wù)開發(fā)應(yīng)用基于容器化標(biāo)準(zhǔn)交付基于聲明式的基礎(chǔ)設(shè)施部署用git作為單一事實來源基于自動化的CI/CD最終演變?yōu)榛趃it的全流程CI/CD工作流框架,也即GitOps,實現(xiàn)敏捷價值交付。