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

Container Compute Service:Knative と AHPA に基づくスケジュールされた自動スケーリングの実装

最終更新日:Jan 04, 2025

Advanced Horizontal Pod Autoscaler (AHPA) は、RPS、同時実行性、CPU、メモリなどのメトリクスの履歴値に基づいて予測スケーリングを実行できます。 リソースを事前にスケーリングし、指定された期間内に指定された最大または最小のポッド数を維持できます。 cron 式を定義することで、指定された期間内のポッドの最大数と最小数を指定できます。

前提条件

  • Knative が ACS クラスタにデプロイされていること。 詳細については、「Knative のデプロイ」をご参照ください。

  • AHPA が ACS クラスタにデプロイされていること。 詳細については、「AHPA のデプロイ」をご参照ください。

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

次の YAML コンテンツに基づいて AHPA ConfigMap を作成し、ACS クラスタに AHPA をデプロイします。

apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: AdvancedHorizontalPodAutoscalerTemplate
metadata:
  name: ahpa-demo
spec:
  metrics:
  - type: Resource
    resource:
      name: rps
      target:
        type: Utilization
        averageUtilization: 10 # RPS しきい値を 10 に設定します。
  maxReplicas: 50 # レプリケートされたポッドの最大数を 50 に設定します。
  minReplicas: 0 # レプリケートされたポッドの最小数を 0 に設定します。
  prediction:
    quantile: 95 # 予測の信頼レベルを 95% に設定します。
    scaleUpForward: 180 # 将来予測の時間範囲を 180 秒に設定します。
# 2023 年 6 月 1 日 00:00:00 から 2123 年 6 月 1 日 00:00:00 まで、レプリケートされたポッドの数は、AHPA で定義されたレプリケートされたポッドの最大数と最小数によって制限されます。
  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 時から午後 4 時までは、レプリケートされたポッドの最小数は 10 で、最大数は 50 です。
    - cron: '* 10-16 ?  * *'
      maxReplicas: 50
      minReplicas: 10
# 午後 5 時から午後 11 時までは、レプリケートされたポッドの最小数は 2 で、最大数は 50 です。
    - cron: '* 17-23 ?  * *'
      maxReplicas: 50
      minReplicas: 2

パラメータ

必須

説明

metrics

はい

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

maxReplicas

はい

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

minReplicas

はい

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

instanceBounds

いいえ

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

  • startTime: クエリタスクの開始時刻。

  • endTime: クエリタスクの終了時刻。

bounds

いいえ

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

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

    CronJob を設定したり、ポッドを自動的にスケールアウトしたりするために cron 式を使用する方法の詳細については、「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 と sun はどちらも日曜日を示します。

  • 曜日フィールドを指定しない場合、すべての曜日が適用されます。これはワイルドカード文字 (*) と同じです。

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

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

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

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

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

  • 疑問符 (?) は、日と曜日のフィールドでのみ使用され、変数値を示します。

手順 2:Knative サービスを作成し、サービスに対して AHPA を有効にする

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

  2. [クラスタ] ページで、管理するクラスタを見つけ、その ID をクリックします。 クラスタ詳細ページの左側のナビゲーションペインで、[アプリケーション] > [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 テンプレートパラメータを変更すると、対応するリビジョンも更新されます。
        spec:
          containers:
          - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56
            env:
            - name: TARGET
              value: "Knative"

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

    image

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

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

    # 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!

手順 4 (オプション): スケジュールされた自動スケーリングを確認する

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

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

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

image.png

参考資料

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