Container Service for Kubernetes (ACK) は Advanced Horizontal Pod Autoscaler (AHPA) をサポートしています。AHPA は Prometheus の履歴データを分析して将来のリソース需要を予測し、Pod レプリカ数を動的に調整します。これにより、トラフィックのピーク前にリソースをスケールアウトして事前に確保でき、システムの応答性と安定性が向上します。トラフィックの谷が予測されると、AHPA はリソースをスケールインしてコストを削減します。
背景情報
AHPA controller は Managed Service for Prometheus と連携し、アプリケーションの履歴メトリクスデータを取得して処理します。このデータが予測スケーリングの判断の基盤になります。AHPA controller は機械学習アルゴリズムを使用して、今後 24 時間に必要となる Pod インスタンス数を予測します。これは、周期的なパターンを持つワークロードの処理に特に有効です。プロアクティブおよびリアクティブな予測戦略を組み合わせることで、AHPA controller は Pod インスタンス数を調整し、今後のトラフィックのピークに備えてリソースを事前に確保します。このアプローチにより、アプリケーションの応答性とパフォーマンスが向上し、コスト管理とサービスの安定性維持にも役立ちます。AHPA の詳細については、「AHPA の概要」をご参照ください。
前提条件
ACS クラスターが作成されていること。詳細については、ACS クラスターを作成する を参照してください。
-
Managed Service for Prometheus が有効化されていること。詳細については、「Managed Service for Prometheus を使用した ACK クラスターのモニタリング」をご参照ください。
手順1:AHPA controller のインストール
ACS コンソール にログインします。左側のナビゲーションペインで、クラスター をクリックします。
クラスター ページで、管理するクラスターを見つけ、その ID をクリックします。クラスター詳細ページの左側のナビゲーションペインで、操作 > アドオン を選択します。
-
アドオン管理 ページで、[その他] カテゴリにあるAHPA controllerを見つけ、インストール をクリックします。
手順2:Prometheus の設定と AHPA の統合
にログインします。 ARMSコンソールを使用します。
左側のナビゲーションウィンドウで、.
-
インスタンスリスト ページの上部で、Prometheus インスタンスがデプロイされているリージョンを選択します。 ACS クラスターと同じ名前で、インスタンスタイプ が [一般] である対象インスタンスの名前をクリックします。 左側のナビゲーションペインで、設定 をクリックします。 HTTP API アドレス (Grafana 読み取りアドレス) セクションで、次のパラメーターの値を記録します。
-
トークンが有効な場合は、アクセス トークンを記録します。
-
イントラネット エンドポイント (Prometheus URL) を表示して記録します。
-
-
ACK クラスターで Prometheus クエリ URL を設定します。
-
application-intelligence.yaml という名前のファイルを作成し、次の内容を記述します。
-
prometheusUrl:ARMS Prometheus インスタンスのアクセスエンドポイント。 -
token:Prometheus インスタンスのアクセス トークン。
apiVersion: v1 kind: ConfigMap metadata: name: application-intelligence namespace: kube-system data: prometheusUrl: "http://cn-hangzhou-intranet.arms.aliyuncs.com:9443/api/v1/prometheus/da9d7dece901db4c9fc7f5b9c40****/158120454317****/cc6df477a982145d986e3f79c985a****/cn-hangzhou" token: "eyJhxxxxx"説明Managed Service for Prometheus で AHPA ダッシュボードを表示するには、この ConfigMap で次のフィールドも設定する必要があります。
-
prometheus_writer_url:リモート書き込み用の内部エンドポイントに設定します。 -
prometheus_writer_ak:Alibaba Cloud アカウントの AccessKey ID に設定します。 -
prometheus_writer_sk:Alibaba Cloud アカウントの AccessKey Secret に設定します。
-
-
次のコマンドを実行して application-intelligence をデプロイします。
kubectl apply -f application-intelligence.yaml
-
-
AHPA を統合します。
にログインします。 ARMSコンソールを使用します。
左側のナビゲーションウィンドウで、.
-
上部のナビゲーションバーで、他のコンポーネントに接続する をクリックします。アクセスセンター で、AHPA を検索し、AHPA カードをクリックします。
-
AHPA コンポーネントを統合します。
-
[ACK AHPA] ページで、[コンテナサービスクラスターの選択] > クラスターの選択 を選択し、ドロップダウンリストから統合するクラスターを選択します。
-
次の表に基づいて、設定情報セクションのパラメーターを設定します。OK をクリックします。
パラメーター
説明
Exporter 名
AHPA exporter の一意な名前です。
メトリクス収集間隔 (秒)
監視データを収集する間隔です。
-
-
統合ステータスチェックが完了したら、アクセス管理 をクリックします。
手順3:テストサービスのデプロイ
テストサービスには、fib-deployment、fib-svc、fib-loader (リクエストのピークと谷をシミュレートするサービス) に加え、AHPA の結果と比較するための HPA リソースが含まれます。
-
demo.yaml という名前のファイルを作成し、次の内容を記述します。
-
次のコマンドを実行してテストサービスをデプロイします。
kubectl apply -f demo.yaml
手順4:AHPA リソースの作成
AdvancedHorizontalPodAutoscaler リソースを送信して、スケーリングポリシーを設定します。
-
ahpa-demo.yaml という名前のファイルを作成し、次の内容を記述します。
apiVersion: autoscaling.alibabacloud.com/v1beta1 kind: AdvancedHorizontalPodAutoscaler metadata: name: ahpa-demo spec: scaleStrategy: observer metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 40 scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: fib-deployment maxReplicas: 100 minReplicas: 2 stabilizationWindowSeconds: 300 prediction: quantile: 95 scaleUpForward: 180 instanceBounds: - startTime: "2021-12-16 00:00:00" endTime: "2031-12-16 00:00:00" bounds: - cron: "* 0-8 ? * MON-FRI" maxReplicas: 15 minReplicas: 4 - cron: "* 9-15 ? * MON-FRI" maxReplicas: 15 minReplicas: 10 - cron: "* 16-23 ? * MON-FRI" maxReplicas: 20 minReplicas: 15次の表に、一部のパラメーターを示します。
パラメーター
必須
説明
scaleTargetRef
はい
対象の Deployment を指定します。
metrics
はい
スケーリングに使用するメトリクスを設定します。CPU、GPU、メモリ、QPS、RT をサポートしています。
target
はい
ターゲットのしきい値です。たとえば、
averageUtilization: 40は、ターゲット CPU 使用率が 40% であることを示します。scaleStrategy
いいえ
スケーリングモードを指定します。デフォルト値は
observerです。-
auto:AHPA がスケーリングを管理します。 -
observer:監視のみを行い、実際のスケーリング操作は実行しません。このモードを使用して、AHPA が想定どおりに動作するかを確認できます。 -
scalingUpOnly:スケールアウト操作のみを実行します。 -
proactive:プロアクティブ予測のみを有効にします。 -
reactive:リアクティブ予測のみを有効にします。
maxReplicas
はい
スケールアウト時の最大レプリカ数です。
minReplicas
はい
スケールイン時の最小レプリカ数です。
stabilizationWindowSeconds
いいえ
スケールインのクールダウン期間です。デフォルト値は 300 秒です。
prediction.quantile
はい
予測の分位点です。値が高いほど保守的になります。これは、実際のメトリクス値がターゲットを下回る確率が高くなるためです。有効値は 0~100、デフォルト値は 99、推奨範囲は 90~99 です。
prediction.scaleUpForward
はい
新しい Pod が Ready になるまでに必要な時間 (コールドスタート時間) です。
instanceBounds
いいえ
特定の時間範囲におけるレプリカ数の上限と下限を指定します。
-
startTime:開始時刻。
-
endTime:終了時刻。
instanceBounds.bounds.cron
いいえ
スケジュールを指定する cron 式。スペースで区切られた 5 つのフィールドで構成されています。たとえば、
- cron: "* 0-8 ? * MON-FRI"は、タスクが毎週月曜日から金曜日の 00:00 から 08:59 まで実行されることを指定します。次の表に、Cron 式のフィールドを示します。詳細については、「Cron 式」をご参照ください。
フィールド
必須
許容される値
許容される特殊文字
分
はい
0-59
* / , -
時
はい
0-23
* / , -
日 (月)
はい
1-31
* / , – ?
月
はい
1-12 または JAN-DEC
* / , -
曜日
いいえ
0-6 または SUN-SAT
* / , – ?
説明-
Month フィールドと Day of week フィールドの値は、大文字と小文字を区別しません。たとえば、
SUN、Sun、sunは同じ効果になります。 -
Day of week フィールドが設定されていない場合、デフォルト値は
*です。 -
特殊文字:
-
*:指定可能なすべての値を指定します。 -
/:増分を指定します。 -
,:値を列挙します。 -
-:範囲を指定します。 -
?:特定の値を指定しないことを示します。
-
-
-
次のコマンドを実行して AHPA スケーリングポリシーを作成します。
kubectl apply -f ahpa-demo.yaml
手順5:予測結果の確認
アクセス管理 ページで、[コンテナサービス] タブに移動してクラスター名をクリックし、コンポーネントタイプ ドロップダウンリストから [ACK AHPA] を選択します。最後に、ダッシュボード タブに移動し、[ahpa-dashboard] をクリックしてモニタリングデータを表示します。
Managed Service for Prometheus が提供する AHPA ダッシュボードには、CPU 使用率、Pod 数、予測 Pod 数などのデータが含まれます。
-
[CPU Utilization & Actual PODs] チャートは、現在のワークロードにおける平均 CPU 使用率と Pod 数を示します。
-
[Actual and Predicted CPU Usage] チャートは、現在のワークロードの Pod の合計 CPU 使用量と予測使用量を比較して示します。予測使用量が実際の使用量を上回る場合、予測された CPU キャパシティが十分であることを示します。
-
[Pod Trend] セクションでは、実際の Pod 数、推奨 Pod 数、プロアクティブ予測 Pod 数を確認できます。
-
実際の Pod 数:現在実行中の Pod 数です。
-
推奨 Pod 数:プロアクティブ予測、リアクティブ予測、および定義したインスタンス境界を組み合わせて決定される、AHPA が推奨する最終的な Pod 数です。
-
プロアクティブ予測:履歴データで特定された周期的パターンに基づいて予測された Pod 数です。
-
AHPA は予測を生成するために 7 日分の履歴データを必要とします。サンプルをデプロイした後、予測結果を確認するには 7 日間待つ必要があります。既存の本番ワークロードがある場合は、AHPA ダッシュボードで該当する Deployment を直接選択できます。
このトピックでは、スケーリングモードをobserver モードに設定した例を示します。この例では、AHPA の予測結果が想定どおりであるかを確認するために、アプリケーションが実際に必要とするリソースの参照として HPA ポリシーの結果と比較します。
次の図は、AHPA Prometheus ダッシュボードにおける予測の例を示します。

説明:
-
Actual and Predicted CPU Usage:緑の線は HPA による実際の CPU 使用量を示し、黄色の線は AHPA が予測した CPU 使用量を示します。
-
黄色の線が緑の線より上にある場合、予測された CPU キャパシティが十分であることを示します。
-
緑の線より先に黄色の線が上昇する場合、リソースが事前に準備されたことを示します。
-
-
Pod Trend:緑の線は HPA によってスケーリングされた実際の Pod 数を示し、黄色の線は AHPA が予測した Pod 数を示します。
-
黄色の線が緑の線より下にある場合、予測 Pod 数がより少ないことを示します。
-
黄色の線が緑の線より滑らかな場合、AHPA によるスケーリングの変動が少なく、サービスの安定性が向上することを示します。
-
予測結果から、予測スケーリングの傾向が想定どおりであることがわかります。一定期間の観察後も傾向が期待どおりであれば、scaleStrategy をauto に設定し、AHPA にスケーリングを管理させることができます。
AHPA の主要メトリクス
|
メトリクス |
説明 |
|
ahpa_proactive_pods |
プロアクティブ予測に基づく Pod 数です。 |
|
ahpa_reactive_pods |
リアクティブ予測に基づく Pod 数です。 |
|
ahpa_requested_pods |
推奨 Pod 数です。 |
|
ahpa_max_pods |
最大 Pod 数です。 |
|
ahpa_min_pods |
最小 Pod 数です。 |
|
ahpa_target_metric |
ターゲットのしきい値です。 |