在 Azure Kubernetes Service (AKS) 中調整應用程式的選項
在 Azure Kubernetes Service 中執行應用程式時,您可能需要增加或減少計算資源的數量。 當您變更您擁有的應用程式執行個體數目時,您可能需要變更基礎 Kubernetes 節點的數目。 您可能也需要佈建大量的其他應用程式執行個體。
本文將介紹核心 AKS 應用程式的擴縮概念,包括手動擴縮 Pod 或節點 (部分機器翻譯)、使用水平 Pod 自動擴縮程式 (部分機器翻譯)、使用叢集自動擴縮程式 (部分機器翻譯),以及與 Azure 容器執行個體 (ACI) (部分機器翻譯) 整合。
手動調整 Pod 或節點
您可手動調整您的複本或 Pod 與節點,來測試您的應用程式如何回應可用資源和狀態中的變更。 手動縮放資源可讓您定義一組資源,以維護固定成本,例如節點數目。 若要手動調整,您可以定義複本或節點計數。 Kubernetes API 接著會根據該複本或節點計數來排程建立更多 Pod 或清空節點。
相應減少節點時,Kubernetes API 會呼叫繫結至叢集所用計算類型的相關 Azure 計算 API。 例如,針對建置於虛擬機器擴展集之上的叢集,虛擬機器擴展集 API 會決定要移除的節點。 若要深入了解如何在縮小時選取要移除的節點,請參閱虛擬機器擴展集常見問題集。
若要開始手動擴縮節點,請參閱在 AKS 叢集中手動調整節點 (部分機器翻譯)。 若要手動調整 Pod 數目,請參閱 kubectl scale 命令 (英文)。
水平 Pod 自動調整程式
Kubernetes 會使用水平 Pod 自動調整程式 (HPA) 來監視資源需求,並自動調整 Pod 的數目。 根據預設,HPA 會每隔 15 秒檢查計量 API 是否有複本計數的任何必要變更,而計量 API 每隔 60 秒就會從 Kubelet 擷取資料。 因此,HPA 每隔 60 秒更新一次。 當需要變更時,複本的數量會據以增加或減少。 HPA 會與 AKS 叢集搭配使用,其中已部署適用於 Kubernetes 1.8 版和更新版本的計量伺服器。
當您針對指定的部署設定 HPA 時,需定義可執行複本的最小和最大數目。 您也會定義計量,以監視和根據任何縮放決策,例如 CPU 使用量。
若要開始使用 AKS 中的水平 Pod 自動擴縮程式,請參閱自動調整 AKS 中的 Pod (部分機器翻譯)。
縮放事件的冷卻
由於 HPA 會每 60 秒有效地更新一次,因此在進行另一項檢查之前,先前的縮放事件可能無法順利完成。 此行為可能會導致 HPA 在先前的縮放事件收到應用程式工作負載之前變更複本數目,以及相應調整的資源需求。
若要將競爭事件降到最低,則會設定延遲值。 這個值會定義 HPA 必須在調整事件之後等候多久,才能觸發另一個縮放事件。 此行為可讓新複本計數生效,以及讓計量 API 反映散發的工作負載。 從 Kubernetes 1.12 起,擴大事件沒有延遲 (英文),不過,縮小事件的延遲預設為「5 分鐘」。
叢集自動調整程式
為了回應變更的 Pod 需求,Kube 叢集自動調整程式會根據節點集區中要求的計算資源調整節點數目。 根據預設,叢集自動調整程式每隔 10 秒會檢查 計量 API 伺服器,找出節點計數中任何必要的變更。 如果叢集自動調整程式判斷需要變更,則您 AKS 叢集中的節點數目會據以增加或減少。 叢集自動調整程式可與執行 Kube 1.10.x 或更高版本的 Kube 已啟用 RBAC 的 AKS 叢集搭配運作。
叢集自動調整程式通常會與水平 Pod 自動調整程式一起使用。 結合使用時,水平 Pod 自動調整程式會根據應用程式需求增加或減少 Pod 數目,而叢集自動調整程式會調整節點數目以執行更多 Pod。
若要在 AKS 中開始使用叢集自動擴縮程式,請參閱 AKS 上的叢集自動調整程式 (部分機器翻譯)。
擴增事件
若節點沒有足夠的計算資源來執行要求的 Pod,該 Pod 便無法完成排程的程序。 除非節點集區中有更多可用的計算資源,否則 Pod 無法啟動。
當叢集自動擴縮程式注意到因節點集區資源限制而無法排程的 Pod 時,會增加節點集區內的節點數目,以提供額外的計算資源。 當節點成功部署且可在節點集區內使用時,接著就會將 Pod 排程在節點上執行。
如果您的應用程式需要快速擴縮,某些 Pod 可能會維持在等候排程的狀態,直到有更多由叢集自動擴縮程式部署的節點可以接受排程的 Pod 為止。 針對具有高度高載需求的應用程式,您可以使用虛擬節點與 Azure 容器執行個體來進行調整。
縮減事件
叢集自動調整程式也會監視 Pod 排程狀態,以找出最近未收到新排程要求的節點。 此案例表示節點集區的計算資源比必要資源多,而且可以減少節點數目。 依預設,若節點超過 10 分鐘不再使用的閾值,則會排程將此節點刪除。 發生此情況時,Pod 會排程為在節點集區內的其他節點上執行,且叢集自動調整程式會減少節點的數目。
當叢集自動調整程式在減少節點的數目時,會將 Pod 排程在不同節點上,所以您的應用程式可能會遇到一些中斷情況。 若要儘量減少中斷的情況,請避免使用單一 Pod 執行個體的應用程式。
Kubernetes 事件導向自動調整 (KEDA)
Kubernetes 事件驅動自動調整 (KEDA) (英文) 為開放原始碼元件,用於工作負載的事件驅動自動調整。 該元件會根據收到的事件數目動態調整工作負載。 KEDA 會使用自訂資源定義 (CRD) (稱為 ScaledObject) 來擴充 Kubernetes,以描述應用程式應如何調整以回應特定流量。
在工作負載接收流量高載或處理大量資料的案例中,KEDA 調整功能非常有用。 此功能有別於水平 Pod 自動調整程式,因為 KEDA 為事件驅動並根據事件數目進行調整,而 HPA 則為計量驅動並根據資源使用率 (例如 CPU 和記憶體) 進行調整。
若要開始使用 AKS 中的 KEDA 附加元件,請參閱 KEDA 概觀。
高載至 Azure 容器執行個體 (ACI)
若要快速調整 AKS 叢集規模,您可以與 Azure 容器執行個體 (ACI) 整合。 Kubernetes 具有內建元件來調整複本和節點計數規模。 不過,如果您的應用程式需要快速擴縮,水平 Pod 自動擴縮程式可能會排程比節點集區中現有計算資源所能提供的還要多的 Pod。 如果設定完成,則這種情況可能會觸發叢集自動調整程式 (部分機器翻譯),在節點集區中部署更多節點,但那些節點可能需要幾分鐘的時間才能成功佈建,並允許 Kubernetes 排程器在那些節點上執行 Pod。
ACI 可讓您快速部署容器執行個體,而沒有額外的基礎結構負荷。 當您與 AKS 連線時,ACI 會變成 AKS 叢集的安全邏輯延伸模組。 以 Virtual Kubelet (英文) 為基礎的虛擬節點 (部分機器翻譯) 元件會安裝在您的 AKS 叢集中,將 ACI 呈現為虛擬的 Kubernetes 節點。 Kubernetes 接著可以排程透過虛擬節點以 ACI 執行個體形式執行的 Pod,而不是直接在 AKS 叢集中作為 VM 節點上的 Pod。
您的應用程式不需要任何修改,即可使用虛擬節點。 您的部署可以跨 AKS 和 ACI 且在沒有延遲的情況下調整規模,因為叢集自動調整器會在 AKS 叢集中部署新的節點。
虛擬節點會部署到與您 AKS 叢集相同虛擬網路中的其他子網路。 此虛擬網路設定會保護 ACI 與 AKS 之間的流量。 如同 AKS 叢集,ACI 執行個體是安全的邏輯計算資源,與其他使用者隔離。
下一步
若要開始使用擴縮應用程式,請參閱下列資源:
- 手動調整 Pod 或節點
- 使用水平 Pod 自動擴縮程式 (部分機器翻譯)
- 使用叢集自動調整程式
- 使用 Kubernetes 事件驅動自動調整 (KEDA) 附加元件
如需有關 Kubernetes 及 AKS 核心概念的詳細資訊,請參閱下列文章: