共用方式為


協調微服務和多容器應用程式的高延展性和可用性

提示

本內容節錄自《容器化 .NET 應用程式的 .NET 微服務架構》(.NET Microservices Architecture for Containerized .NET Applications) 電子書,可以在 .NET Docs 上取得,或免費下載可供離線閱讀的 PDF。

《容器化 .NET 應用程式的 .NET 微服務架構》電子書封面縮圖。

如果應用程式以微服務為基礎,或只是分散於多個容器,則必須對生產環境就緒應用程式使用協調器。 如之前所介紹,以微服務為基礎的方法中,每個微服務都擁有自己的模型和資料,因此從開發和部署的角度來看,它是非常自主的。 但是,即使您擁有的是由多個服務組成的傳統應用程式 (例如 SOA),您也會使用多個容器或服務來組成單一商務應用程式,而這些項目都必須部署為分散式系統。 擴增和管理這幾種系統很複雜。因此,如果想要有生產環境就緒和可調整的多容器應用程式,則絕對需要協調器。

圖 4-23 說明由多個微服務 (容器) 所組成之應用程式叢集中的部署。

圖表顯示叢集中組成的 Docker 應用程式。

圖 4-23: 容器叢集

每個服務執行個體各使用一個容器。 Docker 容器是「部署的單位」,而容器是 Docker 映像的執行個體。 一部主機可處理多個容器。 看起來像邏輯方法。 不過,您該如何處理這些組成應用程式的負載平衡、路由及協調作業?

如果是一部主機上單一映像執行個體的管理需求,可靠單一 Docker 主機中的單純 Docker 引擎來滿足,但若是更複雜的分散式應用程式,它就無法滿足部署於多個主機上多個容器的管理需求。 在大部分情況下,您需要的管理平台應能自動啟動容器、向外延展容器 (其中每個映像具有多個執行個體)、請視需要暫停或關閉它們,最好也能控制資源 (例如網路和資料儲存體) 的存取方式。

如果您不只要管理個別容器或組成簡單的應用程式,而是要進展到具有微服務的大型企業應用程式,就必須採用協調流程和叢集平台。

從架構和開發角度來看,如果您要建置由微服務應用程式所組成的大型企業應用程式,請務必了解下列可支援進階案例的平台和產品:

叢集和協調器: 當您要跨許多 Docker 主機向外延展應用程式時 (亦即大型微服務應用程式),您必須簡化基礎平台的複雜性,並以單一叢集的形式來管理其中的所有主機。 而這正是容器叢集和協調器所提供的功能。 Kubernetes 是協調器的一個範例,可以透過 Azure Kubernetes Service 在 Azure 中取得。

排程器:「排程」可讓系統管理員啟動叢集中的容器,因此這些排程器也會提供 UI。 叢集排程器有下列職責:有效率地使用叢集的資源、設定使用者所提供的條件約束、跨節點或主機有效進行容器負載平衡,以及維持容錯性並保障高可用性。

叢集與排程器的概念密切相關,因此不同廠商所提供的產品通常會兩組功能都提供。 下列清單顯示您可以針對叢集和排程器選擇的最重要平台和軟體。 一般來說,Azure 這類公用雲端都會提供這些協調器。

用於容器叢集、協調流程和排程的軟體平台

平台 描述
Kubernetes
Kubernetes 標誌的影像。
Kubernetes 是開放原始碼產品,可提供叢集基礎結構、容器排程到容器協調等功能。 它可讓您跨主機叢集自動化部署、規模調整及應用程式容器的作業。

Kubernetes 提供以容器為中心的基礎結構,讓您將應用程式容器分組為邏輯單元,以便於管理及探索。

比起 Windows,Kubernetes 在 Linux 中相對成熟穩定。
Azure Kubernetes Service (AKS)
Azure Kubernetes Service 標誌的影像。
AKS 是 Azure 中的受控 Kubernetes 容器協調流程服務,可簡化 Kubernetes 叢集的管理、部署和作業。
Azure 容器應用程式
Azure 容器應用程式服務標誌的影像。
Azure 容器應用程式是一種受控的無伺服器容器服務,可大規模建置和部署新式應用程式。

在 Microsoft Azure 中使用容器協調器

許多雲端廠商都支援 Docker 容器以及 Docker 叢集和協調流程,包括 Microsoft Azure、Amazon EC2 Container Service 和 Google Container Engine。 Microsoft Azure 透過 Azure Kubernetes Service (AKS),提供 Docker 叢集和協調器支援。

使用 Azure Kubernetes Service

Kubernetes 叢集裝載了多部 Docker 主機,並將其公開為單一虛擬 Docker 主機,因此您可以部署多個容器到該叢集中,並以任意容器執行個體數目向外延展。 叢集會處理所有複雜的管理配置作業,例如延展性、健康狀態等等。

AKS 可讓您以簡化的方式,在 Azure 中建立、組態及管理預先設定為執行容器化應用程式的虛擬機器叢集。 AKS 使用熱門開放原始碼排程和協調流程工具的最佳化組態,可讓您使用現有技能,或運用大量且不斷成長的社群專業知識,在 Microsoft Azure 上部署及管理容器化應用程式。

Azure Kubernetes Service 特別針對 Azure,提供熱門 Docker 叢集開放原始碼工具和技術的最佳化組態。 這樣的開放解決方案,可賦予您容器和應用程式組態的可攜性。 您只要選取主機大小和數目,其餘工作全都由協調器工具和 AKS 處理。

圖表顯示 Kubernetes 叢集結構。

圖 4-24: Kubernetes 叢集的簡化結構和拓撲

如您在圖 4-24 中所見,Kubernetes 叢集結構中的主要節點 (VM) 會控制大部分的叢集協調,而且您可以將容器部署到其餘節點。從應用程式角度來看,這些節點是以單一集區來管理,並可讓您擴充到數以千計或甚至數以萬計的容器。

Kubernetes 的開發環境

在開發環境中,Docker 於 2018 年 7 月宣佈 Kubernetes 也可以在單一開發電腦 (Windows 10 或 macOS) 上執行,只要安裝 Docker Desktop 即可。 您稍後可以部署到雲端 (AKS) 來進一步執行整合測試,如圖 4-25 所示。

圖表顯示開發電腦上的 Kubernetes 之後部署到 AKS

圖 4-25: 在開發電腦和雲端中執行 Kubernetes

開始使用 Azure Kubernetes Service (AKS)

若要開始使用 AKS,請從 Azure 入口網站或使用 CLI 部署 AKS 叢集。 如需在 Azure 中部署 Kubernetes 叢集的詳細資訊,請參閱部署 Azure Kubernetes Service (AKS) 叢集

隨附於 AKS 預設安裝的軟體均不會收取任何費用。 所有預設選項都是使用開放原始碼軟體來實作。 AKS 可供 Azure 中的多部虛擬機器使用。 您僅需支付所選計算執行個體的費用,以及其他已使用的基礎結構資源費用,例如儲存體和網路功能。 AKS 本身沒有任何累加的費用。

Kubernetes 的預設生產部署選項是使用 Helm 圖表,下一節將會介紹此圖表。

使用 Helm 圖表部署到 Kubernetes 叢集中

將應用程式部署到 Kubernetes 叢集時,您可以搭配採用原生格式的部署檔案 (.yaml 檔案) 使用原始 kubectl.exe CLI 工具,如上一節中所述。 不過,對於更複雜的 Kubernetes 應用程式 (例如部署複雜的微服務應用程式時),則建議使用 Helm

即便是最複雜的 Kubernetes 應用程式,Helm 圖表也能協助您定義、設定版本、安裝、共用、升級或復原。

此外,建議使用 Helm 還有一個原因,那就是因為 Azure 中的其他 Kubernetes 環境 (例如 Azure Dev Spaces) 也是以 Helm 圖表為依據。

Helm 是由 Cloud Native Computing Foundation (CNCF) 以及 Microsoft、Google、Bitnami 和 Helm 參與者社群共同維護。

如需 Helm 圖表和 Kubernetes 的進一步實作資訊,請參閱 Using Helm Charts to deploy eShopOnContainers to AKS (使用 Helm 圖表將 eShopOnContainers 部署到 AKS) 的文章。

其他資源