共用方式為


使用 GitOps 的 CI/CD 工作流程 - 已啟用 Azure Arc 的 Kubernetes

重要

本文件所述的工作流程會搭配 Flux v1 使用 GitOps。 已啟用 Azure Arc 的 Kubernetes 和 Azure Kubernetes Service (AKS) 叢集現在可以使用搭配 Flux v2 的 GitOps;了解搭配 Flux v2 使用 GitOps 的 CI/CD 工作流程。 建議您儘快移轉至 Flux v2

在 2024 年 1 月 1 日之前建立的 Flux v1 型叢集設定資源支援,將於 2025 年 5 月 24 日結束。 從 2024 年 1 月 1 日起,您將無法建立新的 Flux v1 型叢集設定資源。

新式 Kubernetes 部署會裝載多個應用程式、叢集和環境。 透過 GitOps,您可以更輕鬆地管理這些複雜的設定,使用 Git 以宣告方式追蹤 Kubernetes 環境的預期狀態。 使用常見的 Git 工具來追蹤叢集狀態,您可以增加責任劃分、加快錯誤調查效率,以及啟用自動化來管理環境。

此概念概觀說明在使用 Azure Arc、Azure Repos 和 Azure Pipelines 的完整應用程式變更生命週期中的 GitOps 實際應用。 跳至範例:單一應用程式在 GitOps 管理的 Kubernetes 環境中進行變更。

架構

假設有一個部署至一個或多個 Kubernetes 環境的應用程式。

GitOps CI/CD architecture

應用程式存放庫

應用程式存放庫包含開發人員在其內部迴圈期間使用的應用程式程式碼。 應用程式的部署範本會以通用形式存在於此存放庫中,例如 Helm 或 Kustomize。 不會儲存環境特有的值。 此存放庫的變更會叫用可啟動部署程序的 PR 或 CI 管線。

Container Registry

容器登錄會保存 Kubernetes 環境中使用的所有第一方和協力廠商映像。 使用人類可讀取的標籤和用來建置映像的 Git 認可來標記第一方應用程式映像。 快取協力廠商映像,以提高安全性、速度和復原能力。 設定及時測試和整合安全性更新的計畫。 如需詳細資訊,請參閱使用 ACR 取用和維護公用內容指南以取得範例。

PR 管線

應用程式存放庫的 PR 會在成功執行 PR 管線時受到管制。 此管線會在應用程式程式碼上執行基本品質管制,例如 Lint 分析和單元測試。 管線會測試應用程式,並對用於部署至 Kubernetes 環境的 Dockerfiles 和 Helm 範本使用 Lint。 Docker 映像應該經過建置和測試,但不應該推送。 讓管線持續時間保持在相對短的時間,以允許快速反覆。

CI 管線

應用程式 CI 管線會執行所有 PR 管線步驟,並展開測試和部署檢查。 管線可以針對每個認可執行,或搭配一組認可來定期執行。 這個階段中會執行對 PR 管線而言太長的應用程式測試。 在建置部署準備之後,將 Docker 映像推送至 Container Registry。 已取代的範本可以搭配一組測試值進行 Lint 檢查。 此時,服務執行階段所使用的映像應該會經過 Lint 檢查、建置及測試。 具體而言,CI 組建中會針對 CD 步驟發佈成品,以在準備部署時取用。

Flux

Flux 是在每個叢集中執行且負責維護預期狀態的服務。 服務會經常輪詢 GitOps 存放庫以取得其叢集的變更,並加以套用。

CD 管線

CD 管線會由成功的 CI 組建自動觸發。 該管線會使用先前發佈的範本、取代環境值,並對 GitOps 存放庫開啟 PR,以要求變更一或多個 Kubernetes 叢集的預期狀態。 叢集管理員會檢閱狀態變更 PR,並核准合併至 GitOps 存放庫。 然後管線會等候 PR 完成,讓 Flux 能夠挑選狀態變更。

GitOps 存放庫

GitOps 存放庫代表叢集上所有環境目前預期的狀態。 對此存放庫所做的任何變更都會由每個叢集中的 Flux 服務挑選並部署。 PR 會隨著預期狀態變更而建立,然後經過檢閱和合併。 這些 PR 包含部署範本的變更,以及所產生轉譯 Kubernetes 資訊清單的變更。 低層級轉譯的資訊清單允許更仔細的變更檢查,通常是在範本層級上看不到的變更。

Kubernetes 叢集

至少有一個已啟用 Azure Arc 的 Kubernetes 叢集,可為應用程式所需的不同環境提供服務。 例如,單一叢集可以透過不同的命名空間來為開發和 QA 環境提供服務。 第二個叢集可提供更簡易的環境區隔和更精細的控制。

範例工作流程

身為應用程式的開發人員,Alice 可以:

  • 撰寫應用程式程式碼。
  • 決定如何在 Docker 容器中執行應用程式。
  • 定義在 Kubernetes 叢集中執行容器和相依服務的範本。

雖然 Alice 知道應用程式需要在多個環境中執行,但她不知道每個環境的特定設定。

假設 Alice 想要變更應用程式,以改變應用程式部署範本中使用的 Docker 映像。

  1. Alice 變更部署範本、將其推送至應用程式存放庫上的遠端分支,然後開啟 PR 以供檢閱。
  2. Alice 要求她的小組檢閱變更。
    • PR 管線會執行驗證。
    • 成功執行管線之後,小組會簽核,然後變更合併。
  3. CI 管線會驗證 Alice 的變更,並成功完成。
    • 此變更可安全地部署到叢集,而且成品會儲存至 CI 管線執行。
  4. Alice 的變更會合併並觸發 CD 管線。
    • CD 管線會挑選 Alice CI 管線執行所儲存的成品。
    • CD 管線會以環境專屬值取代範本,並針對 GitOps 存放庫中現有叢集狀態進行任何變更。
    • CD 管線會對 GitOps 存放庫建立 PR,並包含叢集狀態的預期變更。
  5. Alice 的小組已檢閱並核准她的 PR。
    • 變更會合併到對應至環境的目標分支。
  6. Flux 會在幾分鐘內注意到 GitOps 存放庫中的變更,並提取 Alice 的變更。
    • 由於 Docker 映像變更,因此應用程式 Pod 需要更新。
    • Flux 會將變更套用至叢集。
  7. Alice 會測試應用程式端點,以確認部署已順利完成。

    注意

    針對更多以部署為目標的環境,CD 管線會藉由為下一個環境建立 PR 來反覆,並重複步驟 4-7。 針對風險性部署或環境 (例如安全性相關變更或生產環境),此程序需要額外的核准。

  8. 一旦所有環境都收到成功的部署後,管線就會完成。

下一步

深入了解如何在叢集與 Git 存放庫之間建立連線,以作為已啟用 Azure Arc 的 Kubernetes 的設定資源