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パラメータ | 必須 | 説明 |
| はい | 自動スケーリングのメトリクスを設定します。 RPS、同時実行性、CPU、メモリメトリクスがサポートされています。 |
| はい | 許可されるレプリケートされたポッドの最大数。 |
| はい | 保証する必要があるレプリケートされたポッドの最小数。 |
| いいえ | レプリケートされたポッドの数が、AHPA で定義されたレプリケートされたポッドの最大数と最小数によって制限される期間。
|
| いいえ | 指定された期間内のレプリケートされたポッドの最大数と最小数。
|
cron 式で使用されるフィールド
次の表は、CRON 式に含まれるフィールドについて説明しています。 詳細については、「Cron 式」をご参照ください。
フィールド | 特殊文字 | 必須 | 説明 |
分 | * / , - | はい | 有効な値: 0 ~ 59。 |
時 | * / , - | はい | 有効な値: 0 ~ 23。 |
日 | * / , – ? | はい | 有効な値: 1 ~ 31。 |
月 | * / , - | はい | 有効な値: 1 ~ 12 または JAN ~ DEC。 説明 JAN から DEC までの有効な値は大文字と小文字を区別しません。 |
曜日 | * / , – ? | いいえ | 有効な値: 0 ~ 6 または SUN ~ SAT。 説明
|
cron 式で使用される特殊文字:
アスタリスク (*) は任意の値を示します。 たとえば、
*は任意の分または時を示します。スラッシュ (/) はステップサイズを示します。 たとえば、
/5は 5 つの時間単位を示します。カンマ (,) は区切り文字として使用されます。 たとえば、
1,3,5は値 1、3、5 を示します。ハイフン (-) は値の範囲で使用されます。 たとえば、
1-5は値 1 ~ 5 を示します。疑問符 (?) は、日と曜日のフィールドでのみ使用され、変数値を示します。
手順 2:Knative サービスを作成し、サービスに対して AHPA を有効にする
ACS コンソール にログインします。 左側のナビゲーションペインで、[クラスタ] をクリックします。
[クラスタ] ページで、管理するクラスタを見つけ、その ID をクリックします。 クラスタ詳細ページの左側のナビゲーションペインで、 を選択します。
サービス タブの 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:サービスにアクセスする で使用するサービスのゲートウェイアドレスとドメイン名を記録します。

手順 3:サービスへのアクセス
次のコマンドを実行してサービスにアクセスします。
# 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 アプリケーションのポッドにアクセスする必要はありません。

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