すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:KnativeとAHPAを使用してスケジュールされた自動スケーリングを実装する

最終更新日:Dec 11, 2024

Advanced Horizontal Pod Autoscaler (AHPA) は、1秒あたりのリクエスト数 (RPS) 、同時実行、CPU、メモリ使用量などの履歴メトリックに基づいて予測スケーリングを実行できます。 この予測機能により、積極的なスケーリング計画が可能になり、サービススケーリングの遅延を防ぐのに役立ちます。 AHPAでは、一定期間内にレプリケートされるポッドの最大数と最小数を指定することもできます。 cron式を使用すると、特定の時間間隔のスケーリング範囲を設定し、1日のさまざまな時間帯に最適なリソース割り当てを確保するために必要なレプリカ数を指定できます。

前提条件

  • Knativeはクラスターにデプロイされています。 詳細については、「」「Knativeのデプロイ」をご参照ください。

  • AHPAがデプロイされました。 詳細については、「」「AHPAのデプロイ」をご参照ください。

ステップ1: AHPAを使用して自動スケーリングのメトリックを設定する

次のYAMLテンプレートを使用して、AHPA構成ファイルを作成し、クラスターにデプロイします。

apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: AdvancedHorizontalPodAutoscalerTemplate
metadata:
  name: ahpa-demo
spec:
  metrics:
  - type: Resource
    resource:
      name: rps
      target:
        type: Utilization
        averageUtilization: 10 # The RPS threshold is set to 10. 
  maxReplicas: 50 # The maximum number of replicated pods is set to 50. 
  minReplicas: 0 # The minimum number of replicated pods is set to 0. 
  prediction:
    quantile: 95 # The confidence level of prediction is set to 95%. 
    scaleUpForward: 180 # The time range of forward prediction is set to 180 seconds. 
# The number of replicated pods is limited by the maximum number of replicated pods and the minimum number of replicated pods defined by AHPA from 00:00:00 on June 1, 2023 to 00:00:00 on June 1, 2123. 
  instanceBounds:
  - startTime: "2023-06-01 00:00:00"
    endTime: "2123-06-01 00:00:00"
    bounds:
# The minimum number of replicated pods is 0 and the maximum number of replicated pods is 50 from 0 am to 6 am. 
    - cron: '* 0-6 ? * *'
      maxReplicas: 50
      minReplicas: 0
# The minimum number of replicated pods is 5 and the maximum number of replicated pods is 50 from 7 am to 9 am. 
    - cron: '* 7-9 ? * *'
      maxReplicas: 50
      minReplicas: 5
# The minimum number of replicated pods is 10 and the maximum number of replicated pods is 50 from 10 am to 4 pm. 
    - cron: '* 10-16 ? * *'
      maxReplicas: 50
      minReplicas: 10
# The minimum number of replicated pods is 2 and the maximum number of replicated pods is 50 from 5 pm to 11 pm. 
    - cron: '* 17-23 ? * *'
      maxReplicas: 50
      minReplicas: 2

パラメーター

必須

説明

メトリック

必須

自動スケーリングのメトリックを設定します。 RPS、同時実行、CPU、およびメモリメトリクスがサポートされています。

maxReplicas

必須

許可されるレプリケートポッドの最大数。

minReplicas

必須

保証する必要があるレプリケートされたポッドの最小数。

instanceBounds

選択可能

レプリケートされるポッドの数が、AHPAで定義されているレプリケートされるポッドの最大数とレプリケートされるポッドの最小数によって制限される期間。

  • startTime: 開始時刻。

  • endTime: 終了時刻。

境界

選択可能

指定された期間内にレプリケートされたポッドの最大数とレプリケートされたポッドの最小数。

  • cron: 期間を指定するcron式。 cron式を入力してCronJobを設定できます。

    cron式を使用してCronJobを構成する方法、またはポッドを自動的にスケールアウトする方法の詳細については、「cron式で使用されるフィールド」を参照し、cron式で使用される特殊文字とワイルドカード文字の定義を参照してください。

  • maxReplicas: レプリケートされたポッドの最大数。

  • minReplicas: レプリケートされたポッドの最小数。

cron式で使用されるフィールド

次の表に、CRON式に含まれるフィールドを示します。 詳細については、「Cron式」をご参照ください。

項目

特殊文字

必須

説明

* / , -

必須

有効な値: 0 ~ 59。

時間

* / , -

必須

有効な値: 0 ~ 23。

日の月

* / , – ?

必須

有効な値: 1 ~ 31。

* / , -

必須

有効な値: 1〜12またはJAN〜DEC。

説明

JANからDECまでの有効値は大文字と小文字を区別しません。

曜日

* / , – ?

選択可能

有効値: 0〜6またはSUN〜SAT。

説明
  • SUNからSATまでの有効な値は、大文字と小文字を区別しません。 たとえば、SUNと太陽の両方が日曜日を示します。

  • 曜日フィールドを指定しない場合、ワイルドカード文字 (*) に相当する曜日が適用されます。

cron式で使用される特殊文字:

  • アスタリスク (*) は任意の値を示す。 たとえば、* は任意の分または時間を示します。

  • スラッシュ (/) はステップサイズを示します。 たとえば、/5は5つの時間単位を示します。

  • コンマ (,) は区切り文字として使用されます。 たとえば、1,3、5は値1、3、および5を示します。

  • ハイフン (-) は値の範囲で使用されます。 例えば、1〜5は1〜5の値を示す。

  • 疑問符 (?) は、日付および曜日フィールドでのみ変数値を示すために使用されます。

手順2: Knativeサービスの作成とサービスのAHPAの有効化

AHPAを有効にすると、Knativeサービスを通じてAHPAを使用できます。

  1. ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、[アプリケーション] > [ネイティブ] を選択します。

  3. Knativeページの [サービス] タブで、名前空間既定に設定し、[テンプレートから作成] をクリックして、次の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 # Specify the AHPA plug-in. 
            autoscaling.knative.dev.alibabacloud/ahpa-template: "ahpa-demo" # If you modify the AHPA template parameter, the corresponding revision is also updated. 
        spec:
          containers:
          - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56
            env:
            - name: TARGET
              value: "Knative"

    サービスが作成されたら、手順3: サービスへのアクセスで使用されるサービスのゲートウェイアドレスとドメイン名を記録します。

    image

手順3: サービスへのアクセス

次のコマンドを実行して、サービスにアクセスします。

# helloworld-go-demo.default.example.com is the default domain name of the Service. 
# alb-i5lagvip6fga******.cn-shenzhen.alb.aliyuncs.com is the gateway address of the Service. 
curl -H "Host: helloworld-go-demo.default.example.com" http://alb-i5lagvip6fga******.cn-shenzhen.alb.aliyuncs.com

期待される出力:

Hello Knative!

ステップ4 (オプション): スケジュールされたスケーリングの確認

Knativeの [モニタリングダッシュボード] で、Knativeサービスのポッドスケーリングの傾向を表示できます。 Knativeダッシュボードの詳細については、「Knativeモニタリングダッシュボードの表示」をご参照ください。

説明
  • Knativeアプリケーションのポッド数をゼロにスケーリングすると、要求の同時実行性や1秒間にポッドに送信される要求数などのメトリックをManaged Service for Prometheusで収集することはできません。 これらのメトリックは、Knativeアプリケーションのポッドにアクセスした後にのみコンソールで表示できます。

  • Knativeアプリケーションのポッド数がゼロでない場合は、リクエストの同時実行性や1秒あたりにポッドに送信されるリクエスト数などのメトリックをコンソールで直接表示できます。 Knativeアプリケーションのポッドにアクセスする必要はありません。

image.png

関連ドキュメント

同時ポッドリクエスト数とRPS設定に基づいて自動スケーリングを設定できます。 詳細については、「トラフィック変動に耐える自動スケーリングの有効化」をご参照ください。