為什麼說GitOps是基礎架構即程式碼 (IaC) 和 DevOps 最佳實踐?

danny_2018發表於2022-10-24

什麼是 GitOps?好吧,GitOps 是一個軟體開發框架,它使組織能夠持續交付軟體應用程式,同時使用 Git 作為單一事實來源有效地管理 IT 基礎設施。GitOps 是 DevOps 的一個子集,它結合了基礎架構即程式碼 (IaC) 和 DevOps 最佳實踐,建立了一個操作模型,用於管理架構並根據 Git 儲存庫的狀態即時複製系統的雲基礎架構。

雖然有多種軟體開發工具和解決方案,但基礎設施管理一直是一項複雜的任務。它需要專業知識來構建和維護基礎設施。DevOps徹底改變了軟體開發領域,並透過“基礎架構即程式碼 (IaC)”方法增強了基礎架構管理能力。

雖然 IaC 使開發人員能夠將配置宣告為程式碼並自動化系統基礎架構,但在程式碼、測試、暫存和生產環境之間保持實時同步仍然是一個挑戰。GitOps 擴充套件了 IaC 的功能,允許開發人員在 Git 中宣告每個資源並在整個基礎架構中自動維護所需的狀態。繼續閱讀以瞭解有關 GitOps 的更多資訊!

1. GitOps:它是一種版本控制方法嗎?

版本控制系統在 DevOps 環境中起著至關重要的作用。VCS 是一種軟體工具,使組織能夠跟蹤和管理程式碼更改。它將對程式碼所做的每一次更改都儲存在一個唯一的資料庫中。版本控制系統允許團隊無縫協作進行程式碼開發,從而加快上市時間,同時最大限度地減少中斷。當出現錯誤時,團隊可以快速恢復到早期版本,而不會中斷其他工作。GitOps 利用 Git VCS 來提高 CI/CD 管道的效率。

Git 是開發者圈子中最流行的版本控制系統。由於大多數開發人員都熟悉 Git,因此使用 GitOps 專案變得很容易。在 GitOps 環境中,Git 充當單一事實來源。環境中的每個資源都在 Git 儲存庫中進行了描述性宣告。當發出 Git “拉取請求”並批准更改時,實時基礎架構會自動重新配置,以與 Git 儲存庫中宣告的所需狀態同步。Flux 運算子用於監控 Git 拉取請求並將生產叢集聚合到 Git 儲存庫的所需狀態。

2. GitOps 原理

以下是 GitOps 的四個關鍵原則。

宣告性描述

由於 Git 充當所有 DevOps 操作的單一事實來源,因此整個系統在 Git 中使用 .yaml 檔案進行宣告性描述。對應用程式、基礎架構、部署和環境所做的更改都透過 Git 進行管理。例如,Kubernetes 配置和環境配置可以透過 Helm 透過可重用的圖表進行管理。應用程式程式碼可以在 Dockerfile 中宣告,Terraform 可以宣告基礎設施。不僅可以快速部署容器和回滾,還可以在災難發生時重現整個叢集基礎設施。

版本控制

由於版本控制系統充當宣告和管理基礎架構所需狀態的中央儲存庫,因此您可以試驗新功能並在需要時快速回滾/恢復。提交時,會儲存提交者資訊、提交時間戳和提交 ID 等詳細資訊。因此,您可以完全跟蹤在任何給定時間點對基礎架構狀態所做的所有更改。

檢視整個變更審計跟蹤的能力為組織中的團隊帶來了透明度。當基礎設施和應用程式作為版本化的工件可用時,審計也變得容易。

自動化

宣告式描述的優點是您可以在 Git 程式碼中宣告系統所需的狀態,然後自動化系統以將所有批准的更改應用到系統。透過實施整合到持續部署管道中的反饋控制迴圈,您可以自動化部署。雖然它顯著增加了您每天所做的更改數量,但它也減少了平均部署時間。

保證

當所需狀態與系統的實際狀態不匹配時,軟體代理會立即提醒您配置更改。使用這種自我修復方法,您可以放心獲得高質量的軟體開發環境。

3. GitOps 的需求

創新是技術世界的一個持續過程。雲端計算技術的出現徹底改變了 IT 行業,為軟體開發環境帶來了速度和規模。DevOps 使組織能夠有效地管理這種敏捷性,並使用 CI/CD 管道、版本控制系統、程式碼審查系統和基礎設施管理解決方案更快更好地無縫交付程式碼。然而,自動化更側重於開發人員。

所有DevOps 實踐都促進了開發過程的輕鬆自動化。然而,基礎設施自動化仍然是一個複雜的過程,需要經過認證的專業人員和基礎設施管理方面的專業知識。

現代基礎設施應該足夠靈活和健壯,以擴充套件和管理持續部署。雖然 Puppet、Chef 和 Ansible 等配置管理工具可幫助您將基礎架構保持在所需狀態,但它們不會將應用程式和 IaC 組合成一個有凝聚力的單元。此外,它們的效率不足以管理整個雲堆疊。GitOps 正好適合這個目的。

GitOps 是一個創新的框架,允許開發人員將基礎設施宣告為 Git 儲存庫中的程式碼,並輕鬆集中管理基礎設施自動化。 GitOps 透過將應用程式和基礎設施即程式碼整合為一個有凝聚力的單元來擴充套件IaC 工具的功能,以便開發和運營團隊共享一個 Git 儲存庫程式碼來管理在其上執行的基礎設施和應用程式。

現在您已經瞭解了 GitOps,重要的是要了解它不僅僅是部署自動化和配置管理。它使開發人員能夠輕鬆處理複雜的基礎架構操作並提高生產力。藉助回滾/還原功能和可操作的警報功能,它可以縮短恢復時間和上市時間。使用 GitOps,在雲中管理 CI/CD 操作既簡單又經濟高效。

4. GitOps 是如何工作的?

GitOps 架構使開發人員能夠使用 Git 作為唯一的事實來源來管理基礎設施操作。在典型的 DevOps 開發環境中,CI 元件處於管道的最前沿。CI 元件將 VCS 視為為構建操作提供輸入的服務,將 CD 視為用於部署程式碼的服務。它獲取程式碼,執行自動化測試,並使用 CD 自動化將批准的程式碼推送到生產環境。

這是一個典型的 DevOps CI/CD 管道:

1. 開發者編寫程式碼並提交到版本控制系統。

2. CI 伺服器獲取程式碼並在其上執行自動化測試。

3. 當發現錯誤/錯誤時,傳送程式碼進行更正。

4. 稽核透過的程式碼自動推送到容器映象倉庫。

5. 自動化部署工具將容器推送到生產環境。

6.容器編排工具用於管理容器。

在這裡,CI 元件是 CI/CD 管道的核心。但是,GitOps 將版本控制系統 Git 推到了中心。在這個架構中,Git 無縫地管理部署和操作。由於開發人員最熟悉 Git 和拉取請求,因此使用 GitOps 變得很容易。拉取請求是審查請求,其中將程式碼推送到儲存庫的開發人員請求批准將程式碼與儲存庫合併。

這是 GitOps 環境中的典型工作流程:

1. 開發人員向 Git 儲存庫發出拉取請求。

2. 程式碼由相關人員稽核透過。

3. 然後將程式碼合併到 Git 儲存庫中。

4. 當檢測到更改時,觸發 CI 構建管道。CI 工具會自動執行測試。一旦程式碼透過了所有測試,它就會構建映象並將其推送到映象容器中。

5. 部署 Automator 檢測到映像儲存庫的更改,從登錄檔中拉取它,並更新配置儲存庫 YAML 檔案。

6. 部署同步器檢測叢集中的變化。它從配置儲存庫中提取更改並使用新功能更新過時的叢集。

考慮一個使用Kubernetes叢集和 Flux CD 來管理 Kubernetes 的 GitOps 環境。Kubernetes 叢集的狀態首先在 Git 儲存庫中宣告。沒有事先宣告,沒有工作負載進入 Kubernetes 叢集。宣告工作負載描述並將其推送到 Git 儲存庫。部署的叢集狀態應始終與 Git 中宣告的狀態同步。Flux 作為部署同步器執行。它部署在 Kubernetes 中,並使用控制迴圈來拉取 git 儲存庫並檢查是否推送了任何新提交。當應用新的提交時,它會立即將叢集狀態收斂到新宣告的狀態。

此外,Flux 還會檢查容器映象登錄檔是否有更新。當找到新映象時,Flux 將使用最新的容器映象標籤更新 Git 上的叢集清單檔案,然後將叢集狀態與最新的提交重新同步。這意味著容器例項始終使用最新的容器映像執行。它還確保叢集狀態始終與 Git 儲存庫中的宣告完美同步。如果您需要回滾某個功能,您可以簡單地使用 Git repo 恢復到早期版本,Flux 會自動將叢集狀態同步到該版本。同樣,在災難期間,您可以簡單地重新部署 Git 儲存庫中的最新提交,以恢復上次工作的叢集狀態。

使用 GitOps,您無需向開發人員提供寫入許可權。相反,Flux 將根據 Git 儲存庫宣告更新、刪除或建立叢集內的資源。透過實施基於角色的訪問控制 (RBAC),您可以為 Flux 服務帳戶配置所需的許可權並執行所需的操作,而無需將叢集憑據暴露在外部。

5. GitOps 的優勢

以下是 GitOps 提供的一些關鍵優勢。

更快的上市時間

在 DevOps 環境中,更快的部署是預設要求。然而,GitOps 將其提升到一個新的水平,因為部署發生在原始碼中。隨著程式碼的開發和推送到 Git,它會使用相同的部署工具自動部署。您不必切換工具這一事實使此過程更快更好。

可靠性

GitOps 允許您透過單擊按鈕來還原/回滾更改。您可以快速試驗新功能並在程式碼出現意外行為時撤消它們。它還提高了生產力水平,同時可靠和安全。

改進的開發人員體驗

GitOps 更加關注開發人員。藉助 Git 等開發人員端工具的使用,開發人員可以很好地控制部署基礎架構,並且可以輕鬆管理和監控部署。持續的反饋迴圈幫助他們更頻繁地識別錯誤、進行更改並將程式碼推送到生產環境。他們可以在整個基礎架構中使用一組工具。

輕鬆稽核

在 GitOps 環境中,每個更改都是透過儲存庫進行的。因此,您可以在任何給定時間點檢查分支歷史記錄,以檢視完整的部署歷史記錄以及對程式碼所做的每次更改的歷史記錄。免費的審計跟蹤功能從本質上簡化了審計任務。此外,每個團隊成員都可以檢查 Git 儲存庫並瞭解整個開發生命週期中發生的情況。它還使您的審計任務變得容易。

跨基礎架構的標準化操作

GitOps 使您能夠為跨應用程式、部署和附加元件的變更管理建立標準模型。這意味著您擁有以 Git 為中心的端到端工作流程,這些工作流程在整個基礎架構中都是一致的。它還提供了對 CI/CD 管道的更大可見性。

6. GitOps 最佳實踐

儘管 GitOps 為開發環境提供了速度和規模,但使用正確的策略是利用該框架的關鍵。

管理回購

首先,傳統的開發團隊使用多個儲存庫來獲得他們正在開發的服務的明確所有權。但是,當專案規模擴大時,它會變得複雜。每個團隊只能監控其儲存庫,並且獲得對整個專案的可見性變得令人生畏。因此,最小化儲存庫是一個好主意。對於小公司來說,一個 repo 就足夠了。中型公司可以為每個團隊使用一個 repo,而大型企業可以為每個服務使用一個 repo。每個團隊可以使用一個儲存庫,然後在需要時向其中新增多個分支。這意味著團隊可以在專案上無縫協作。

關於儲存庫的另一個好主意是使用兩個——一個用於應用程式程式碼,另一個用於部署配置。這意味著不會部署每個提交,並且每個人都無法釋放。這也意味著您可以控制誰可以擁有更好的釋出管理流程。

管理清單

當您提交對清單的更改而不對其進行測試時,您很可能會在預生產階段遇到幾個問題。一個好主意是在提交更改之前在本地執行 CLI 命令以生成清單。您還應該確保外部修改不會更改 Git 清單。因此,將遠端基礎或依賴項固定到特定提交。

管理有狀態的應用程式和服務

在 Kubernetes 中管理有狀態的應用程式和服務是一項繁瑣的任務。建議儘可能使用 Kubernetes 運算子,而不是使用手動指令碼。強烈建議使用拉取請求而不是推送。它還將避免在叢集外暴露叢集憑據。您可以使用 Git webhook 自動執行整個環境中的重複過程。

7. 使用 GitOps 持續交付

持續交付是一種軟體開發方法,其中程式碼不斷構建、測試並部署到生產中。跨職能團隊使用版本控制系統協作開發應用程式。每個更改都經常與分支合併。對於每次更改,都會建立一個構建,在該構建上執行自動化測試。成功的構建將自動部署到生產環境。

一開始,GitOps 似乎為持續部署提供了優於持續整合的優勢。但是,GitOps 使 CD 變得簡單高效,從而使 CI 能夠更快更好地交付。在傳統的 CI/CD 管道中,CI 處於中心位置並管理構建和部署。雖然 CI 經常將程式碼釋出到生產環境,但將配置與其同步是一項挑戰。混合多方面基礎設施的存在加劇了這一挑戰。

GitOps 描述性地宣告儲存庫中每個資源的狀態。因此,對應用程式程式碼和清單的更改會立即反映在生產叢集中。它提供了可見性和洞察力,以確保所有生產環境的一致性。透過保證生產叢集狀態的可預測性和一致性,開發人員可以快速構建應用程式並將其部署到多叢集基礎設施,同時獲得對移動到生產環境的程式碼所做的每一次更改的可追溯性和可見性。使用 GitOps,CI 變得更快、更舒適、更好。

8. 使用 GitOps 的基礎設施即程式碼

基礎架構即程式碼是一種使用配置檔案進行 IT 基礎架構管理的創新理念。GitOps 是 IaC 的一個很好的例子,但它在實現上有所不同。它擴充套件了 IaC 工具的功能。在 GitOps 中,IT 基礎架構的所需狀態由原始碼控制儲存和控制。在這裡,不可變容器用作可部署的工件,並使用編排工具將它們聚合到 Git 清單中宣告的狀態。Git 充當中央資料來源,而其他 IaC 框架使用多個儲存庫或 git 和資料庫的組合來管理基礎架構。

雖然 IaC 工具使您能夠管理 IT 基礎架構,但它們不足以控制整個雲原生堆疊。但是,GitOps 足以處理整個雲原生堆疊。您可以使用 IaC 工具並擴充套件其功能以使用 Git 執行基礎架構更新。當清單更新時,Kubernetes 操作員觸發收斂機制,其中更改應用於叢集,直到狀態收斂到 Git 中宣告的狀態。當檢測到分歧時,它將自動傳送警報。您可以配置運算元自動觸發收斂機制。

9. GitOps 工具

以下是一些使您能夠構建結果驅動的 GitOps 環境的工具。

吉特

Git 是 GitOps 環境的核心。它託管程式碼、配置和文件,以跨基礎架構部署和管理叢集。整個過程是自動化的,其中“自動化者”讀取 Git 儲存庫,檢測 Git 中程式碼和配置的更改,並將它們應用到基礎設施中的相應叢集。

Helm 是一個流行的 Kubernetes 包管理器。它使組織能夠使用 Helm Charts 定義和安裝完整的 Kubernetes 應用程式。透過自定義掛鉤和就地升級,您也可以輕鬆更新 Kubernetes 應用程式。Helm 圖表包含排列成特定目錄結構的 YAML 模板檔案。使用 Helm,您可以最佳化 Kubernetes 的 CI/CD 環境。

通量

Flux 是 GitOps 中的另一個關鍵運算子,可確保 Git 儲存庫配置在生產叢集上自動實施。它不斷讀取 Git Repos 並檢測程式碼和配置檔案的更改,並將 Kubernetes 生產叢集聚合到 Git 中宣告的所需狀態。Flux 幫助您將容器映象無縫部署到生產叢集。對叢集的更改可以輕鬆恢復到以前的版本。

標誌

Flagger 是一個流行的 Kubernetes 漸進式交付運營商。使用諸如金絲雀釋出、A/B 測試和藍/綠等 Flagger 漸進式交付技術,開發人員可以自信地將程式碼推送到生產環境。金絲雀版本允許開發人員在生產環境中測試新功能,並在需要時安全回滾。隨著負載緩慢上升,開發人員可以監控關鍵效能指標並評估新功能對生產環境的影響。使用 Flagger 和 FluxCD,您可以輕鬆構建用於金絲雀部署的自動化 GitOps 管道。

10. 總結

在回顧了 GitOps 是什麼之後,我們可以得出結論,隨著多種技術、工具和框架的湧入,現代雲基礎設施日益複雜。GitOps 提供了強大的操作流程來管理這個複雜的雲系統基礎設施。在確保實時生產叢集始終以所需狀態執行的情況下,組織可以奢侈地整合新功能以提供出色的客戶體驗、提高生產力並減少中斷。

然而,GitOps 仍處於初級階段。雖然 GitOps 支援 Kubernetes 和非 Kubernetes 叢集,但大多數 GitOps 操作員旨在管理 Kubernetes 叢集。展望未來,您可以期望 GitOps 操作員跨基礎設施管理所有型別的叢集。

來自 “ skysevenqi ”, 原文作者:skysevenqi;原文連結:https://baijiahao.baidu.com/s?id=1747530445606299512,如有侵權,請聯絡管理員刪除。

相關文章