Azure Kubernetes Service 中的可靠性 (AKS)

Azure Kubernetes 服務(AKS) 是一項受管理的容器編排服務,簡化了 Kubernetes 的部署、管理與運作。

當您使用 Azure 時, 可靠性是共同的責任。 Microsoft 提供一系列功能來支援韌性和復原。 您有責任瞭解這些功能在您使用的所有服務中如何運作,並選取符合業務目標和正常運作時間目標所需的功能。

本文說明如何讓 Azure Kubernetes Service(AKS)具備多種潛在中斷與問題的韌性,包括暫時性故障、可用性區域中斷及區域中斷。 同時說明如何利用備份來恢復其他類型的問題,並強調關於 Azure Kubernetes 服務(AKS)服務水準協議(SLA)的一些重要資訊。

生產部署建議

如需如何在 AKS 中部署可靠生產工作負載的建議,請參閱下列文章:

可靠性架構概觀

當您建立 AKS 叢集時,Azure 平台會自動建立並設定:

  • 控制平面,其中包含 API 伺服器、etcd、排程器以及管理工作負載所需的其他 Pod。

  • 您的訂用帳戶的系統節點集區,用於裝載在 kube-system 命名空間中執行的附加元件和其他 Pod。

完成此初始節點集區設定之後,您可以為自己的使用者工作負載 新增或刪除節點 集區。 AKS 不會直接管理節點集區的可靠性,您必須確保您的工作負載具備應對基礎設施故障的復原能力。

顯示 Kubernetes 控制平面和節點元件的圖表,包括系統節點集區和使用者節點集區。

復原是您與Microsoft之間的共同責任。 AKS 是計算服務,可管理叢集可靠性的某些層面,但您必須負責管理其他層面。

  • Microsoft 管理 AKS 的控制平台及其他受管理的組件。

  • 這是您的責任:

    • 應定義元件的配置方式,包括節點集區和連接到服務的負載平衡器,以符合可靠性需求。 定義元件之後,Microsoft接著代表您部署及管理這些元件。

    • 管理 AKS 叢集以外的任何元件,包括記憶體和資料庫。 確認這些元件符合您的可靠性需求。 當您部署工作負載時,確保其他 Azure 元件也根據最佳實踐進行設定,以提高韌性。

對瞬態故障的彈性

暫時性錯誤是元件中的短暫間歇性失敗。 它們經常出現在雲端等分散式環境中,而且是作業的一般部分。 暫時性錯誤會在短時間內自行修正。 請務必確保您的應用程式能妥善處理暫時性錯誤,通常透過重試受影響的請求來進行。

所有雲端裝載的應用程式在與任何雲端裝載的 API、資料庫和其他元件通訊時,都應該遵循 Azure 暫時性錯誤處理指引。 如需詳細資訊,請參閱 處理暫時性錯誤的建議。

當您使用 AKS 時,可能會因為各種原因而發生暫時性錯誤,包括應用程式當機、Pod 調整和平衡作業、節點修補,以及硬體或網路問題等暫時基礎結構失敗。

無法排除所有暫時性錯誤,因此存取 AKS 裝載應用程式的用戶端應該準備好重試失敗的要求,並遵循其他暫時性錯誤處理建議。 您可以將暫時性錯誤的可能性降到最低,並避免或減輕其可能造成的停機時間,方法是遵循部署中的 Kubernetes 和 Azure 最佳做法。

  • 在 Pod YAML 中設定 Pod 中斷預算 (PDB),以指定您在指定時間必須處於 Ready 狀態的 Pod 數目。 當您設定 PDB 時,AKS 會在執行封鎖和清空節點的作業時確保複本的最低可用性。 如果在升級等過程中無法滿足 PDB,則 Pod 會繼續運作,而且作業可能會失敗。 如需詳細資訊,請參閱 PDB。
  • 使用 maxUnavailable 來定義在指定時間無法使用的複本數目上限。 例如,當您執行滾動重新啟動時,AKS 可確保在指定的時間內被替換的 Pod 數不超過 maxUnavailable。 如需詳細資訊,請參閱 maxUnavailable。
  • 遵循部署最佳做法。 Pod 複本也可能因為應用程式問題而失敗。 如需詳細資訊,請參閱 AKS 叢集可靠性 的部署層級最佳做法 。

備註

如果你希望 AKS 驗證你的部署是否遵循最佳實務,並提供阻擋或警告通知,你可以使用 部署防護措施。 部署保護是受控供應專案,可協助您在程式代碼部署至叢集之前強制執行產品最佳做法。

對可用性區域故障的抵抗力

可用性區域 是 Azure 區域內物理上獨立的資料中心群組。 當某個區域發生故障時,服務可以切換至其他剩餘的區域。

當您將 AKS 叢集部署到支援可用性區域的區域時,不同的元件需要不同類型的設定。

根據預設,AKS 控制平面具有區域復原性。 如果區域失敗,控制平面不需要任何設定或管理才能達到復原能力。 不過,當區域失敗時,控制平面復原不足以讓叢集維持運作。 針對系統節點集區和您部署的任何用戶節點集區,您必須啟用可用性區域支援,以協助確保您的工作負載能夠復原可用性區域失敗。

需求

區域支援: 你可以在任何支援可用性區域的區域部署區域韌性 AKS 叢集。

考慮事項

若要增強區域中 AKS 生產工作負載的可靠性與復原能力,您必須設定 AKS 以進行區域備援,方法是進行下列設定:

  • 部署多個複本。 Kubernetes 會根據節點標籤,將 Pod 分散到各個節點。 若要將工作負載分散到區域,您必須部署 Pod 的多個複本。 例如,如果您為節點集區設定了三個區域,但僅為您的 Pod 部署了單一複本,那麼您的部署就不具備區域復原性。

  • 啟用自動擴展。 Kubernetes 節點集區提供手動和自動調整選項。 透過使用手動調整,您可以根據需要新增或刪除節點,而擱置中的 Pod 會等到您擴增節點集區後才會執行。透過使用手動擴展,您可以根據需要新增或刪除節點,並且待處理的 Pod 將等待,直到您擴大節點集區。 AKS 管理的調整功能會使用叢集自動調整程式或節點自動佈建 (NAP)。 AKS 會根據您的訂用帳戶中 SKU 配額和容量的限制,根據 Pod 的需求,靈活地擴展或縮減節點池的數量。 此方法有助於確保您的 Pod 被排程在可用性區域中的可用節點上。

  • 設定 Pod 拓撲限制。 使用 Pod 拓撲散佈條件約束來控制 Pod 如何分散到不同的節點或區域。 條件約束可協助您達成高可用性、韌性和有效率的資源使用。 如果您想要嚴格跨區域分散 Pod,您可以設定條件約束來強制 Pod 進入擱置狀態,以維持跨區域的 Pod 平衡。 如需詳細資訊,請參閱 Pod 拓撲散佈條件約束 (英文)。

  • 設定區域彈性網路功能。 如果您的 Pod 服務外部流量,請使用 Azure 應用程式閘道、 Azure Load Balancer 或 Azure Front Door 等服務來設定叢集網路架構。

  • 確定相依性具有區域復原性。 大部分的 AKS 應用程式會使用其他服務進行記憶體、安全性或網路功能。 請確定您檢閱這些服務的區域復原建議。

費用

在 AKS 中啟用可用性區域支援不需額外費用。 您需要為部署在可用性區域中的虛擬機 (VM) 和其他資源付費。

設定可用性區域支援

  • 建立具有可用性區域支援的新 AKS 叢集: 若要設定可用性區域支援,請參閱 建立使用可用性區域的 Azure Kubernetes Service (AKS) 叢集。
  • 遷移: 建立叢集之後,您無法啟用可用性區域支援。 相反地,您必須建立已啟用可用性區域支援的新叢集,並刪除現有的叢集。
  • 停用可用性區域支援: 建立叢集之後,您無法停用可用性區域支援。 您需要改為建立一個停用可用性區域支援的新叢集並刪除現有的叢集。

所有區域都狀況良好時的行為

本節說明當 AKS 叢集配置為支援可用性區域且所有可用性區域皆正常運作時,可預期的情況。

  • 區域之間的流量路由: 當您部署使用可用性區域的 AKS 叢集時,請務必確保您的網路元件也具備區域韌性。 視您使用的負載平衡器和其他網路元件而定,您可能需要明確設定元件,以將流量路由傳送至正確區域中的正確節點,以及響應區域中斷。 如需詳細資訊,請參閱 AKS 的區域復原考慮。

  • 區域間的資料複製: 如果你運行無狀態工作負載,應該使用受管的 Azure 服務,例如 Azure 資料庫、 Azure Managed Resis 或 Azure 儲存體 來儲存應用程式資料。 您可以使用這些服務來協助確保您的流量可以跨節點和區域移動,而不會造成資料遺失或影響用戶體驗的風險。 您可以使用 Kubernetes 部署 (英文)、服務 (英文) 和健康情況探查 (英文) 來管理無狀態 Pod,並甚至確保跨區域散發。

    如果您需要使用 Azure 磁碟在叢集中儲存狀態,請使用 Azure 區域備援記憶體來協助確保您的數據會復寫到多個可用性區域。 如需詳細資訊,請參閱 根據應用程式需求選擇正確的磁碟類型。

區域失敗期間的行為

本節介紹當 AKS 叢集配置了可用區支援時,如果發生可用區中斷會發生什麼情況。

  • 偵測與回應:當區域發生中斷時,控制平面會自動進行容錯移轉。 如果您的節點集區使用可用性區域,並遵循區域復原最佳做法,那麼您可以預期 AKS 會在可運作的區域中啟動節點和複本。 當您使用叢集自動調整程式或 NAP 等受控解決方案時,AKS 會自動執行這項工作。 如果沒有自動調整,節點和複本會維持處於 待定 狀態,並等候手動方式擴展節點集區。

    AKS 也會嘗試在狀況良好的區域之間重新平衡 Pod。 如果您選擇在區域關閉的情況下手動擴增節點集區,則當狀況良好的區域中沒有可用的節點時,您的 Pod 可能會維持在擱置中的狀態。 在其餘可用區域中,可以進行擴展,惟須受限於所使用虛擬機型號(VM SKU)的配額和容量可用性。

  • 通知:Microsoft 不會在區域關閉時自動通知您。 不過,你可以用Azure 資源健康狀態監控單一資源的健康狀況,並設定資源健康狀態警示來通知你問題。 你也可以使用 Azure 服務健康狀態 來了解整體服務的健康狀況,包括任何區域故障,並設定 服務健康警示 來通知你問題。

    您也可以使用節點或 Pod 健全狀況指標來監控節點和 Pod 的健全狀況。

  • 作用中要求: 任何作用中的要求都可能會遇到中斷。 某些要求可能會失敗,而您的工作負載容錯移轉至另一個區域時,延遲也可能會增加。

  • 預期的數據遺失: 如果您使用 Azure 磁碟在叢集中儲存狀態,並使用區域備援記憶體,則區域失敗不會造成任何數據遺失。

  • 預期的停機時間: 如果您正確設定叢集和 Pod 的區域復原能力,則區域失敗不預期會導致 AKS 工作負載停機。

  • 流量重新路由傳送:負載平衡器會將新的傳入要求重新路由傳送至在狀況良好的節點上執行的 Pod。

如需詳細資訊,請參閱 AKS 的區域復原考慮。

區域復原

當可用性區域復原時,容錯回復行為會取決於元件:

  • 控制平面: AKS 會自動在所有可用性區域恢復控制平面作業。 不需要手動介入。

  • 節點集區和節點:容錯回復後,節點會立即保留在先前狀況良好的區域中,而不會在復原的區域中還原。 不過,下次您執行節點調整作業時 (例如當您相應擴增節點集區時),節點集區可以在復原的區域中建立節點。

  • Pod:容錯回復後,Pod 會立即繼續在其目前執行的節點上執行。 當建立新的 Pod 或重新建立現有的 Pod 時,它們有資格使用復原區域中的節點。

  • 存儲: 連結至 Pod 的任何記憶體會根據 區域備援記憶體的運作方式進行復原。

測試區域失敗

您可以使用下列方法來測試可用性區域失敗的復原能力:

對區域範圍故障的復原能力

AKS 叢集是單一區域資源。 如果區域無法使用,您的 AKS 叢集也無法使用。

客製化多區域韌性解決方案

如果您需要將 Kubernetes 工作負載部署到多個 Azure 區域,您有兩個選項可管理這些叢集的協調流程。

  • 如果您想要更簡單且受控的體驗,請使用 Azure Kubernetes Fleet Manager 。 藉由使用 Azure Kubernetes Fleet Manager,您可以:

    • 以單一單位管理一組 AKS 叢集,而這些叢集可以分散到多個 Azure 區域。

    • 自動化叢集管理的特定層面,例如叢集和節點映射升級。

    • 使用流量分配功能來將流量分散到各個叢集中,並在區域無法使用時自動進行容錯移轉。

  • 如果您的工作負載需要更細微地控制區域間故障轉移的不同元件,請使用手動主動-主動或主動-被動部署模型來協調故障轉移。 如需詳細資訊,請參閱 AKS 的 HA 和 DR 概觀。

備份與還原

Azure 備份具有擴充功能,可用來備份連結至叢集的 AKS 叢集資源和永續性磁碟區。 備份保存庫會透過擴充功能與 AKS 叢集通訊,以執行備份和還原作業。

如果您的 AKS 叢集位於 配對的區域,您可以將備份設定為儲存在異地備援記憶體中。 您可以將異地備援備份還原到配對的地區。

如需詳細資訊,請參閱下列文章:

針對大部分的解決方案,您不應該只依賴備份。 請改用本指南中所述的其他功能來支持復原需求。 不過,備份可防範其他方法未發生的一些風險。 欲了解更多資訊,請參閱冗餘、複寫與備份是什麼?

努力使用無狀態叢集,以將備份的需求降到最低。 將資料儲存在外部記憶體系統和資料庫中,而不是在您的叢集中。

服務維護的韌性

AKS 會在叢集上執行維護,包括叢集和節點映像的更新。 為了確保 Kubernetes 即使在升級期間仍可維護服務生產流量所需的 Pod 執行個體數目下限,您應該將 Pod 設定為使用 Pod 中斷預算。

為了減少關鍵時段的服務中斷,AKS 會提供控件,讓您能夠指定計劃性維護時間。 若要深入瞭解,請參閱 使用計劃性維護來排程和控制 Azure Kubernetes Service 叢集的升級。

服務等級協定

Azure 服務的服務等級協定 (SLA) 描述服務的預期可用性,以及解決方案必須符合才能達到該可用性預期的條件。 如需詳細資訊,請參閱 在線服務的 SLA。

AKS 提供三個叢集管理的定價層:免費、標準和進階。 免費層可讓您使用 AKS 來測試工作負載。 標準和進階層是針對生產工作負載所設計。 當您部署已啟用可用性區域的 AKS 叢集時,SLA 中定義的運行時間百分比會增加。 不過,只有在您在標準或進階定價層中部署叢集時,才會套用 SLA。