使用 GitHub Actions 和 GitFlow 的 AKS 應用程式 CI/CD

Azure Container Registry
Azure Kubernetes Service (AKS)
Azure 監視器
Azure Pipelines

GitOps 是雲端原生應用程式的作業模型,會將應用程式和宣告式基礎結構程式代碼儲存在 Git 中,以作為自動化持續傳遞的真相來源。 使用 GitOps 時,您會在 Git 存放庫中描述整個系統所需的狀態,而 GitOps 操作員會將它部署到您的環境,這通常是 Kubernetes 叢集。 如需 Azure 上適用於 Kubernetes 的 GitOps 詳細資訊,請造訪已啟用 Azure Arc 的 Kubernetes 的 GitOps Service 或 CI/CD 和 GitOps 專業領域。

本文中的範例案例適用於想要使用容器現代化端對端應用程式開發的企業、建置的持續整合 (CI),以及用於持續部署的 GitOps。 在此案例中, Flask 應用程式 會作為範例使用。 此 Web 應用程式是由使用 Python 和 Flask 架構撰寫的前端所組成。

架構

下列選項會探索推送式和提取式 CI/CD 方法。

選項 1:推送式 CI/CD

Diagram of the push-based architecture with GitHub Actions.

使用適用於 CI 和 CD 的 GitHub Actions 推送架構。

下載此架構的 Visio 檔案

資料流程

此案例涵蓋兩層式 Web 應用程式的推送式 DevOps 管線,其中包含前端 Web 元件,以及使用 Redis 的後端。 此管線會使用 GitHub Actions 進行建置和部署。 數據流會流經案例,如下所示:

  1. 開發應用程式程式代碼。
  2. 應用程式程式代碼會認可至 GitHub Git 存放庫。
  3. GitHub Actions 會從應用程式程式代碼建置容器映射,並將容器映像推送至 Azure Container Registry。
  4. GitHub Actions 作業會部署或推送應用程式,如指令清單檔案中所述,使用 kubectl 或 部署至 Kubernetes 叢集動作的 Azure Kubernetes Service (AKS) 叢集

選項 2:提取式 CI/CD (GitOps)

Diagram of the pull-based architecture with GitHub Actions and Argo CD.

使用適用於 CI 的 GitHub Actions 和適用於 CD 的 Argo CD 的提取架構。

下載此架構的 Visio 檔案

資料流程

此案例涵蓋兩層式 Web 應用程式的提取式 DevOps 管線,其中包含前端 Web 元件,以及使用 Redis 的後端。 此管線會使用 GitHub Actions 進行建置。 針對部署,它會使用Argo CD作為 GitOps 操作員來提取/同步處理應用程式。 數據流會流經案例,如下所示:

  1. 開發應用程式程式代碼。
  2. 應用程式程式代碼會認可至 GitHub 存放庫。
  3. GitHub Actions 會從應用程式程式代碼建置容器映射,並將容器映像推送至 Azure Container Registry。
  4. GitHub Actions 會根據 Azure Container Registry 中容器映射的版本號碼,使用目前的映像版本來更新 Kubernetes 指令清單部署檔案。
  5. Argo CD 會與 Git 存放庫同步處理或提取。
  6. Argo CD 會將應用程式部署至 AKS 叢集。

元件

  • GitHub Actions 是一種自動化解決方案,可與 Azure 服務整合以進行持續整合(CI)。 在此案例中,GitHub Actions 會根據認可原始檔控制來協調建立新的容器映像、將這些映射推送至 Azure Container Registry,然後更新 GitHub 存放庫中的 Kubernetes 指令清單檔案。
  • Azure Kubernetes Service (AKS) 是受控 Kubernetes 平臺,可讓您部署和管理容器化應用程式,而不需要容器協調流程專業知識。 以主控的 Kubernetes 服務形式,Azure 會為您處理像是健康狀態監視和維護等重要工作。
  • Azure Container Registry 會儲存和管理 AKS 叢集所使用的容器映射。 映射會安全地儲存,並可透過 Azure 平台複寫至其他區域,以加速部署時間。
  • GitHub 是 Web 型原始檔控制系統,可在 Git 上執行,並由開發人員用來儲存及設定其應用程式程式碼的版本。 在此案例中,GitHub 會用來將原始程式碼儲存在 Git 存放庫中,然後使用 GitHub Actions 在推送式方法中執行容器映像的建置和推送至 Azure Container Registry。
  • Argo CD 是與 GitHub 和 AKS 整合的開放原始碼 GitOps 操作員。 Argo CD 支援持續部署 (CD)。 Flux 可能已用於此目的,但 Argo CD 會展示應用程式小組如何針對其特定應用程式生命週期考慮選擇個別工具,而與叢集操作員用於叢集管理的相同工具相比。
  • Azure 監視器 可協助您追蹤效能、維護安全性及識別趨勢。 Azure 監視器取得的計量可供其他資源和工具使用,例如 Grafana

替代項目

  • Azure Pipelines 可協助您針對任何應用程式實作 CI/DC 和測試管線。
  • Jenkins 是開放原始碼自動化伺服器,可與適用於 CI/CD 的 Azure 服務整合。
  • Flux 可作為 GitOps 操作員使用。 它可以執行與 Argo CD 相同的工作,並且與 AKS 的運作方式相同。

案例詳細資料

在此案例中,應用程式的自動化建置和部署會使用數種技術。 此程式代碼是在 VS Code開發,並儲存在 GitHub 存放庫中。 GitHub Actions 可用來將應用程式建置為容器,然後將容器映射推送至 Azure Container Registry。 GitHub Actions 可用來更新必要的 Kubernetes 指令清單部署檔案,也會儲存在 Git 存放庫中,而 GitOps 操作員 Argo CD 則會從該處挑選 Kubernetes 指令清單檔案,並將應用程式部署至 AKS 叢集。

其他範例包括提供自動化開發環境、驗證新的程式碼認可,以及將新的部署推送至預備或生產環境。 傳統上,企業必須手動建置和編譯應用程式和更新,並維護大型整合型程式代碼基底。 透過使用 CI 和 GitOps for CD 的應用程式開發新式方法,您可以快速建置、測試及部署服務。 這個新式方法可讓您更快發行應用程式和更新給客戶,並以更敏捷的方式響應不斷變化的業務需求。

藉由使用 AKS、Container Registry、GitHub 和 GitHub Actions 等 Azure 和 GitHub 服務,公司可以使用最新的應用程式開發技術和工具來簡化實作高可用性的程式。 此外,藉由使用 Flux 或 Argo CD for GitOps 等開放原始碼技術,公司會簡化部署,並強制執行所需的應用程式狀態。

潛在的使用案例

其他相關的使用案例包括:

  • 採用微服務容器型方法,將應用程式開發實務現代化。
  • 加快應用程式開發和部署生命週期。
  • 自動化部署以測試或接受環境以進行驗證。
  • 確定應用程式的組態和所需狀態。
  • 自動化叢集生命週期管理。

CI/CD 選項

本檔展示 GitOps 的使用方式,以在 CI/CD 管線中處理持續部署的新式方法。 不過,每個組織都不同。 透過自動化傳遞管線將應用程式部署至 Kubernetes 叢集時,請務必瞭解其可執行的各種方式。

將應用程式部署至 AKS 叢集的兩個最常見 CI/CD 選項是以推送為基礎和提取式。 推送選項會利用 GitHub Actions 進行持續部署,而提取選項會利用 GitOps 進行持續部署。

選項 1:使用適用於 CI 和 CD 的 GitHub Actions 推送架構

在此方法中,程式代碼會從管線的 CI 部分開始,其方式是將變更推送為 Kubernetes 叢集的部署。 部署是以觸發程式為基礎。 有各種觸發程式可以啟動部署,例如認可至存放庫,或從另一個 CI 管線觸發程式。 透過這種方法,管線系統可以存取 Kubernetes 叢集。 推送式模組是 CI/CD 工具目前最常使用的模型。

使用推送式方法的原因:

  • 彈性:大部分的 GitOps 操作員目前只會在 Kubernetes 中執行。 如果您的組織想要將應用程式部署到 Kubernetes 以外的任何專案,您必須透過其他 CI/CD 工具將應用程式推送至該環境,例如使用 GitHub Actions。

  • 效率:部署雲端原生和傳統應用程序的標準化方法更有效率。 目前,GitOps 最適合在 Kubernetes 上執行的雲端原生應用程式。

  • 簡單性:推送式 CI/CD 在許多組織中最廣泛的工程師集合中廣為人知。 推送式方法可能比混合推送式和提取式 CI/CD 方法簡單。

  • 結構:目前用於應用程式的存放庫結構可能不適合 GitOps,這表示需要有重大規劃和重組,才能符合 GitOps。

選項 2:使用適用於 CI 的 GitHub Actions 和 GitOps 操作員 Argo CD for CD 的提取架構

此方法以套用 Kubernetes 叢集內的任何變更為中心。 Kubernetes 叢集包含操作員,可掃描 Git 存放庫以取得叢集所需的狀態、挑選並套用任何需要進行的變更。 在此模型中,沒有任何外部用戶端具有 Kubernetes 叢集的管理員層級認證。 提取模型不是新的,但 CI/CD 工具尚未廣泛使用。 最近,隨著 GitOps 的推出,提取模型已獲得採用。 許多組織都利用 GitOps 來協助其CD/CD管線中的持續部署。

使用提取式方法的原因:

  • 一致性:使用 GitOps 時,操作員會比較 Kubernetes 叢集的狀態與 Git 存放庫中組態和應用程式的預期狀態。 如果設定或應用程式有任何漂移,GitOps 操作員會自動將 Kubernetes 叢集帶回所需的狀態。

  • 安全性:使用 GitOps 的 CI/CD 提取式方法可讓您將安全性認證轉移到 Kubernetes 叢集,藉由移除認證以將認證儲存在外部 CI 工具中,藉以降低安全性和風險表面。 您也可以減少允許的輸入連線,並限制 Kubernetes 叢集的系統管理層級存取。

  • 版本控制:由於 GitOps 會使用 Git 存放庫作為事實來源,因此您的持續部署原本就具有版本控制、復原和稽核功能。

  • 多租使用者:使用 GitOps 的提取式方法非常適合分散式小組和或多租使用者。 透過 GitOps,您可以利用個別的 Git 存放庫、個別的訪問許可權,並將部署分散到不同的命名空間。

  • 雲端原生:更多應用程式正在現代化或建置成雲端原生。 對於任何在 Kubernetes 中執行大部分應用程式的組織而言,使用 GitOps 操作員進行持續部署比傳統推送式 CI/CD 方法更簡單且更有效率。

考量

這些考慮會實作 Azure Well-Architected Framework 的支柱,這是一組指導原則,可用來改善工作負載的品質。 如需詳細資訊,請參閱 Microsoft Azure Well-Architected Framework

可靠性

可靠性可確保您的應用程式可以符合您對客戶的承諾。 如需詳細資訊,請參閱 可靠性要素概觀。

若要監視應用程式效能並回報問題,此案例會利用 Azure 監視器。 它可讓您監視和疑難解答可能需要程式代碼更新的效能問題,然後可以使用 CI/CD 管線進行部署。

作為 AKS 叢集的一部分,負載平衡器會將應用程式流量分散到執行應用程式的一或多個容器或 Pod。 在 Kubernetes 中執行容器化應用程式的方法可為您的客戶提供高可用性基礎結構。

注意

本文不會直接解決 CI/CD 管線高可用性的問題。 如需詳細資訊,請流覽 GitHub Actions 的高可用性和 適用於 Kubernetes 的 Argo CD 宣告式 GitOps CD。

復原元件內建於 Kubernetes 中。 如果發生問題,這些元件會監視和重新啟動容器或 Pod。 結合多個 Kubernetes 節點時,您的應用程式可以容許 Pod 或節點無法使用。

如需設計復原解決方案的一般指引,請參閱 設計可靠的 Azure 應用程式

安全性

安全性可提供針對蓄意攻擊和濫用寶貴數據和系統的保證。 如需詳細資訊,請參閱 安全性要素概觀。

為了區分認證和許可權,此案例會使用專用的 Microsoft Entra 服務主體。 此服務主體的認證會儲存為 GitHub 中的安全認證對象,作為 GitHub Actions 秘密,因此它們不會在腳本或建置管線中直接公開和顯示。

如需保護 AKS 叢集上應用程式的一般指引,請參閱 AKS 中應用程式和叢集的安全性概念。

為了區分考慮,指引是將執行商務應用程式的計算與CD代理程式或 GitOps 操作員分開,方法是在 Kubernetes 叢集上的個別命名空間中執行商務應用程式和 GitOps 操作員。 為了進一步區分考慮,GitOps 操作員可以在專用於 GitOps 實例的 Kubernetes 叢集上執行,而該叢集與執行商務應用程式的生產 Kubernetes 叢集分開。

注意

本文不會直接說明如何保護 CI/CD 管線。

效能效益

效能效率是工作負載調整的能力,以符合使用者以有效率的方式滿足其需求。 如需詳細資訊,請參閱 效能效率要素概觀

AKS 可讓您調整叢集節點數目,以符合應用程式的需求。 隨著應用程式成長,您可以相應增加執行服務的 Kubernetes 節點數目。

使用 GitHub Actions 時,雲端提供者會自動調整執行器的數目。 如果使用自我裝載的執行器,則執行器主機會負責視需要調整它們。

如需其他延展性主題,請參閱 效能效率檢查清單

部署此案例

請遵循 AKS-baseline-automation 參考實作中的步驟來部署案例。 參考實作存放庫已引導推送式 CI/CD 案例和提取式 CI/CD (GitOps) 案例的逐步解說。

參與者

本文由 Microsoft 維護。 原始投稿人如下。

主要作者:

其他投稿人:

若要查看非公用LinkedIn配置檔,請登入LinkedIn。

下一步

此案例使用 Azure Container Registry 和 AKS 來儲存和執行容器型應用程式。 Azure Container Apps 或 Azure 容器執行個體 也可以用來執行容器型應用程式,而不需要布建任何協調流程元件。 如需詳細資訊,請參閱 Azure 容器執行個體 概觀Azure Container Apps 概觀

產品檔案:

Microsoft Learn 課程模組: