Kubernetes v1.33:HorizontalPodAutoscaler 可配置容忍度
本文介紹**HorizontalPodAutoscaler 的可配置容忍度**,這是 Kubernetes 1.33 中首次推出的一個 Alpha 特性。
這是什麼?
Horizontal Pod Autoscaling 是 Kubernetes 一個著名的特性,它允許你的工作負載根據資源利用率,透過增加或減少副本數來自動調整大小。
假設你在一個 Kubernetes 叢集中執行一個有 50 個副本的 Web 應用。你配置了 HorizontalPodAutoscaler (HPA) 以根據 CPU 利用率進行擴縮容,目標利用率為 75%。現在,假設所有副本的當前 CPU 利用率為 90%,高於期望的 75%。HPA 將使用以下公式計算所需的副本數:
在本例中
因此,HPA 會將副本數從 50 增加到 60,以減少每個 Pod 上的負載。同樣,如果 CPU 利用率降至 75% 以下,HPA 將相應地減少副本數。Kubernetes 文件提供了擴縮容演算法的詳細描述。
為了避免在出現微小指標波動時建立或刪除副本,Kubernetes 應用了一種滯後機制:只有噹噹前和期望的指標值差異超過 10% 時,它才會更改副本數。在上面的例子中,由於當前和期望指標值之間的比率為 \(90/75\),即比目標高出 20%,超過了 10% 的容忍度,因此擴容操作將繼續進行。
這個 10% 的預設容忍度是叢集範圍的;在舊的 Kubernetes 版本中,它無法進行微調。這個值適用於大多數使用場景,但對於大型部署來說太粗略了,因為 10% 的容忍度可能代表幾十個 Pod。因此,社群長期以來一直要求能夠調整這個值。
在 Kubernetes v1.33 中,這現在成為可能。
我該如何使用它?
在你的 Kubernetes v1.33 叢集中啟用 `HPAConfigurableTolerance` 特性門控後,你可以為你的 HorizontalPodAutoscaler 物件新增所需的容忍度。
容忍度出現在 `spec.behavior.scaleDown` 和 `spec.behavior.scaleUp` 欄位下,因此擴容和縮容可以有不同的容忍度。一個典型的用法是為擴容指定一個較小的容忍度(以快速響應峰值),但為縮容指定一個較高的容忍度(以避免因小的指標波動而過於頻繁地新增和刪除副本)。
例如,一個縮容容忍度為 5%、擴容無容忍度的 HPA 將如下所示:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: my-app
spec:
...
behavior:
scaleDown:
tolerance: 0.05
scaleUp:
tolerance: 0
我想要所有細節!
透過閱讀 KEP-4951 獲取所有技術細節,並關注 issue 4951 以獲得該特性畢業的通知。