當您在 Azure Kubernetes Service (AKS) 中執行應用程式時,可以調整 Pod、Pod 資源、節點或事件驅動工作負載的規模,以因應需求變化。 AKS 支援手動調整規模、水平 Pod 自動調整程式(HPA)、垂直 Pod 自動調整程式(VPA)、叢集自動調整程式、Kubernetes 事件驅動自動調整(KEDA)、節點自動佈建,以及使用 Azure 容器執行個體(ACI)進行突發擴充。
選擇合適的縮放方法
| 縮放方法 | 最適合用於 | 關鍵指標 | Guide |
|---|---|---|---|
| 水平艙自動調整器(HPA) | 無狀態或可分割的工作負載,需求可變 | CPU 利用率、RPS、佇列深度 | 我應該在 Kubernetes 中何時使用 Horizontal Pod 自動縮放(HPA)? |
| 垂直艙自動定位器(VPA) | 不可平行化的工作負載;適當大小的 Pod 資源要求 | CPU/記憶體資源使用率 | 在 AKS 中使用垂直 Pod 自動調整器 |
| 叢集自動調整器 | Pod 仍在待處理狀態時的節點層級容量 | 待處理的 Pod | 在 AKS 中使用 Cluster Autoscaler |
| 節點自動配置(NAP) | 需要適當規模虛擬機容量的待處理工作負載 | 待處理的 Pod 資源需求 | 節點自動配置概述 |
| KEDA | 事件驅動型工作負載;需要縮放至零 | 佇列長度、事件積壓 | KEDA 附加元件概述 |
| ACI 突發擴展 | 具備突發需求以符合虛擬節點限制的 Linux 工作負載 | 突發需求 | 使用 Azure 容器執行個體建立虛擬節點 |
何時使用每種縮放方法
- 使用 HPA,當你的工作負載可以執行多個相同的複本,且需求會隨 CPU、記憶體或請求速率而波動時。
- 當你的工作負載無法橫向擴展(無法平行化)或需要調整資源請求大小以便更好地排程時,請使用 VPA。
- 當你有預設的節點池,需要根據待定的 Pod 需求新增或移除節點時,可以使用 Cluster Autoscaler。
- 當你想要自動選擇虛擬機 SKU 和節點配置,而不想手動設定節點池時,請使用 NAP。
- 使用 KEDA,當擴縮需要因應外部事件(佇列、資料流、訊息)時,或當您需要縮至零的能力時。
- 當你需要快速擴充 Linux 工作負載的容量時,使用 ACI 突發擴展,而不必等待虛擬機配置(通常 2 到 5 分鐘)。
快速推薦
對於大多數生產工作負載,建議從 AKS 自動開始,它能預先配置 NAP、VPA 和 KEDA。 在 AKS Standard 中,你可以明確啟用並設定這些功能。
手動調整 Pod 或節點
你可以手動擴展 Pod 副本和節點,以測試應用程式對可用資源變化的反應,或維持固定容量。 若要手動擴展,請定義所需的副本或節點數量。 Kubernetes 接著建立或移除 pods,而 AKS 則從適用的節點池中新增或移除節點。
當你縮減節點時,AKS 會呼叫叢集計算類型的相關 Azure Compute API。 對於建立在 虛擬機器擴展集 上的叢集,虛擬機器擴展集 API 會決定要移除哪些節點。 欲了解更多資訊,請參閱 Virtual Machine Scale Sets 常見問題集。
若要開始使用,請參閱:
水平 Pod 自動調整程式
當工作負載可執行多個相同的複本,且需求會波動時,請使用 HPA。 它會根據 CPU 或記憶體、應用程式指標(每秒請求、延遲)或外部佇列與待辦清單指標來擴展。 當複本可能超過現有節點容量時,請使用 AKS Automatic 中預先設定的 NAP 功能,或在 AKS Standard 中設定叢集自動擴展器或 NAP。
不要用相同的 CPU 或記憶體指標來使用 HPA 和 VPA。 要同時使用兩個自動擴展器,請在推薦模式下使用 VPA,或設定 HPA 使用不同的自訂指標。
了解更多: 我應該何時在 Kubernetes 中使用水平艙自動縮放(HPA)?
另見: 在 AKS 中使用垂直艙自動縮放 器來調整艙體 CPU 與記憶體請求的大小。
垂直 Pod 自動調整程式
垂直 Pod 自動擴縮器會分析 Pod 的 CPU 與記憶體使用量,並建議或套用適當的資源請求值。 使用 VPA 來調整無法有效擴展的工作負載大小,例如新增副本,或改善排程與資源利用率。
根據其更新模式,VPA 可在建立 Pod 時套用建議,或使用更新後的資源要求驅逐並重建 Pod。 在允許 VPA 自動套用變更前,請先檢視工作負載可用性需求。
若要開始使用,請參閱 在 AKS 中使用垂直 Pod 自動調整程式。
叢集自動調整器
叢集自動縮放器會根據 pod 排程需求調整節點池中的節點數量。 當 Pod 因節點容量不足而無法排程時,它會新增節點;而當這些工作負載可在其他節點上執行時,則會移除使用率偏低的節點。
叢集自動擴展器常與 HPA 搭配使用。 HPA 會根據工作負載需求調整 pod 複本數量,而 Cluster Autoscaler 則會調整節點容量以容納這些 pod。
若要開始使用,請參閱 在 AKS 中使用叢集自動調整程式。
擴增事件
如果節點集區沒有足夠的運算資源供某個 Pod 使用,該 Pod 會維持在 Pending 狀態。 當叢集自動調整器偵測到因節點池資源限制無法排程的 pod 時,它會增加節點池中的節點數量。 Kubernetes 會在新節點佈建完成並已就緒後,排程處於待處理狀態的 Pod。
虛擬機節點的配置可能需要數分鐘。 對於突然爆發需求的工作負載,可以考慮使用虛擬節點和 Azure 容器執行個體。
縮減事件
叢集自動擴展器會監控節點的利用率不足,並判斷其 pod 是否能在其他節點上運行。 當節點不再需要時,Kubernetes 會重新排程其 pods,而 AKS 則將該節點從節點池中移除。
當 Pod 在節點間移動時,縮減作業可能會中斷工作負載。 執行多個 pod 副本並設定適當的可用性控制,以減少中斷。
Kubernetes 事件驅動自動擴展
Kubernetes 事件驅動自動擴展 (KEDA)是一個開源元件,能根據事件擴展工作負載。 KEDA 以自訂資源擴充 Kubernetes,包括 ScaledObject,描述工作負載應如何回應事件來源或指標。
KEDA 對於處理佇列、串流、訊息或其他事件積壓的工作負載非常有用。 當沒有事件可用時,它可以將支援的工作負載縮減至零,並隨著待辦清單增加而增加副本數量。
不要為了相同的工作負載,將 KEDA ScaledObject 和獨立的 HPA 合併使用。 KEDA 會在內部建立並使用 HPA,使得兩個擴縮器相互競爭。
欲開始,請參閱 KEDA 附加元件概覽。
節點自動佈建
節點自動配置 (NAP)利用開源的 Karpenter 專案,根據待處理的 pod 需求來配置和管理節點。 NAP 會選擇適當的虛擬機器 SKU 與節點數量,以滿足即時工作負載需求。
NAP 從允許的虛擬機 SKU 集合開始,並選擇待處理工作負載的容量。 你可以定義資源限制和排程偏好,來控制節點配置和工作負載分配方式。
控制平面縮放與防護措施
AKS 會根據叢集大小和 API 伺服器資源利用率自動擴展控制平面元件。 此指引適用於AKS自動手槍及AKS標準槍。 對於正式作業或大規模工作負載,請使用標準或進階定價層。
Kubernetes 擁有多維度的規模包絡,每種資源類型對控制層的需求不同。 例如,Secret 通常會被多個控制器以及發出初始 LIST 呼叫的 Pod 監看,因此相較於監看頻率較低的資源,會造成更多的控制平面負載。 在一個維度過度擴展可能會降低其他維度的容量。 例如,執行數十萬個 Pod 會降低控制平面支援的 Pod 突變率。 如需建議,請參閱 Kubernetes 用戶端對大型 AKS 叢集的最佳實務。
要檢查控制平面是否已放大,請檢查 ConfigMap:large-cluster-control-plane-scaling-status
kubectl describe configmap large-cluster-control-plane-scaling-status -n kube-system
這個 ConfigMap 的存在證實了 AKS 會放大控制平面。
控制平面防護措施
如果自動擴展 API 伺服器無法在高負載下穩定,AKS 可以部署管理式 API 伺服器守護。 這項最終保護機制會對非系統用戶端請求進行節流,以防止控制平面變得無回應。 來自 kubelet 等元件、對系統至關重要的 API 伺服器呼叫仍會繼續運作。
要判斷是否已套用受管理 API 伺服器守衛,請檢查 aks-managed-apiserver-guardFlowSchema 和 PriorityLevelConfiguration:
kubectl get flowschemas
kubectl get prioritylevelconfigurations
當 aks-managed-apiserver-guard 同時出現在兩個指令的輸出中時,即表示保護機制已啟用。
如果有這些資源,請參閱 API 伺服器和 etcd 故障排除指南 以獲得緩解指引。
高載至 Azure 容器執行個體 (ACI)
你可以將 AKS 與 Azure 容器執行個體 整合,以應對需求快速增加。 Pod 自動擴展可能會建立出超過現有節點集區所能支援數量的副本,而佈建額外的虛擬機型節點則可能需要數分鐘。 ACI 提供運算容量且不需額外虛擬機節點。
虛擬節點 (由 ACI 支援的虛擬 Kubernetes 節點) 支援 Linux Pods 與節點,並需要使用 Azure CNI 網路的 AKS 叢集。 它們不支援一些常見情境,包括 API 伺服器授權的 IP 範圍、持久磁碟區與持久磁碟申領、IPv6,以及綁定在虛擬節點上的受管理身份。 在使用 ACI 突發縮放前,請先檢視 虛擬節點的限制 。
AKS 虛擬節點 元件基於 Virtual Kubelet ,並將 ACI 呈現為虛擬 Kubernetes 節點。 Kubernetes 可以透過虛擬節點排程合格的 Pod,讓它們以 ACI 容器執行個體形式執行,而非直接在 AKS VM 節點上執行。
虛擬節點會使用與 AKS 叢集同一虛擬網路中的另一個子網路。 此配置提供 AKS 與 ACI 之間的私有網路連接,同時讓 ACI 能作為叢集的邏輯延伸。
相關內容
請參考以下資源,實作符合你工作量的縮放方法:
- 手動調整 Pod 或節點
- 我應該在 Kubernetes 中何時使用 Horizontal Pod 自動縮放(HPA)?
- 在 AKS 中使用垂直 Pod 自動調整器
- 在 AKS 中使用 Cluster Autoscaler
- 使用 KEDA 外掛
- 使用節點自動配置
- 使用 Azure 容器執行個體建立虛擬節點
欲了解更多關於 Kubernetes 與 AKS 核心概念的資訊,請參閱: