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

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

最終更新日:Sep 11, 2026

Knative Service では、ピーク時の営業時間、深夜の閑散期、またはスケジュールされたバッチ処理ウィンドウなど、予測可能なトラフィックスパイクが発生することがあります。AHPA は、これらの両方のパターンに対応します。過去のメトリクス (RPS、同時実行数、CPU、メモリ) から需要を予測してプロアクティブにスケーリングする一方、instanceBounds を使用すると、cron 式を用いて特定の時間枠でレプリカの最小値と最大値を強制できます。

スケジュールされた時間枠が開始されると、AHPA は定義された最小数まで Pod をスケールアップします。時間枠が終了すると、AHPA はスケールバックします。これにより、スケジュールされた自動スケーリングは、営業時間中に安全なレプリカの最小数を確保し、深夜には完全なスケールトゥゼロを許可するのに役立ちます。

前提条件

開始する前に、次のものが準備できていることを確認してください。

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

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

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

AdvancedHorizontalPodAutoscalerTemplate リソースを作成し、予測スケーリングメトリクスとスケジュールによるレプリカの境界の両方を定義します。次の YAML をクラスターに適用します。

apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: AdvancedHorizontalPodAutoscalerTemplate
metadata:
  name: ahpa-demo
spec:
  metrics:
  - type: Resource
    resource:
      name: rps
      target:
        type: Utilization
        averageUtilization: 10  # Pod あたりの RPS が 10 を超えるとスケールアウト
  maxReplicas: 50  # グローバルな上限
  minReplicas: 0   # グローバルな下限 (スケールトゥゼロを許可)
  prediction:
    quantile: 95        # 保守的なスケーリングのために 95 パーセンタイルの予測を使用
    scaleUpForward: 180 # 需要が発生する前にスケーリングするために 180 秒先を予測
  instanceBounds:
  - startTime: "2023-06-01 00:00:00"  # この日付から境界が有効
    endTime: "2123-06-01 00:00:00"    # この日付まで境界が有効
    bounds:
    - cron: '* 0-6 ? * *'    # 午前 0 時~午前 6 時:スケールトゥゼロを許可
      maxReplicas: 50
      minReplicas: 0
    - cron: '* 7-9 ? * *'    # 午前 7 時~午前 9 時:少なくとも 5 つのレプリカを維持
      maxReplicas: 50
      minReplicas: 5
    - cron: '* 10-16 ? * *'  # 午前 10 時~午後 4 時:少なくとも 10 のレプリカを維持
      maxReplicas: 50
      minReplicas: 10
    - cron: '* 17-23 ? * *'  # 午後 5 時~午後 11 時:少なくとも 2 つのレプリカを維持
      maxReplicas: 50
      minReplicas: 2

主要なパラメーター:

パラメーター 必須 説明
metrics はい 自動スケーリングに使用されるメトリクス。サポートされている値:RPS、同時実行数、CPU、メモリ。
maxReplicas はい グローバルに許可されるレプリカの最大数。
minReplicas はい グローバルに維持するレプリカの最小数。
instanceBounds いいえ AHPA が期間ごとのレプリカ境界を強制する時間範囲で、startTime と endTime を含みます。
bounds いいえ 期間ごとのレプリカの境界。各エントリは、cron 式、maxReplicas、および minReplicas を指定します。

cron 式の構文

cron 式は、スペースで区切られた 5 つのフィールドで構成されます。完全なリファレンスについては、「cron 式」をご参照ください。

フィールド 特殊文字 必須 有効な値
分 * / , - はい 0–59
時 * / , - はい 0–23
日 (月) * / , - ? はい 1–31
月 * / , - はい 1~12 または JAN~DEC (大文字と小文字は区別されません)
曜日 * / , - ? はい 0~6 または SUN~SAT (大文字と小文字は区別されません)。

特殊文字:

  • * — 任意の値に一致します (例:時のフィールドで * は毎時を意味します)。

  • / — ステップを定義します (例:/5 は 5 単位ごとを意味します)。

  • , — 個々の値を区切ります (例:1,3,5)。

  • - — 範囲を定義します (例:1-5)。

  • ? — 「値なし」を指定します。日 (月) と曜日のフィールドは同時に指定できず、どちらか一方に ? を使用する必要があります。

ステップ 2: Knative Service の作成と AHPA の有効化

Knative Service に AHPA をアタッチするには、Service マニフェストに 2 つのアノテーションを追加します。AHPA テンプレートを更新すると、Knative は自動的に新しいリビジョンを作成します。

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

  2. [クラスター] ページで、対象のクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、[アプリケーション] > [Knative] を選択します。

  3. [サービス] タブで、[名前空間] を [default] に設定し、[テンプレートから作成] をクリックし、次の YAML を貼り付けてから [作成] をクリックします。

    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"       # ステップ 1 の AHPA テンプレートを参照
        spec:
          containers:
          - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56
            env:
            - name: TARGET
              value: "Knative"

    Service が作成されたら、そのゲートウェイアドレスとドメイン名を記録します。これらはステップ 3 で必要になります。

ステップ 3: Service へのアクセス

次のコマンドを実行して、Service にリクエストを送信します。ドメイン名とゲートウェイアドレスを、ステップ 2 で記録した値に置き換えます。

# helloworld-go-demo.default.example.com は Service のデフォルトのドメイン名です。
# alb-i5lagvip6fga******.cn-shenzhen.alb.aliyuncs.com は Service のゲートウェイアドレスです。
curl -H "Host: helloworld-go-demo.default.example.com" http://alb-i5lagvip6fga******.cn-shenzhen.alb.aliyuncs.com

期待される出力:

Hello Knative!

ステップ 4 (任意): スケジュールされた自動スケーリングの確認

Knative ページの [モニタリングダッシュボード] で Pod のスケーリング傾向を表示します。設定手順については、「Knative モニタリングダッシュボードの表示」をご参照ください。

説明 Managed Service for Prometheus は、Pod 数がゼロの場合、RPS または同時実行数のメトリクスを収集できません。これらのメトリクスは、Knative アプリケーションの Pod にアクセスした後にのみコンソールで表示できます。Pod が実行中の場合、メトリクスは追加の手順なしでコンソールに表示されます。
image.png

次のステップ

スケジュールによる境界なしで、同時実行リクエストと RPS に基づいて自動スケーリングを構成します。詳細については、「トラフィックの変動に対応するための自動スケーリングの有効化」をご参照ください。