GitOps 是一組用來操作和管理軟體系統的原則。 本文說明使用 GitOps 原則操作和管理 Azure Kubernetes Services (AKS) 叢集的技術。
Flux、Argo CD、OPA Gatekeeper、Kubernetes 和 git 標誌是各自公司的商標。 使用這些標記時不會隱含任何背書。
架構
您可以搭配 AKS 使用的兩個 GitOps 運算子是 Flux 和 Argo CD。 它們都 已畢業的雲端原生運算基礎 (NCF) 專案 ,而且廣泛使用。 下列案例顯示使用方式。
案例 1:具有 Flux 和 AKS 的 GitOps
下載此架構的 Visio 檔案。
案例 1 的數據流
Flux 是 AKS 的原生 叢集延伸 模組。 叢集延伸模組提供在 AKS 叢集上安裝和管理解決方案的平臺。 您可以使用 Azure 入口網站、Azure CLI 或基礎結構即程式代碼 (IaC) 腳本,例如 Terraform 或 Bicep 腳本,啟用 Flux 作為 AKS 的延伸模組。 您也可以使用 Azure 原則,在 AKS 叢集上大規模套用 Flux v2 設定。 如需詳細資訊,請參閱使用 Flux v2 組態和 Azure 原則,以一致的方式大規模部署應用程式。
Flux 可以將 Kubernetes 指令清單、Helm 圖表和 Kustomization 檔案部署到 AKS。 Flux 是以輪詢為基礎的程式,因此它可以偵測、提取和協調設定變更,而不需向組建代理程序公開叢集端點。
在此案例中,Kubernetes 系統管理員可以變更 Kubernetes 設定物件,例如秘密和 ConfigMaps,並將變更直接認可至 GitHub 存放庫。
此案例的數據流為:
- 開發人員會將設定變更認可至 GitHub 存放庫。
- Flux 會偵測 Git 存放庫中的設定漂移,並提取組態變更。
- Flux 會協調 Kubernetes 叢集中的狀態。
案例 1 的替代方案
- 您可以搭配其他 Git 存放庫使用 Flux,例如 Azure DevOps、GitLab 和 BitBucket。
- Flux Bucket API 會定義來源,以從 Amazon S3 和 Google Cloud Storage 貯體等記憶體解決方案產生物件的成品,而不是 Git 存放庫。 您也可以使用具有 S3 相容 API 的解決方案。 其中兩個範例是 Minio 和 Alibaba 雲端 OS S,但還有其他範例。
- 您也可以將 Flux 設定為產生成品的來源 Azure Blob 儲存體 容器。 如需詳細資訊,請參閱 具有 AKS 和已啟用 Azure Arc 的 Kubernetes 的 GitOps Flux v2 設定。
案例 2:搭配 Flux、GitHub 和 AKS 使用 GitOps 來實作 CI/CD
下載此架構的 Visio 檔案。
案例 2 的數據流
此案例是一般 Web 應用程式的提取式 DevOps 管線。 管線會使用 GitHub Actions 進行建置。 針對部署,它會使用 Flux 作為 GitOps 操作員來提取和同步處理應用程式。 數據流會流經案例,如下所示:
- 應用程式程式代碼是使用 Visual Studio Code 之類的 IDE 所開發。
- 應用程式程式代碼會認可至 GitHub 存放庫。
- GitHub Actions 會從應用程式程式代碼建置容器映射,並將容器映像推送至 Azure Container Registry。
- GitHub Actions 會使用以 Azure Container Registry 中容器映射的版本號碼為基礎的目前映射版本來更新 Kubernetes 指令清單部署檔案。
- Flux 運算子會偵測 Git 存放庫中的設定漂移,並提取組態變更。
- Flux 會使用指令清單檔案將應用程式部署至 AKS 叢集。
案例 3:使用 Argo CD、GitHub 存放庫和 AKS 的 GitOps
下載此架構的 Visio 檔案。
案例 3 的數據流
在此案例中,Kubernetes 系統管理員可以變更 Kubernetes 設定物件,例如秘密和 ConfigMaps,並將變更直接認可至 GitHub 存放庫。
此案例的數據流為:
- Kubernetes 系統管理員會在 YAML 檔案中進行設定變更,並將變更認可至 GitHub 存放庫。
- Argo CD 會從 Git 存放庫提取變更。
- Argo CD 會協調 AKS 叢集的組態變更。
Argo CD 不需要自動將所需的目標狀態同步至 AKS 叢集。 它會實作為持續監視執行中應用程式的 Kubernetes 控制器。 它會比較 AKS 叢集的目前即時狀態與 Git 存放庫中所指定的目標狀態。 Argo CD 會報告並可視化差異,同時提供設備來自動或手動將即時狀態同步回到所需的目標狀態。
Argo CD 提供瀏覽器型使用者介面。 您可以使用它來新增應用程式組態、觀察叢集的同步處理狀態,以及針對叢集起始同步處理。 您也可以使用 Argo CD 命令列來執行這些動作。 使用者介面和命令行介面都提供功能來檢視組態變更的歷程記錄,以及復原至舊版。
根據預設,Argo CD 使用者介面和 API 伺服器不會公開。 若要存取它們,建議您 建立具有內部IP位址的輸入控制器。 或者,您可以使用 內部負載平衡器 來公開它們。
案例 3 的替代方案
任何與 Git 相容的存放庫,包括 Azure DevOps,都可以作為組態來源存放庫。
案例 4:搭配 Argo CD、GitHub Actions 和 AKS 使用 GitOps 來實作 CI/CD
下載此架構的 Visio 檔案。
案例 4 的數據流
此案例是一般 Web 應用程式的提取式 DevOps 管線。 管線會使用 GitHub Actions 進行建置。 針對部署,它會使用Argo CD作為 GitOps 操作員來提取和同步處理應用程式。 數據流會流經案例,如下所示:
- 應用程式程式代碼是使用 Visual Studio Code 之類的 IDE 所開發。
- 應用程式程式代碼會認可至 GitHub 存放庫。
- GitHub Actions 會從應用程式程式代碼建置容器映射,並將容器映像推送至 Azure Container Registry。
- GitHub Actions 會使用以 Azure Container Registry 中容器映射的版本號碼為基礎的目前映射版本來更新 Kubernetes 指令清單部署檔案。
- Argo CD 會從 Git 存放庫提取。
- Argo CD 會將應用程式部署至 AKS 叢集。
案例 4 的替代方案
任何與 Git 相容的存放庫,包括 Azure DevOps,都可以作為組態來源存放庫。
案例詳細資料
GitOps 是一組用來操作和管理軟體系統的原則。
- 它會使用原始檔控制作為系統的單一事實來源。
- 它會將版本控制、共同作業、合規性和持續整合/持續部署(CI/CD)等開發做法套用至基礎結構自動化。
- 您可以將它套用至任何軟體系統。
GitOps 通常用於 Kubernetes 叢集管理和應用程式傳遞。 本文說明搭配 AKS 叢集使用 GitOps 的一些常見選項。
根據 GitOps 原則,GitOps 受控系統所需的狀態必須是:
- 宣告式:GitOps 管理的系統必須具有以宣告方式表示的所需狀態。 宣告通常會儲存在 Git 存放庫中。
- 版本設定和不變:所需的狀態會以強制執行不變性和版本控制的方式儲存,並保留完整的版本歷程記錄。
- 自動提取:軟體代理程式會自動從來源提取所需的狀態宣告。
- 持續協調:軟體代理程式會持續觀察實際的系統狀態,並嘗試套用所需的狀態。
在 GitOps 中, 基礎結構即程式代碼 (IaC) 會使用程式碼來宣告所需的基礎結構元件狀態,例如虛擬機(VM)、網路和防火牆。 此程式代碼是受版本控制且可稽核的程序代碼。
Kubernetes 會使用指令清單以宣告方式描述從叢集狀態到應用程式部署的所有專案。 適用於 Kubernetes 的 GitOps 會將叢集基礎結構所需的狀態置於版本控制之下。 叢集中的元件,通常稱為運算符,會持續同步宣告式狀態。 這種方法可讓您檢閱和稽核影響叢集的程式代碼變更。 它藉由支援最低許可權原則來增強安全性。
GitOps 代理程式會持續將系統狀態與儲存在程式代碼存放庫中所需的狀態協調。 某些 GitOps 代理程式可以還原在叢集外部執行的作業,例如手動建立 Kubernetes 物件。 例如,許可控制器會在建立、更新和刪除作業期間對對象強制執行原則。 您可以使用它們來確保只有在來源存放庫中的部署程式代碼變更時,部署才會變更。
您可以將原則管理和強制執行工具與 GitOps 結合,以強制執行原則,並提供建議原則變更的意見反應。 您可以設定各種小組的通知,以提供最新的 GitOps 狀態。 例如,您可以傳送部署成功和對帳失敗的通知。
GitOps 作為單一事實來源
GitOps 提供叢集狀態的一致性和標準化,並有助於增強安全性。 您也可以使用 GitOps 來確保跨多個叢集的一致狀態。 例如,GitOps 可以跨主要和災害復原 (DR) 叢集,或跨叢集數位套用相同的設定。
如果您想要強制只有 GitOps 可以變更叢集狀態,您可以限制對叢集的直接存取。 有各種方式可以執行這項操作,包括 Azure 角色型存取控制 (RBAC)、許可控制器和其他工具。
使用 GitOps 啟動初始設定
您可能需要將 AKS 叢集部署為基準組態的一部分。 例如,您必須在部署工作負載之前,先部署一組共用服務或組態。 這些共用服務可以設定 AKS 附加元件,例如:
- Microsoft Entra 工作負載 ID。
- 適用於秘密存放區 CSI 驅動程式的 Azure 金鑰保存庫 提供者。
- 合作夥伴工具,例如:
- 開放原始碼工具,例如:
您可以啟用 Flux 作為在建立 AKS 叢集時所套用的延伸模組。 Flux 接著可以將基準組態啟動至叢集。 AKS 叢集的基準架構建議使用 GitOps 進行啟動載入。 如果您使用 Flux 擴充功能,您可以在部署之後很快啟動叢集。
其他 GitOps 工具和附加元件
您可以將所述的案例延伸至其他 GitOps 工具。 Jenkins X 是另一個 GitOps 工具,提供整合至 Azure 的指示。 您可以使用 Flagger 之類的漸進式傳遞工具,逐步轉移透過 GitOps 部署的生產工作負載。
潛在使用案例
此解決方案可讓任何想要部署應用程式和基礎結構即程式代碼之優點的組織,以及每項變更的稽核線索。
GitOps 可讓開發人員免於管理容器環境的複雜性。 開發人員可以繼續使用熟悉的工具,例如 Git 來管理更新和新功能。 如此一來,GitOps 可提升開發人員生產力。
考量
這些考量能實作 Azure Well-Architected Framework 的支柱,這是一組指導原則,可以用來改善工作負載的品質。 如需更多資訊,請參閱 Microsoft Azure 結構完善的架構。
可靠性
可靠性可確保您的應用程式符合您對客戶的承諾。 如需更多資訊,請參閱可靠性支柱的概觀。
可靠性的主要要素之一是復原能力。 復原的目標是在失敗發生後將應用程式返回完全運作的狀態。 如果叢集無法使用,GitOps 可以快速建立新的叢集。 它會使用 Git 存放庫作為 Kubernetes 組態和應用程式邏輯的單一事實來源。 它可以建立並套用叢集組態和應用程式部署作為縮放單位,並可建立 部署戳記 模式。
安全性
安全性可提供保證,以避免刻意攻擊和濫用您寶貴的資料和系統。 如需詳細資訊,請參閱安全性支柱的概觀。
使用 GitOps 方法,個別開發人員或系統管理員不會直接存取 Kubernetes 叢集以套用變更或更新。 相反地,用戶會將變更推送至 Git 存放庫,而 GitOps 操作員 (Flux 或 Argo CD) 會讀取變更,並將其套用至叢集。 此方法遵循最低許可權的安全性最佳做法,不授與 DevOps 小組對 Kubernetes API 的寫入許可權。 在診斷或疑難解答案例中,您可以依案例來授與叢集許可權一段時間。
除了設定存放庫許可權的工作之外,請考慮在 Git 存放庫中實作下列與 AKS 叢集同步的安全性措施:
- 分支保護: 保護代表 Kubernetes 叢集狀態的分支,使其無法直接推送變更。 使用PR進行變更,並讓至少一個其他人檢閱每個PR。 此外,使用PR執行自動檢查。
- PR 檢閱: 要求PR至少有一個檢閱者,以強制執行四眼原則。 您也可以使用 GitHub 程式代碼擁有者功能來定義負責檢閱存放庫中特定檔案的個人或小組。
- 不可變的歷程記錄: 只允許在現有變更之上的新認可。 不可變的歷程記錄對於稽核目的特別重要。
- 進一步的安全性措施: 要求您的 GitHub 使用者啟用雙因素驗證。 此外,只允許已簽署的認可,以防止變更。
成本最佳化
成本最佳化是關於考慮如何減少不必要的費用,並提升營運效率。 如需詳細資訊,請參閱成本最佳化支柱的概觀。
- 在免費層上,AKS 提供免費的叢集管理。 成本僅限於 AKS 用來裝載節點的計算、記憶體和網路資源。
- GitHub 提供免費服務,但若要使用進階安全性相關功能,例如程式代碼擁有者或必要的檢閱者,您需要 Team 方案。 如需詳細資訊,請參閱 GitHub 定價 頁面。
- Azure DevOps 提供一個免費層,可供您用於某些案例。
- 使用 Azure 定價計算機來預估成本。
卓越營運
卓越營運涵蓋部署應用程式並使其持續在生產環境中執行的作業流程。 如需詳細資訊,請參閱卓越營運支柱的概觀 (部分機器翻譯)。
GitOps 可以提升DevOps生產力。 其中一項最實用的功能,就是只要執行 Git 作業,就能快速復原非預期進行的變更。 認可圖表仍包含所有認可,因此可協助進行事後分析。
GitOps 小組通常會管理相同應用程式的多個環境。 通常會有數個階段的應用程式部署到不同的 Kubernetes 叢集或命名空間。 Git 存放庫是單一事實來源,會顯示目前部署至叢集的應用程式版本。
部署案例
下列清單提供部署五個案例相關信息的參考:
- 案例 1: 如需使用 GitOps 搭配 Flux v2 將應用程式部署至 AKS 的指引,請參閱 教學課程:使用 GitOps 搭配 Flux v2 部署應用程式。 如需如何使用 Flux 擴充功能啟動 AKS 叢集部署的範例,請參閱 AKS 基準的參考實作。
- 案例 2:如需在 AKS 上使用 GitOps 搭配 Flux v2 來部署應用程式和實作 CI/CD 的指引,請參閱教學課程:使用 GitOps 實作 CI/CD(Flux v2)。
- 案例 3 和 4:如需使用 Argo CD 和 AKS 部署範例工作負載的逐步指引,請參閱 AKS 基準自動化中的提取式 CI/CD 案例。
參與者
本文由 Microsoft 維護。 原始投稿人如下。
主要作者:
- 弗朗西斯·西米·納扎雷斯 |主要雲端解決方案架構師
若要查看非公開的 LinkedIn 設定檔,請登入 LinkedIn。