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 は自動的に新しいリビジョンを作成します。
-
Container Service for Kubernetes (ACK) コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
-
[クラスター] ページで、対象のクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、[アプリケーション] > [Knative] を選択します。
-
[サービス] タブで、[名前空間] を [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 モニタリングダッシュボードの表示」をご参照ください。
次のステップ
スケジュールによる境界なしで、同時実行リクエストと RPS に基づいて自動スケーリングを構成します。詳細については、「トラフィックの変動に対応するための自動スケーリングの有効化」をご参照ください。