全部產品
Search
文件中心

Container Service for Kubernetes:調節HPA擴縮容靈敏度

更新時間:Nov 13, 2024

在叢集中啟用容器水平伸縮HPA後,如果預設的擴縮容行為無法滿足業務需求,您可以通過behavior欄位更細粒度地配置縮容(scaleDown)和擴容(scaleUp)行為。例如,您可以在流量急劇上升時實現快速擴容,負載波動頻繁的情境下實現快速擴容和緩慢縮容,對狀態敏感的應用實現禁止縮容等。

使用須知

  • behavior欄位於Kubernetes 1.23版本進入Stable狀態。請確保您在1.24及以上版本的叢集中完成了HPA的啟用,請參見使用容器水平伸縮(HPA)。如需升級叢集,請參見手動升級叢集

  • 如果您通過kubectl手動部署了HPA,您還需確保HPA的API版本為v2beta2及以上。

behavior配置說明

在HPA配置中,behavior是一個可選欄位,支援對自動擴縮容行為進行更細粒度的控制。behavior主要通過scaleDownscaleUp子欄位定義擴容和縮容的具體行為,以更好地滿足應用的實際需求,避免資源的資源過度分派或不足,從而提高資源使用率和應用效能。

一個包括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會在擴容時選擇增加副本數較多的策略。

scaleDownscaleUp支援自訂欄位及其說明如下。

參數

說明

stabilizationWindowSeconds

穩定視窗用於在指標持續波動時避免副本數頻繁增減。HPA會考慮可配置視窗時間內的所有建議副本數。如配置為scaleDown,HPA會從所有副本數中選擇最大值;如配置為scaleUp,HPA則會選擇最小值。單位為秒(s)。

policies

定義一個或多個縮容策略,每個策略包含type(例如PercentPods)和value,用於詳細說明在滿足縮容條件時如何減少Pod的數量,例如每次減少百分比或固定數量的Pod。

selectPolicy

存在多個縮容策略可用時,指定選擇哪個策略。可選值:MinMaxDisabled。如配置為scaleDownMax代表在合格情況下,選擇減小最多副本數的策略進行縮容;如配置為scaleUp,則選擇增加最多副本數的策略進行擴容。

下文結合不同情境樣本介紹如何通過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數量最多的策略來執行擴容。

相關文檔

  • 推薦您在啟用HPA後,搭配節點伸縮使用,保證工作負載Pod總能獲得足夠的計算資源,請參見節點伸縮概述

  • 如您在使用HPA的過程中遇到問題,可以參見工作負載伸縮FAQ進行排查。