本文說明如何在部署 Azure Kubernetes Service (AKS) 之後,概念化、架構、建置及部署使用來自雲端原生運算基礎 (NCF) 的專案的應用程式。 此架構描述 GitHub 上的 CNCF 專案應用程式。 存放庫中的安裝指示提供部署架構的步驟。
架構
下載此架構的 Visio 檔案。
工作負載是簡單的 Web 應用程式,員工可用來提交和檢視費用報表。 當員工提交費用報表時,員工經理會收到電子郵件。
工作流程
申請流程
1. 員工透過 NGINX 輸入存取 Web 應用程式以提交費用。
2. Web 應用程式會呼叫 API 應用程式來擷取員工的經理。
3. Web 應用程式會將建立費用報表所產生的訊息推送至 Knative 訊息代理程式。
4. 費用報表會儲存在 MySQL 中。
5. Knative 會以費用訊息做為承載來觸發電子郵件調度員函式。
6. 電子郵件調度員會建立 SendGrid 訊息。
7. SendGrid 會將電子郵件傳送給擷取的管理員以供檢閱。
DevOps 流程
a. 開發人員在 Visual Studio Code 撰寫或更新程式碼。
b. 開發人員會將程式碼從 Visual Studio Code 中的本機工作區推送至 GitHub。
c. GitHub Webhook 會觸發複製 GitHub 程式碼的 Tekton 管線。
d. 管線會建置和推送容器影像至 Harbor 登錄。
e. Tekton 會部署 Web 應用程式、API 應用程式和電子郵件調度員應用程式。
f. Prometheus 會擷取應用程式計量。
.g 工程師會監視 Grafana 儀表板上的計量。
h. DevOps 工程師會監視 Grafana 儀表板。
基礎結構
i. AKS 叢集是基於 AKS 基準中提供的基礎結構。
ii. 用於叢集儲存體的 Rook Ceph。
iii. Linkerd 服務網格。
iv. Jaeger 用於 Kubernetes 叢集上的整體應用程式追蹤。
叢集作業
您可能會發現使用 GitOps 管理來管理叢集和叢集啟動載入會很有幫助。 Flux 是熱門的 GitOps 運算子。 它通常會與 GitHub Actions 配對,以啟用更新指令清單和 Helm 圖表的驗證。
元件
Azure
- Azure Kubernetes Service (AKS)。 提供受控叢集基礎結構。
開放原始碼軟體
- Kubernetes CNCF。 自動化容器化應用程式的部署、調整和管理。
- Flux。 CNCF。 用於基礎結構傳遞的 GitOps 提供者。
- Rook。 CNCF。 為集群提供儲存體管理。
- Harbor。 CNCF。 影像的容器登錄。
- Linkerd。 CNCF。 與 OpenFaaS、NGINX、Prometheus 和 Jaeger 整合的服務網格。
- Prometheus。 CNCF。 擷取應用程式計量。
- Jaeger。 CNCF。 在 Kubernetes 叢集上提供整體應用程式追蹤。
- Knative。 CNCF。 用來建置無伺服器和事件驅動應用程式。 部署電子郵件調度員函式。
- MySQL。 儲存費用報表的資料庫。
- NGINX。 員工用來存取 Web 應用程式的 Kubernetes 輸入控制器,以提交費用報表。
- Tekton。 用於持續整合/持續部署 (CI/CD) 的持續傳遞基礎專案。 部署 Web 應用程式、API 應用程式和電子郵件調度員應用程式。
- Grafana。 應用程式計量的儀表板。
- SendGrid。 傳送郵件給經理以進行費用報表檢閱的外部電子郵件服務。
- GitHub。 程式碼存放庫。 Tekton 管線使用 GitHub 程式碼。
- .NET Core。 用於 Web 前端和 Web API。
- Flux。 提供 GitOps 管理。
替代項目
本專案採用 CNCF 畢業和孵化專案。 使用的服務可能會有多個替代方案。 如需替代方案,請參閱 CNCF 網站。 以下是一些描述其中一些內容的資源:
- 服務網格選項的比較
- 函式即服務 (無伺服器) 替代方案
- Vitess:Kubernetes 上的分區化 MySQL
- 使用 Zipkin 和 OpenTracing 監視微服務
- 以開發人員為中心的體驗 GitOps
您可以將各種 Azure 服務視為替代方案。 例如,Web 應用程式路由、Azure Container Registry、Azure Container Storage、Azure 監視器、適用於 Prometheus 的 Azure 監視器受控服務、Azure 受控 Grafana。
Microsoft 也支援開放原始碼軟體專案做為 AKS 中的 Managed Addons/Derived 專案,包括 NGINX、Istio、Prometheus、Grafana 和 OpenEBS。
案例詳細資料
您可以在任何 Kubernetes 叢集上部署此架構,而不只是 AKS。 它提供 AKS 平台彈性的其中一個範例。 AKS 可讓您輕鬆在 Azure 中部署受控 Kubernetes 叢集。
檢閱本文之後,您將能充分瞭解如何部署主要由 CNCF 專案組成的典型應用程式。
潛在使用案例
這些其他使用案例具有類似的設計模式:
- 建立容器型工作負載的 CI/CD 管線
- 使用適用於 AKS 的 GitOps
考量
這些考量能實作 Azure Well-Architected Framework 的支柱,其為一組指導原則,可以用來改善工作負載的品質。 如需更多資訊,請參閱 Microsoft Azure 結構完善的架構。
- 針對 Kubernetes 叢集,您至少需要具有虛擬機器 (VM) SKU DS2_v2 或更大的 3 節點使用者節點集區。
- 使用 Azure 受控磁碟的磁碟區無法跨區域連結。 它們必須位於相同的區域。
- Rook 安裝可能需要 20 到 25 分鐘的時間。 請確保 Ceph 叢集已完全佈建,再繼續進行下一個步驟。
- Jaeger 設定大約需要 5 分鐘。
- Linkerd 大約需要 12 分鐘的時間才能出現在儀表板中。
成本最佳化
成本最佳化是關於考慮如何減少不必要的費用,並提升營運效率。 如需詳細資訊,請參閱成本最佳化支柱的概觀。
您也可以使用 Azure 定價計算機估算費用。 以下是在 Azure 中執行此專案的一些定價考慮。 適用可忽略的頻寬費用。
虛擬機器擴展集
用於 AKS 叢集的 Azure 虛擬機器擴展集 VM 會產生費用。 如需詳細資訊,請參閱虛擬機器擴展集定價.
儲存體
儲存體費用適用於 Rook 安裝所需的每個資料磁碟。 針對此 3 節點 AKS 叢集,Rook 設定會針對每個節點使用兩個資料磁碟:1 GB 磁碟和 200 GB 的磁碟。 如需詳細資訊,請參閱儲存體費用定價。
負載平衡器
與此 AKS 叢集相關聯的 Load Balancer 會產生費用。 如需詳細資訊,請參閱負載平衡器定價。
虛擬網路
AKS 叢集所使用的虛擬網路會產生費用。 如需詳細資訊,請參閱虛擬網路價格。
部署此案例
從 Azure/cloud-native-app GitHub 存放庫部署此案例。 請遵循所提供順序中的設定指示,在您的環境中部署 CNCF 專案應用程式。
此存放庫是社群專案。 它會接受並核准提取要求 (PR),以取得社群的增強功能和修改。