Advanced Horizontal Pod Autoscaler (AHPA) は、RPS、同時実行数、CPU、メモリメトリックなどの履歴値に基づいて予測スケーリングを実行できます。事前にリソースをスケーリングし、指定された期間内に指定された Pod の最大数または最小数を維持できます。cron 式を定義することで、指定された期間内の Pod の最大数と最小数を指定できます。
前提条件
-
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 の有効化
-
ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
-
クラスターリスト ページで、対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
-
[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 # 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:サービスへのアクセス で使用します。
[サービス] タブの [アクセスゲートウェイ] セクションで、ゲートウェイアドレス (例:
alb-xxx.ncs.com) を確認できます。サービスリストの [デフォルトドメイン名] 列には、サービスのドメイン名 (例:helloworld-go.default.example.com) が表示されます。サービスにアクセスするには、`Host` ヘッダーをサービスのデフォルトドメイン名に設定して、ゲートウェイアドレスにリクエストを送信します。
手順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 アプリケーションがゼロにスケールダウンし、実行中の Pod がない場合、Managed Service for Prometheus は Pod の同時実行リクエスト数や 1 秒あたりのリクエスト数 (RPS) などのメトリックを収集できません。これらのメトリックは、Knative アプリケーションの Pod にリクエストが送信された後にのみコンソールに表示されます。
-
Knative アプリケーションがゼロにスケールダウンしない場合、リクエストを処理していなくても、Pod の同時実行リクエスト数や 1 秒あたりのリクエスト数 (RPS) などのメトリックがコンソールに表示されます。

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