全部產品
Search
文件中心

Container Service for Kubernetes:Knative結合AHPA實現基於RPS的定時彈性

更新時間:Jun 19, 2024

AHPA(Advanced Horizontal Pod Autoscaler)可以根據歷史指標彈性預測未來負載的情況,同時也支援根據時間段設定最大和最小執行個體數量。將Knative與AHPA結合,可以實現基於每秒請求數(RPS)或並發數的定時彈效能力。這種彈效能力不僅可以周期性地調整資源,還可以在突發流量情境下隨時擴容資源。本文介紹如何將Knative和AHPA結合從而擁有基於RPS定時彈性的能力。

索引

前提條件

步驟一:配置彈性指標

本文通過AHPA配置彈性指標和擴縮容邊界。

  1. 執行以下命令,建立一個名為ahpa-demo的YAML檔案。

    vi ahpa-demo.yaml
  2. 將以下內容粘貼至已建立的YAML檔案中。

    apiVersion: autoscaling.alibabacloud.com/v1beta1
    kind: AdvancedHorizontalPodAutoscalerTemplate
    metadata:
      name: ahpa-demo
    spec:
      metrics:
      - type: Resource
        resource:
          name: rps
          target:
            type: Utilization
            averageUtilization: 10 # 目前閾值,10表示RPS使用目標閾值是10。
      maxReplicas: 50 # 定義了Pod最大副本數為50。
      minReplicas: 0 # 定義了Pod最小副本數為0。
      prediction:
        quantile: 95 # 表示預測使用95%的信賴度進行預測。
        scaleUpForward: 180 # 表示向前預測的時間範圍為180秒。
    # 在2023-06-01 00:00:00~2123-06-01 00:00:00這個時間範圍內,Pod副本數的數量將受到AHPAT中定義的最大和最小副本數的限制。
      instanceBounds:
      - startTime: "2023-06-01 00:00:00"
        endTime: "2123-06-01 00:00:00"
        bounds:
    # 在0-6小時的時間段內,最小副本數為0,最大副本數為50。
        - cron: '* 0-6 ? * *'
          maxReplicas: 50
          minReplicas: 0
    # 在7-9小時的時間段內,最小副本數為5,最大副本數為50。
        - cron: '* 7-9 ? * *'
          maxReplicas: 50
          minReplicas: 5
    # 在10-16小時的時間段內,最小副本數為10,最大副本數為50。
        - cron: '* 10-16 ? * *'
          maxReplicas: 50
          minReplicas: 10
    # 在17-23小時的時間段內,最小副本數為2,最大副本數為50。
        - cron: '* 17-23 ? * *'
          maxReplicas: 50
          minReplicas: 2

    參數說明如下所示:

    參數

    是否必選

    說明

    metrics

    必選

    用於配置彈性Metrics 。當前支援RPS、並發數、CPU、Memory指標。

    maxReplicas

    必選

    最大擴容執行個體數。

    minReplicas

    必選

    最小縮容執行個體數。

    instanceBounds

    可選

    擴縮容時間段執行個體數邊界。

    • startTime:開始時間。

    • endTime:結束時間。

    bounds

    可選

    在不同的時間範圍內Pod副本數的最小值和最大值。

    • cron:用於表示時間範圍的格式化字串。可以配置定時任務。

      如果您需要使用Cron運算式來定義定期啟動並執行任務或自動擴充Pod副本數,請先根據下文Cron運算式中各個欄位的詳細說明,熟悉Cron中特殊字元和萬用字元的含義。

    • maxReplicas:最大副本數。

    • minReplicas:最低副本數。

    Cron運算式中各個欄位的詳細說明

    Cron運算式的欄位解釋如下,更多資訊,請參見Cron運算式

    欄位

    特定字元

    是否必選

    說明

    分(Minutes)

    * / , -

    必選

    取值範圍為[0,59]。

    時(Hours)

    * / , -

    必選

    取值範圍為[0,23]。

    日(Day of month)

    * / , – ?

    必選

    取值範圍為[1,31]。

    月(Month

    * / , -

    必選

    取值範圍為[1,12]或者JAN~DEC。

    說明

    JAN~DEC欄位的值不區分大小寫。

    星期(Day of week)

    * / , – ?

    可選

    取值範圍為[0,6]或者SUN~SAT。

    說明
    • SUN~SAT欄位的值不區分大小寫。如:SUN和sun都可表示星期日。

    • 星期(Day of week)欄位如果沒提供,相當於是 *

    cron運算式中各個字元代表的意義如下:

    • 星號(*)表示所有可能的值。例如,*表示匹配所有分鐘和小時。

    • 斜杠(/)表示步長。例如,/5表示每隔5個時間單位。

    • 英文半形逗號(,)表示分隔字元。例如,1,3,5表示匹配1、3、5等值。

    • 破折號(-)表示範圍。例如,1-5表示匹配1到5。

    • 問號(?)僅在日(Day of month)和星期(Day of week)欄位中使用,表示不指定值。

步驟二:建立Knative服務,並指定使用AHPA彈性策略

配置完彈性策略之後,您可以通過Knative服務使用該定時彈性策略。

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇應用 > Knative

  3. Knative頁面的服務管理頁簽下,選擇命名空間default,然後單擊使用模板建立,將以下YAML樣本粘貼至模板,最後單擊建立,建立一個名為helloworld-go-demo的服務。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: helloworld-go-demo
    spec:
      template:
        metadata:
          annotations:
            autoscaling.knative.dev/class: ahpa.autoscaling.knative.dev # 指定AHPA彈性外掛程式。
            autoscaling.knative.dev.alibabacloud/ahpa-template: "ahpa-demo" # 注意這裡引用的AHPA模版參數修改時,關聯的revision會自動修改彈性策略。
        spec:
          containers:
          - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56
            env:
            - name: TARGET
              value: "Knative"

    服務建立成功後,請擷取並記錄服務網關地址和網域名稱,供步驟三:訪問服務時使用。

    image.png

步驟三:訪問服務

執行如下命令,訪問服務。

# helloworld-go-demo.default.example.com為服務的預設網域名稱。
# alb-i5lagvip6fga******.cn-shenzhen.alb.aliyuncs.com為服務對應的訪問網關。
curl -H "Host: helloworld-go-demo.default.example.com" http://alb-i5lagvip6fga******.cn-shenzhen.alb.aliyuncs.com

預期輸出:

Hello Knative!

表明服務訪問成功。

結果驗證

在Knative的監控大盤頁面,可查看Knative服務的執行個體擴縮容趨勢。關於Knative監控大盤的更多資訊,請參見通過阿里雲Prometheus監控查看Knative大盤

說明
  • 當Knative應用縮容到0且沒有Pod執行個體時,無法採集Pod的並發請求數、Pod每秒請求數等指標。只有訪問Knative應用Pod後,才能在服務發現頁面查看這些指標。

  • 當Knative應用沒有縮容到0時,無需訪問Knative應用Pod,即可在服務發現頁面查看Pod的並發請求數、Pod每秒請求數等指標。

image.png