什麼是 GitOps?

GitOps 是一個軟件開發框架,它使組織能夠持續地交付軟件應用程序,同時使用 Git 作爲單一的真實來源有效地管理 IT 基礎設施。GitOps 是 DevOps 的一個子集,它結合了基礎設施即代碼 (IaC) 和 DevOps 最佳實踐,創建了一個操作模型,用於管理軟件開發流程,並根據 Git 倉庫的狀態立即重現系統的雲基礎設施。

雖然有一些軟件開發工具和解決方案,但基礎設施管理一直是一項複雜的任務。它需要專業知識來建造和維護基礎設施。DevOps 徹底改變了軟件開發環境,並通過 “基礎設施即代碼(IaC)” 方法賦能基礎設施管理。

雖然 IaC 允許開發人員將配置聲明爲代碼並自動化系統基礎設施,但保持代碼、測試和生產環境之間的實時同步仍然是一個挑戰。GitOps 擴展了 IaC 的功能,允許開發人員在 Git 中聲明每個資源,並在整個基礎設施中自動維護所需的狀態。繼續閱讀,瞭解更多關於什麼是 GitOps!

GitOps:是否是一個版本控制方法?

版本控制系統在 DevOps 環境中扮演着至關重要的角色。VCS 是一個軟件工具,它使組織能夠跟蹤和管理代碼的更改。它將對代碼所做的每一個更改存儲在一個唯一的數據庫中。版本控制系統允許團隊在代碼開發上無縫協作,在最大限度地減少中斷的同時加快發佈時間。當出現錯誤時,團隊可以快速恢復到早期版本,而不會中斷其餘的工作。GitOps 利用 Git VCS 來提高 CI/CD 流水線的效率。

Git 是開發人員圈子裏最流行的版本控制系統。由於大多數開發人員都熟悉 Git,因此使用 GitOps 項目變得很容易。在 GitOps 環境中,Git 充當唯一的真相來源。環境中的每個資源都在 Git 存儲庫中進行了描述性聲明。當 Git“pull 請求” 發出,並且更改被批准時,當前使用的基礎設施將自動重新配置,以與 Git 存儲庫中聲明的所需狀態同步。flux 用於監視 Git 拉取請求,並將生產集羣收斂到所需的狀態。

GitOps 原則

作爲 GitOps 原則之一,查看變更的整個審計跟蹤的能力爲組織中的各個團隊帶來了透明度。當基礎設施和應用程序作爲版本化後,審計也變得很容易。

自動化

聲明性描述的優點是,你可以在 Git 代碼中聲明系統所需的狀態,然後自動將所有更改應用到系統。通過在持續部署流水線中集成反饋控制循環,可以實現自動化部署。雖然它顯著增加了你每天所做的更改的數量,但也減少了部署的平均時間。

保險

當期望的狀態與系統的實際狀態不匹配時,軟件代理會立即就配置更改向你發出警報。有了這個 GitOps 原則和自愈方法,就可以確保擁有一個高質量的軟件開發環境。

GitOps 是如何工作的?

GitOps 架構允許開發人員使用 Git 作爲唯一的真實來源來管理基礎設施操作。在典型的 DevOps 開發環境中,CI 組件位於流水線的前端。CI 組件將 VCS 視爲提供輸入以構建操作的服務,將 CD 視爲部署代碼的服務。它獲取代碼,運行自動化測試,並使用 CD 自動化將批准的代碼推到生產環境中。

下面是一個典型的 DevOps CI/CD 流水線。
1、開發人員編寫代碼並將其提交給版本控制系統。
2、CI 服務器獲取代碼並對其運行自動化測試。
3、當發現錯誤 / bug 時,將發送代碼進行更正。
4、已批准的代碼將自動推送到容器鏡像倉庫。
5、自動化部署工具將容器推向生產環境。
6、容器編排工具用於管理容器。

在這裏,CI 組件是 CI/CD 流水線的核心。然而,GitOps 將版本控制系統 Git 推向了中心。在這個體系結構中,Git 無縫地管理部署和操作。由於開發人員最熟悉 Git 和拉請求,所以使用 GitOps 變得很容易。
下面是 GitOps 環境中的一個典型工作流程:
1、開發人員向 Git 存儲庫發出拉取請求。
2、代碼由相關人員審查和批准。
3、然後將代碼合併到 Git 存儲庫中。
4、當檢測到更改時,CI 構建流水線將被觸發。CI 工具自動運行測試。代碼通過所有測試後,將構建鏡像並將其推入鏡像倉庫。
5、部署 Automator 檢測鏡像倉庫的更改,將其從註冊中心取出,並更新 Config 存儲庫 YAML 文件。
6、部署同步器檢測集羣中的更改。它從配置倉庫中提取更改,並使用新特性更新過時的集羣。

考慮一個使用 Kubernetes 集羣和 Flux CD 來管理 Kubernetes 的 GitOps 環境。Kubernetes 集羣的狀態首先在 Git 存儲庫中聲明。如果沒有事先聲明,就不會有工作負載進入 Kubernetes 集羣。工作負載描述被聲明並推送到 Git 倉庫。部署的集羣狀態應該始終與 Git 中聲明的狀態保持同步。Flux 執行部署同步。它被部署在 Kubernetes 中,並使用一個控制循環來拉出 git 代碼,並檢查是否有新的提交被推送。當一個新的提交被應用時,它立即將集羣狀態收斂到新聲明的狀態。

此外,Flux 還檢查容器鏡像倉庫以進行更新。當發現新鏡像時,Flux 將使用最新的容器鏡像 tag 更新 Git 上的集羣 manifest 文件,然後用最新的提交重新同步集羣狀態。這意味着容器實例總是使用最新的鏡像運行。它還確保集羣狀態始終與 Git 存儲庫中的聲明完全同步。如果你需要回滾某個特性,只需使用 Git 將其恢復到早期版本,Flux 將自動將集羣狀態同步到該版本。

使用 GitOps,你不需要爲開發人員提供寫訪問。相反,Flux 將根據 Git 倉庫聲明在集羣中更新、刪除或創建資源。通過實現基於角色的訪問控制 (RBAC),你可以使用所需的特權配置 Flux 服務帳戶並執行所需的操作,而無需向外部暴露集羣憑據。

GitOps 的優勢

GitOps 最佳實踐

總結

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

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/Ew2h5gTijdco4LBuS5VvnA