在 Azure Kubernetes Service (AKS) 中調整應用程式的選項

在 Azure Kubernetes Service 中執行應用程式時,您可能需要增加或減少計算資源的數量。 當您變更您擁有的應用程式執行個體數目時,您可能需要變更基礎 Kubernetes 節點的數目。 您可能也需要布建大量的其他應用程式實例。

本文介紹核心 AKS 應用程式調整概念,包括使用水準 Pod 自動調整程式、使用叢集自動調整程式,以及與 Azure 容器執行個體 整合的 Pod 或節點。

手動調整 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 可與部署 Kubernetes 1.8 版及更新版本的 Metrics Server 的 AKS 叢集搭配運作。

Kubernetes 水準 Pod 自動調整

當您針對指定的部署設定 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 叢集搭配運作。

Kubernetes 叢集自動調整程式

叢集自動調整程式通常會與水平 Pod 自動調整程式一起使用。 結合使用時,水平 Pod 自動調整程式會根據應用程式需求增加或減少 Pod 數目,而叢集自動調整程式會調整節點數目以執行更多 Pod。

若要開始使用 AKS 中的叢集自動調整程式,請參閱 AKS 上的叢集自動調整程式。

擴增事件

若節點沒有足夠的計算資源來執行要求的 Pod,該 Pod 便無法完成排程的程序。 除非節點集區中有更多可用的計算資源,否則 Pod 無法啟動。

當叢集自動調整程式注意到因為節點集區資源限制而無法排程的Pod時,會增加節點集區內的節點數目,以提供額外的計算資源。 成功部署節點並可在節點集區內使用時,Pod 會排程在節點集區上執行。

如果您的應用程式需要快速調整,某些 Pod 可能會維持在等候排程的狀態,直到叢集自動調整程式部署的更多節點才能接受排程的 Pod。 針對具有高度高載需求的應用程式,您可以使用虛擬節點與 Azure 容器執行個體來進行調整。

縮減事件

叢集自動調整程式也會監視 Pod 排程狀態,以找出最近未收到新排程要求的節點。 此案例表示節點集區的計算資源比必要資源多,而且可以減少節點數目。 依預設,若節點超過 10 分鐘不再使用的閾值,則會排程將此節點刪除。 發生此情況時,Pod 會排程為在節點集區內的其他節點上執行,且叢集自動調整程式會減少節點的數目。

當叢集自動調整程式在減少節點的數目時,會將 Pod 排程在不同節點上,所以您的應用程式可能會遇到一些中斷情況。 若要儘量減少中斷的情況,請避免使用單一 Pod 執行個體的應用程式。

Kubernetes 事件驅動自動調整 (KEDA)

Kubernetes 事件驅動自動調整 (KEDA) 是工作負載事件驅動自動調整的 開放原始碼元件。 它會根據收到的事件數目動態調整工作負載。 KEDA 會使用稱為 ScaledObject 的自定義資源定義來擴充 Kubernetes,以描述應用程式應如何調整以回應特定流量。

KEDA 調整在工作負載接收流量高載或處理大量數據的案例中很有用。 這與水準 Pod 自動調整程式不同,因為 KEDA 是事件驅動,並根據事件數目進行調整,而 HPA 是以資源使用率(例如 CPU 和記憶體)為基礎的計量驅動。

若要開始使用 AKS 中的 KEDA 附加元件,請參閱 KEDA 概觀

高載至 Azure 容器執行個體 (ACI)

若要快速調整 AKS 叢集規模,您可以與 Azure 容器執行個體 (ACI) 整合。 Kubernetes 具有內建元件來調整複本和節點計數規模。 不過,如果您的應用程式需要快速調整, 水準 Pod 自動調整程式 可能會排程比節點集區中現有的計算資源所提供的 Pod 更多。 如果已設定,則此案例會觸發 叢集自動調整程式 ,在節點集區中部署更多節點,但可能需要幾分鐘的時間,這些節點才能成功布建,並允許 Kubernetes 排程器在節點上執行 Pod。

Kubernetes 高載調整為ACI

ACI 可讓您快速部署容器實例,而不需要額外的基礎結構額外負荷。 當您與 AKS 連線時,ACI 會變成 AKS 叢集的安全邏輯延伸模組。 虛擬節點元件是以虛擬 Kubelet 為基礎,會安裝在 AKS 叢集中,將 ACI 呈現為虛擬 Kubernetes 節點。 Kubernetes 接著可以排程透過虛擬節點以 ACI 執行個體形式執行的 Pod,而不是直接在 AKS 叢集中作為 VM 節點上的 Pod。

您的應用程式不需要任何修改,即可使用虛擬節點。 您的部署可以跨 AKS 和 ACI 且在沒有延遲的情況下調整規模,因為叢集自動調整器會在 AKS 叢集中部署新的節點。

虛擬節點會部署到與您 AKS 叢集相同虛擬網路中的其他子網路。 此虛擬網路設定會保護 ACI 與 AKS 之間的流量。 如同 AKS 叢集,ACI 執行個體是安全的邏輯計算資源,與其他使用者隔離。

下一步

若要開始使用調整應用程式,請參閱下列資源:

如需核心 Kubernetes 和 AKS 概念的詳細資訊,請參閱下列文章: