Azure Kubernetes Service (AKS) 建議的主動/主動高可用性解決方案概觀
在 Azure Kubernetes Service (AKS) 中建立應用程式並於資源建立過程中選擇 Azure 區域時,這是單一區域應用程式。 如果發生導致區域無法使用的災害,應用程式也會變成無法使用。 如果您在次要 Azure 區域中建立相同的部署,應用程式就不容易受到單一區域災害影響,這可保證商務持續性,且跨區域的任何資料複寫都可讓您復原最近的應用程式狀態。
雖然可透過多種模式為 AKS 解決方案提供復原能力,但本指南概述了 AKS 建議的主動/主動高可用性解決方案。 在此解決方案中,我們會將兩個獨立且相同的 AKS 叢集部署到兩個配對的 Azure 區域,這兩個叢集都會主動為流量提供服務。
注意
下列使用案例可視為 AKS 中的標準做法。 我們已在內部檢閱該使用案例,並與 Microsoft 合作夥伴合作進行審查。
主動/主動高可用性解決方案概觀
這個解決方案依賴兩個設定為主動為流量提供服務的相同 AKS 叢集。 您會在兩個叢集前面放置全域流量管理員 (例如 Azure Front Door),以在這兩個叢集之間散發流量。 叢集的設定必須一致,才能裝載解決方案運作所需的所有應用程式執行個體。
可用性區域是確保 AKS 叢集在相區域內保持高可用性和容錯的另一種方式。 可用性區域可讓您將叢集節點散發到 Azure 區域內的多個隔離位置。 如此一來,即使一個區域由於電源中斷、硬體故障或網路問題而停止運作,叢集仍可繼續執行並為應用程式提供服務。 可用性區域還可以透過減少節點之間的延遲和競爭,提高叢集的效能和可擴縮性。 若要設定 AKS 叢集的可用性區域,您必須在建立或更新節點集區時指定區域號碼。 如需詳細資訊,請參閱什麼是 Azure 可用性區域?
注意
許多區域支援可用性區域。 請考慮使用具有可用性區域的區域,為工作負載提供更高的復原能力和可用性。 如需詳細資訊,請參閱從全區域服務中斷復原。
案例和組態
在裝載無狀態應用程式和/或使用同時部署於這兩個區域的其他技術 (例如水平縮放) 時,最適合實作此解決方案。 如果裝載的應用程式依賴只在一個區域中主動的資源 (例如,資料庫),建議改為實作主動/被動解決方案以節省潛在成本,因為主動/被動的停機時間多於主動/主動。
元件
主動/主動高可用性解決方案會使用許多 Azure 服務。 本節僅涵蓋這個多叢集架構特有的元件。 如需其餘元件的詳細資訊,請參閱 AKS 基準架構。
多個叢集和區域:您可以部署多個 AKS 叢集,每個叢集都位於個別的 Azure 區域中。 在正常作業期間,Azure Front Door 組態會在所有區域之間路由傳送網路流量。 如果一個區域變成無法使用,流量就會路由傳送到使用者載入時間最快的區域。
每個區域的中樞輪輻網路:每個區域 AKS 執行個體都會部署區域中樞輪輻網路組。 Azure 防火牆管理員原則可管理所有區域的防火牆原則。
區域金鑰存放區:您可以在每個區域中佈建 Azure Key Vault,以儲存 AKS 執行個體專屬的敏感值和金鑰,並支援該區域中找到的服務。
Azure Front Door:Azure Front Door 可平衡負載,並將流量路由傳送到位於每個 AKS 叢集前面的區域 Azure 應用程式閘道執行個體。 Azure Front Door 允許使用 [第七層]全域路由。
Log Analytics:區域 Log Analytics 執行個體可儲存區域網路計量和診斷記錄。 共用執行個體則可儲存所有 AKS 執行個體的計量和診斷記錄。
Container Registry:工作負載的容器映像可儲存在受控容器登錄中。 透過此解決方案,單一 Azure Container Registry 執行個體可用於叢集中的所有 Kubernetes 執行個體。 Azure Container Registry 的異地複寫可讓您將映像複寫至選取的 Azure 區域,即使某個區域發生中斷,依然可持續存取映像。
容錯移轉程序
如果一個區域中的某個服務或服務元件無法使用,則流量應該路由傳送到可使用該服務的區域。 多區域架構包含許多不同的失敗點。 在本節中,我們將討論潛在的失敗點。
應用程式 Pod (區域)
Kubernetes 部署物件可建立 Pod 的多個複本 (ReplicaSet)。 如果其中一個無法使用,則會在其餘複本之間路由傳送流量。 Kubernetes ReplicaSet 會嘗試使指定數目的複本正常執行。 如果一個執行個體停止運作,應重新建立新的執行個體。 活躍度探查可檢查 Pod 中執行的應用程式或程序的狀態。 如果 Pod 沒有回應,活躍度探查會移除該 Pod,將強制 ReplicaSet 建立新的執行個體。
如需詳細資訊,請參閱 Kubernetes ReplicaSet。
應用程式 Pod (全域)
若整個區域變得無法使用,叢集中的 Pod 將無法為要求提供服務。 在這種情況下,Azure Front Door 執行個體會將所有流量路由傳送到其餘健康的區域。 這些區域中的 Kubernetes 叢集和 Pod 將繼續為要求提供服務。 若要對剩餘叢集增加的流量和要求進行補償,請記住下列指導:
- 確保網路和計算資源的大小正確,可承受因區域容錯移轉而導致的流量突增。 例如,使用 Azure 容器網路介面 (CNI) 時,請確保您有一個子網路可支援具有尖峰流量負載的所有 Pod IP。
- 使用水平 Pod 自動調整程式來增加複本計數,以針對增加的區域需求進行補償。
- 使用 AKS 叢集自動調整程式來增加 Kubernetes 執行個體節點計數,以針對增加的區域需求進行補償。
Kubernetes 節點集區 (區域)
計算資源有時候可能會發生局部故障,例如單一 Azure 伺服器機架中的電源無法使用。 若要保護 AKS 節點以免變成單點區域失敗,請使用 Azure 可用性區域。 可用性區域可確保每個可用性區域中的 AKS 節點實際獨立於另一個可用性區域中定義的節點。
Kubernetes 節點集區 (全域)
在完全區域失敗中,Azure Front Door 會將流量路由傳送到其餘健康的區域。 同樣地,請務必針對剩餘叢集增加的流量和要求進行補償。
容錯移轉測試策略
雖然 AKS 中目前沒有機制可基於測試目的關閉整個部署區域,但 Azure Chaos Studio 提供了在叢集上建立混沌實驗的功能。
下一步
如果考慮使用不同的解決方案,請參閱下列文章: