本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
了解區域中斷期間的 Pod 移出
當完全可用區域中斷時,也就是當該可用區域中的所有節點失去與 Kubernetes 控制平面的連線時,Kubernetes 中的節點生命週期控制器Terminating並在可用可用區域中的運作狀態良好的節點上排程新的 Pod。在此期間,受影響的節點會顯示NotReady狀態、排程器防止新的 Pod 放置在這些節點上,而 EndpointSlice 控制器會從服務路由中移除與受損可用區域相關聯的端點,直到恢復連線為止。
對於涉及區域內部分節點故障的案例,其中只有一部分節點變得無法連線,節點生命週期控制器會套用不同的移出行為。如果中斷持續超過設定的容忍期 (預設為五分鐘),中斷連線節點上的 Pod 會標記為 ,Terminating並在可用可用區域中運作狀態良好的節點上排程新的 Pod。
實作 Amazon EKS 區域轉移以提高彈性
Amazon EKS 區域轉移與 Amazon Application Recovery Controller (ARC) 整合,提供一種機制,可在可用區域受損期間主動管理流量。此功能可讓網路流量暫時從運作狀態不佳的可用區域重新導向至運作狀態良好的區域內 AWS 區域 ,以將服務中斷降至最低。
了解區域轉移機制
Amazon EKS 區域轉移會處理東西流量 (叢集內的內部 Pod 通訊)。使用 Application Load Balancer 或 Network Load Balancer 設定區域轉移時,也支援傳入流量路由。此機制透過協調多個 Kubernetes 和 AWS 控制平面元件來安全地重新導向流量,而不會中斷執行中的工作負載。在作用中區域轉移期間,Amazon EKS 會自動執行下列協同動作:
-
節點封鎖:受損可用區域中的所有節點都會進行封鎖。這可防止 Kubernetes 排程器在維護現有工作負載時,在節點上放置新的 Pod。
-
可用區域重新平衡暫停:對於受管節點群組,可用區域重新平衡操作會暫停,而且 Auto Scaling 群組會更新,僅在運作狀態良好的可用區域中啟動新的資料平面節點。這可確保新的容量不會佈建在受損區域中。
-
端點移除:EndpointSlice 控制器會從所有相關 EndpointSlices 移除受損可用區域中的 Pod 端點。這可確保服務探索和負載平衡機制只會將流量路由到在運作狀態良好的可用區域中執行的 Pod。
-
工作負載保留:Amazon EKS 不會終止節點或移出受影響可用區域中的 Pod。它會在受損區域中維持完整容量,因此當區域轉移過期或取消時,流量可以安全地傳回,而不需要額外的擴展操作。
區域轉移啟用方法
根據您的操作模型,您可以選擇兩種方法來啟動區域轉移:
-
透過監控、警示或客戶報告偵測到特定可用區域問題時,手動區域轉移可提供運算子驅動的控制。此方法需要透過 ARC 主控台、 AWS Command Line Interface (AWS CLI) 或區域轉移 APIs明確動作,其中運算子會指定受損的可用區域並定義轉移的過期時間。當團隊具有專用監控和待命功能,並偏好直接控制流量管理決策時,手動輪班是適當的。
-
當 ARC 根據內部遙測和多個 的運作狀態訊號,包括網路指標、Amazon Elastic Compute Cloud (Amazon EC2) 和 Elastic Load Balancing。當指標顯示問題已解決時 AWS 服務, AWS 會自動結束自動轉移,區域自動轉移會授權 AWS 自動啟動轉移。如果您想要以最少的手動介入來達到最高的可用性狀態,建議您使用此方法,因為它可對偵測到的可用區域受損啟用次分鐘的回應。
有效區域轉移的先決條件
若要在可用區域受損期間成功保護應用程式的區域轉移,您必須先架構叢集以實現異地同步備份彈性,才能啟用區域轉移功能:
-
多可用區域節點分佈:在至少三個可用區域佈建工作者節點,以確保一個區域無法使用時有足夠的備援。
-
容量規劃:跨運作狀態良好的可用區域預先佈建足夠的運算容量,以便在從服務中移除一個可用區域時容納完整工作負載,因為在主動中斷期間擴展操作可能會遇到容量不足的情況。
-
Pod 分佈和預先擴展:在所有可用區域部署每個應用程式的多個複本,並預先擴展每個區域中的關鍵系統元件,例如 CoreDNS。這有助於確保在轉移區域後仍有足夠的容量。
區域中斷彈性的建議
-
在叢集建立時啟用區域轉移:對於新的 EKS 叢集,請在透過 Amazon EKS 主控台的初始佈建期間啟用與 ARC 的區域轉移整合 AWS CLI,或基礎設施即程式碼 (IaC) 工具,例如 AWS CloudFormation。使用快速組態建立的 EKS Auto Mode 叢集預設會啟用區域轉移。
-
選取適當的啟用方法:針對需要自動化回應的最大可用性的生產環境選擇區域自動轉移,尤其是在可用區域受損期間停機時間可能帶來重大業務影響的面向客戶應用程式。對於營運團隊偏好在流量轉移之前提供明確核准的環境,或仍在進行應用程式測試和驗證的環境,請使用手動區域轉移。
-
在生產部署之前測試彈性:透過手動啟動測試區域轉移或啟用區域自動轉移實務執行來驗證單一可用區損失下的叢集行為,以確認應用程式在減少可用區域計數的情況下操作時維持可用性、效能仍然可接受且容量足夠。我們強烈建議您進行此測試,以便在實際可用區域受損之前識別組態差距。
-
與負載平衡器組態協調:對於接收外部流量的應用程式,在相關聯的 Application Load Balancer 和 Network Load Balancer 上啟用 ARC 區域轉移,以確保在可用區域受損期間傳入流量和叢集內東西流量一起轉移。此協調可防止外部請求達到運作狀態良好的 Pod,但這些 Pod 無法與轉移區域中的相依性通訊的情況。
-
監控輪班操作:啟用區域輪班後,請設定輪班事件的監控和提醒,包括自動輪班啟用、手動輪班啟動和輪班過期,以保持對流量管理動作及其對應用程式行為的影響的操作可見性。
輪班完成和復原
當區域轉移根據其設定的持續時間過期,或在可用區域受損解決後手動取消時,EndpointSlice 控制器會自動更新所有 EndpointSlices,以重新整合還原可用區域中的端點。當用戶端重新整理端點資訊和建立新的連線時,流量會逐漸返回先前受影響的區域。這可啟用完整的叢集容量使用率,而不需要手動介入或 Pod 重新排程。