Azure Arc 所啟用 AKS 中的應用程式可用性
適用於:Azure Stack HCI 22H2 上的 AKS、Windows Server 上的 AKS
Azure Arc 所啟用 Azure Kubernetes Service (AKS) 提供完全支援的容器平臺,可在 Kubernetes 容器協調流程平臺上執行雲端原生應用程式。 此架構支援執行虛擬化的 Windows 和 Linux 工作負載。
AKS 架構是使用故障轉移叢集和即時移轉所建置,此移轉會自動針對目標 (工作負載) 叢集啟用。 在各種中斷事件期間,裝載客戶工作負載的虛擬機器可以自由移動,卻不會覺察到應用程式停機。 此架構表示傳統企業客戶將舊版應用程式管理為 Azure Stack HCI 或 Windows Server 上的 AKS 單一應用程式,會取得類似 (或比舊版 VM 應用程式上目前遇到的更) 運行時間。
本文說明一些基本概念,適用於想要在已啟用即時移轉的 AKS Arc 上執行容器化應用程式的使用者,以確保應用程式可在中斷期間使用。 Kubernetes 術語,例如「自發性中斷」和「非自發性中斷」,是用來表示在 Pod 中執行的應用程式停機。
即時移轉是什麼?
即時移轉是一種 Hyper-V 功能,可讓您以透明方式將執行中的虛擬機器從一部 Hyper-V 主機移至另一部 Hyper-V 主機,但不會覺察到停機。 實時移轉的主要優點是彈性;執行中的虛擬機不會系結至單一主計算機。 這可讓使用者在解除委任或升級主機之前,先執行例如清空特定虛擬機器主機等動作。 與 Windows 故障轉移叢集配對時,即時移轉可讓您建立高可用性和容錯系統。
Azure Stack HCI 和 Windows Server 上 AKS 的目前架構假設您已在 Azure Stack HCI 叢集環境中啟用即時移轉。 因此,系統會設定即時移轉來建立所有 Kubernetes 背景工作節點 VM。 當發生中斷時,這些節點可以在實體主機中移動,確保平台的高可用性。
當您以單一方式在 Kubernetes 上執行舊版應用程式時,此架構符合您的高可用性需求。 Kubernetes 會管理可用背景工作節點上 Pod 的排程,而即時移轉則會管理可用實體主機上的背景工作節點 VM 排程。
應用程式中斷案例
一項有關在 Azure Stack HCI 和 Windows Server 上的 AKS 之 VM 中執行的應用程式復原時間的比較研究清楚顯示,一般中斷事件對應用程式的影響很小。 三個範例中斷案例如下:
- 套用導致實體機器重新開機的更新。
- 套用包含重建背景工作節點的更新。
- 實體機器的計畫外硬體故障。
注意
這些案例假設應用程式擁有者仍使用 Kubernetes 相似性設定和非相似性設定,以確保能在背景工作節點中正確排程 Pod。
中斷事件 | 在 Azure Stack HCI 的 VM 中執行應用程式 | 在 Azure Stack HCI 或 Windows Server 上的 AKS 上執行 VM 中的應用程式 |
---|---|---|
套用會導致實體機器重新啟動的更新 | 不影響 | 不影響 |
套用涉及重新建立背景工作節點 (或重新啟動 VM) | 不影響 | 不定 |
實體機器的計畫外硬體故障 | 6 - 8 分鐘 | 6 - 8 分鐘 |
套用會導致實體機器重新啟動的更新
在實體主機維護事件中 (例如套用導致主機電腦重新開機的更新),在叢集中執行的應用程式不會受到任何影響。 叢集管理員會清空主機,並確保所有 VM 都會在套用更新之前即時移轉。
套用涉及重新建立背景工作節點的更新
此案例涉及關閉背景工作節點 VM 以執行例行維護。 為了準備更新,叢集管理員會清空並隔離節點,讓所有 Pod 在套用更新之前收回到可用的背景工作角色節點。 更新完成後,背景工作節點會重新加入,並可供排程使用。
注意
應用程式的可用性會有所不同,因為它包含下載基底容器映像所需的時間,特別是針對儲存在公用雲端中的較大映射。 因此,建議您使用小型基底容器映射,而針對 Windows 容器,建議您使用 nano server
基底映射。
實體機器的計畫外硬體故障
在此案例中,其中一個背景工作節點 VM 中裝載舊版應用程式容器/Pod 的實體機器發生非自發性中斷事件。 故障轉移叢集會將主機置於隔離狀態,然後在 6 到 8 分鐘之後,啟動即時將這些 VM 移轉至存活主機的程式。 在此情況下,應用程式停機時間相當於重新啟動主機和背景工作節點 VM 所需的時間。
結論
AKS故障轉移叢集技術的設計目的是要確保 Azure Stack HCI 和 Windows Server 中的運算環境具有高可用性和容錯能力。 不過,應用程式擁有者仍然必須將部署設定為可使用 Deployments
、Affinity Mapping
、RelicaSets
等 Kubernetes 功能,以確保 Pod 在中斷案例中的復原性。