在叢集中啟用容器水平伸縮HPA後,如果預設的擴縮容行為無法滿足業務需求,您可以通過behavior
欄位更細粒度地配置縮容(scaleDown
)和擴容(scaleUp
)行為。例如,您可以在流量急劇上升時實現快速擴容,負載波動頻繁的情境下實現快速擴容和緩慢縮容,對狀態敏感的應用實現禁止縮容等。
使用須知
behavior
欄位於Kubernetes 1.23版本進入Stable狀態。請確保您在1.24及以上版本的叢集中完成了HPA的啟用,請參見使用容器水平伸縮(HPA)。如需升級叢集,請參見手動升級叢集。如果您通過kubectl手動部署了HPA,您還需確保HPA的API版本為
v2beta2
及以上。
behavior
配置說明
在HPA配置中,behavior
是一個可選欄位,支援對自動擴縮容行為進行更細粒度的控制。behavior
主要通過scaleDown
和scaleUp
子欄位定義擴容和縮容的具體行為,以更好地滿足應用的實際需求,避免資源的資源過度分派或不足,從而提高資源使用率和應用效能。
一個包括behavior
欄位的HPA配置樣本如下。樣本中behavior
配置均為預設配置。您可需按需配置自訂欄位的取值,未指定的欄位將使用預設值。
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: sample-hpa
spec:
minReplicas: 1
maxReplicas: 100
metrics:
- pods:
metric:
name: http_requests_per_second
target:
averageValue: 50
type: AverageValue
type: Pods
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: sample-app
behavior: # 以下配置為預設配置,您可以按需自訂欄位。
scaleDown: # 通過此欄位配置自訂的縮容行為。
stabilizationWindowSeconds: 300
policies:
- type: Pods
value: 10
periodSeconds: 15
scaleUp: # 通過此欄位配置自訂的擴容行為。
stabilizationWindowSeconds: 0
policies:
- type: Percent
value: 100
periodSeconds: 15
- type: Pods
value: 4
periodSeconds: 15
selectPolicy: Max
在樣本YAML中,通過scaleDown
欄位定義了穩定視窗(stabilizationWindowSeconds
)為300秒,並在policies
中聲明了具體的縮容策略。這表明HPA縮容時會考慮5分鐘內所有建議的副本數,從中選擇最大值,且每15秒最多縮容10個Pod,避免指標波動而導致的頻繁縮容。
同時,在scaleUp
欄位中,穩定視窗為0
,即當指標表明需要擴容時HPA會立即進行擴容操作。定義了兩種擴容策略以及策略的選擇方式:每15秒最多添加當前運行副本數的100%,或每15秒最多添加4個Pod,HPA會在擴容時選擇增加副本數較多的策略。
scaleDown
和scaleUp
支援自訂欄位及其說明如下。
參數 | 說明 |
| 穩定視窗用於在指標持續波動時避免副本數頻繁增減。HPA會考慮可配置視窗時間內的所有建議副本數。如配置為 |
| 定義一個或多個縮容策略,每個策略包含 |
| 存在多個縮容策略可用時,指定選擇哪個策略。可選值: |
下文結合不同情境樣本介紹如何通過behavior
欄位來對擴縮容行為進行更細粒度的配置。
快速擴容
在特定事件(例如促銷、產品發布等)期間,應用可能會經歷突然的流量激增。當需要快速擴容時,您可以參見如下配置實現快速擴容。
behavior:
scaleUp:
policies:
- type: Percent
value: 900
periodSeconds: 15
在上方配置中,擴容行為不受maxReplicas
的限制,將在15秒的時間視窗內嘗試將當前Pod數量增加900%,從而使副本數達到當前的10倍。假如您初始Pod數量為1,在流量突發並且指標持續超出閾值時,擴容時Pod數量變化將呈如下趨勢。
1 -> 10 -> 100 -> 1000
快速擴容,緩慢縮容
在對應用效能要求高且負載波動頻繁的情境,為避免在流量高峰後執行縮容時有不易預測的流量高峰再次到來,繼而保障系統的穩定運行、及時響應請求,您可以參見如下配置實現快速擴容和緩慢縮容。
behavior:
scaleUp:
policies:
- type: Percent
value: 900
periodSeconds: 60
scaleDown:
policies:
- type: Pods
value: 1
periodSeconds: 600 # 每10分鐘減少一個pod。
在上方配置中,當擴容時,在60秒的時間視窗內,每次將增加當前Pod數量的900%。如果指標持續低於閾值,當縮容時,在600秒(即10分鐘)的時間視窗內,最多縮容1個Pod。
禁止縮容
對於運行中的關鍵任務或狀態敏感的應用,縮容可能導致不必要的中斷或負載遷移。您可以參見下方配置實現禁止縮容,確保任務應用的高可用性和穩定性。
behavior:
scaleDown:
selectPolicy: Disabled
延長或縮短縮容時間視窗
在資源有限或成本敏感的情境中,快速擴容可能導致資源耗盡或成本激增。您可以參見下方配置使用stabilizationWindowSeconds
來限制擴容的速度,減少因短暫波動導致的頻繁調整,從而控制資源消耗,降低叢集成本。
behavior:
scaleDown:
stabilizationWindowSeconds: 600
policies:
- type: Pods
value: 5
periodSeconds: 600
在上方配置中,即使縮容閾值低於目標值,HPA也不會立即進行縮容操作,而會等待600秒(即10分鐘)的時間視窗期,確認指標是否持續低於目標值。在時間視窗期內,每次縮容至多縮容5個Pod。
如果您希望指標達到閾值後立即執行擴縮容,無須等待穩定視窗,可以將stabilizationWindowSeconds
配置為0
。
同時配置多個擴容策略
如果您的業務流量增長模式多變且不可預測,您可以參見下方配置同時定義多個擴縮容策略,確保系統能夠靈活地應對各種不同的流量模式,從而實現快速而有效擴充。
behavior:
scaleUp:
policies:
- type: Pods # 基於Pod數量的擴容策略。
value: 4
periodSeconds: 60
- type: Percent # 基於百分比的擴容策略。
value: 50
periodSeconds: 60
selectPolicy: Max
在上方配置中,scaleUp
中配置了兩個策略。
一個策略基於Pod數量,每1分鐘最多擴容4個Pod。
一個策略基於百分比,每1分鐘最多增加當前Pod數量50%的Pod。
selectPolicy
設定為Max
,表示HPA會選擇policies
中增加Pod數量最多的策略來執行擴容。