Alibaba Cloud Container Service for Kubernetes (ACK) は、Advanced Horizontal Pod Autoscaler (AHPA) をサポートしています。AHPA は、履歴データの学習と分析によって将来のリソース需要を予測し、Pod レプリカの数を動的に調整します。AHPA は、予測される需要のピークに先立ち、Pod をスケールアウトし、リソースをプリフェッチします。これにより、ビジネスの応答速度と安定性が向上します。逆に、AHPA は、予測される需要の落ち込みに先立ち、リソースをスケールダウンしてリソースコストを節約します。
背景情報
AHPA コントローラーがアプリケーションの履歴メトリックデータを収集するために、Managed Service for Prometheus を有効にすることができます。AHPA コントローラーは、収集されたデータに基づいてスケーリングの決定を行います。AHPA コントローラーは、機械学習アルゴリズムを使用して、今後 24 時間以内にビジネスで必要となる可能性のある Pod の数を予測します。AHPA コントローラーは、ワークロードが動的に変化するシナリオに適しています。AHPA コントローラーは、プロアクティブおよびパッシブな予測ポリシーを提供し、タイムリーな Pod スケーリングとリソースのプリフェッチを保証することで、ビジネスがトラフィックの急増に耐えられるようにします。これにより、ビジネスの応答速度、パフォーマンス、安定性が向上し、リソースコストの削減にも役立ちます。詳細については、AHPA の概要を参照してください。
前提条件
ACK クラスタが作成されていること。詳細については、ACK クラスタの作成を参照してください。
Managed Service for Prometheus が有効になっていること。Managed Service for Prometheus を有効にする方法の詳細については、Managed Service for Prometheus を使用した ACK クラスタの監視を参照してください。
ステップ 1: AHPA コントローラーをインストールする
ACK コンソールにログインします。左側のナビゲーションペインで、クラスタをクリックします。
クラスタページで、管理するクラスタを見つけ、その ID をクリックします。クラスタ詳細ページの左側のナビゲーションペインで、操作 > アドオンを選択します。
アドオンページで、その他タブをクリックします。AHPA コントローラーを見つけて、インストールをクリックします。次に、画面の指示に従って AHPA コントローラーをインストールします。
ステップ 2: AHPA のデータソースとして Prometheus を追加する
ARMS コンソールにログインします。
左側のナビゲーションペインで、を選択します。
インスタンスページの上部で、Prometheus インスタンスがデプロイされているリージョンを選択します。ACK クラスタにちなんで名付けられた Prometheus インスタンスを選択します。汎用が、Prometheus インスタンスのインスタンスタイプ列に表示されます。[アクション] 列の設定をクリックします。HTTP API URL (grafana 読み取り URL)セクションで、以下の情報を記録します。
アクセストークンが有効になっている場合は、クラスタのアクセストークンを設定する必要があります。
内部エンドポイントを表示して記録します。
クラスタ設定で Prometheus インスタンスのエンドポイントを指定します。
application-intelligence.yaml という名前のファイルを作成し、以下の内容をファイルにコピーします。
prometheusUrl: 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"説明AHPA ダッシュボードに表示される Prometheus メトリックを表示する場合は、Configmap に以下のパラメータを設定します。
prometheus_writer_url: Prometheus インスタンスの内部リモート書き込みエンドポイントを指定します。prometheus_writer_ak: Alibaba Cloud アカウントの AccessKey ID を指定します。prometheus_writer_sk: Alibaba Cloud アカウントの AccessKey シークレットを指定します。
以下のコマンドを実行して、application-intelligence ConfigMap を作成します。
kubectl apply -f application-intelligence.yaml
AHPA を監視するように Managed Service for Prometheus を設定します。
ARMS コンソールにログインします。
左側のナビゲーションペインで、を選択します。
上部のナビゲーションバーで、他のコンポーネントを統合をクリックして、統合センターページに移動します。検索ボックスにAHPAと入力し、検索アイコンをクリックします。表示されたら、AHPA カードをクリックします。
AHPA を監視するように Managed Service for Prometheus を設定します。
ACK AHPA ページで、Kubernetes クラスターの選択 > クラスターの選択 を選択します。ドロップダウン リストから ACS クラスターを選択します。
以下の表に基づいて、設定情報セクションのパラメータを設定します。OKをクリックします。
パラメータ
説明
エクスポーター名
名前は、AHPA から監視データを収集するために使用されるエクスポーター間で一意である必要があります。
メトリック収集間隔 (秒)
サービスが監視データを収集する間隔。
統合ステータスチェックステップが完了したら、統合管理をクリックします。表示されるページで、AHPA に対して Managed Service for Prometheus が有効になっていることを確認できます。
ステップ 3: テストサービスをデプロイする
fib-deploymentという名前の Deployment とfib-svcという名前の Service で構成されるテストサービスをデプロイします。トラフィックの変動をシミュレートするためにテストサービスにリクエストを送信するために使用されるfib-loaderという名前のアプリケーションをデプロイします。次に、Horizontal Pod Autoscaler (HPA) をデプロイして、テストサービスをスケーリングします。このようにして、HPA スケーリング結果と AHPA 予測結果を比較できます。
demo.yaml という名前のファイルを作成し、以下の内容をファイルにコピーします。
以下のコマンドを実行して、テストサービスをデプロイします。
kubectl apply -f demo.yaml
ステップ 4: 宣言的な方法で AHPA ポリシーを作成する
AHPA ポリシーを設定するには、以下の手順を実行します。
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
はい
AHPA ポリシーが実装される基準となるメトリック。CPU、GPU、メモリ、1 秒あたりのクエリ数 (QPS)、応答時間 (RT) などのメトリックがサポートされています。
target
はい
スケーリングのしきい値。
averageUtilization: 40を指定した場合、CPU 使用率のスケーリングのしきい値は 40% です。scaleStrategy
いいえ
AHPA のスケーリングモード。デフォルト値:
observer。有効な値:auto: AHPA は自動的にスケーリングアクティビティを実行します。observer: AHPA はリソースの使用状況を観察し、スケーリングアクティビティを実行しません。オブザーバーモードを使用して、AHPA が期待どおりに動作するかどうかを確認できます。scalingUpOnly: AHPA はスケールアウト操作のみを実行し、スケールイン操作は実行しません。proactive: アクティブな予測のみが有効になります。reactive: パッシブな予測のみが有効になります。
maxReplicas
はい
アプリケーションにプロビジョニングできるレプリケートされた Pod の最大数。
minReplicas
はい
アプリケーションで実行する必要があるレプリケートされた Pod の最小数。
stabilizationWindowSeconds
いいえ
スケールインアクティビティのクールダウン期間。デフォルト値: 300。単位: 秒。
prediction.quantile
はい
実際のメトリック値がスケーリングのしきい値に達しない確率を示す分位数。値が大きいほど、確率が高くなります。有効な値: 0 から 1。デフォルト値: 0.99。値は小数点以下 2 桁まで正確です。パラメータを 0.90 から 0.99 の値に設定することをお勧めします。
prediction.scaleUpForward
はい
コールドスタートの期間。この値は、Pod が作成された時点から Pod が Ready 状態になるまでの期間を表します。
instanceBounds
いいえ
Pod の数が、AHPA によって定義された Pod の最大数と最小数によって制限される期間。
startTime: スケーリング操作の開始時刻。
endTime: スケーリング操作の終了時刻。
instanceBounds.bounds.cron
いいえ
このパラメータは、スケジュールされたスケーリングジョブを作成するために使用されます。cron 式は、スペースで区切られた 5 つのフィールドで構成されます。たとえば、cron 式
- cron: "* 0-8 ? * MON-FRI"は、毎月月曜日から金曜日の 00:00:00 から 08:00:00 までの期間を指定します。次の表は、cron 式に含まれるフィールドについて説明しています。詳細については、Cron 式を参照してください。
フィールド
必須
有効な値
有効な特殊文字
分
はい
0~59
* / , -
時
はい
0~23
* / , -
日
はい
1~31
* / , – ?
月
はい
1 から 12 または JAN から DEC
* / , -
曜日
いいえ
0 から 6 または SUN から SAT
* / , – ?
説明月と曜日のフィールドでは、大文字と小文字は区別されません。たとえば、
SUN、Sun、またはsunを指定できます。曜日フィールドのデフォルト値は
*です。以下は、特殊文字の説明です。
*: 任意の値を指定します。/: 増分を指定します。,: 値のリストを区切ります。-: 範囲を指定します。?: プレースホルダーを指定します。
以下のコマンドを実行して、AHPA ポリシーを適用します。
kubectl apply -f ahpa-demo.yaml
ステップ 5: 予測結果を表示する
統合管理ページで、コンテナサービスタブのクラスタの名前をクリックします。アドオンタイプセクションでACK AHPAを選択します。ダッシュボードタブをクリックします。次に、ahpa-dashboardをクリックします。表示されるページで、AHPA ダッシュボードのデータを表示できます。
AHPA ダッシュボードに表示されるサービスメトリックには、CPU 使用率、現在の Pod 数、予測される Pod 数が表示されます。
CPU 使用率と実際の PODチャートには、Deployment の平均 CPU 使用率と現在の Pod 数が表示されます。
実際の CPU 使用率と予測される CPU 使用率チャートには、Deployment 内の Pod の CPU 使用率と予測される CPU 使用率が表示されます。予測される CPU 使用率が現在の CPU 使用率よりも高い場合、AHPA によって予測された CPU 容量はアプリケーションを実行するのに十分です。
Pod のトレンドセクションでは、現在の Pod 数、推奨される Pod 数、プロアクティブに予測される Pod 数を表示できます。
現在の Pod 数: 実行中の Pod の数。
推奨される Pod 数: AHPA によってアプリケーションに推奨される Pod の数。この値は、プロアクティブな予測の結果、パッシブな予測の結果、および現在の期間内の Pod の最大数と最小数に基づいて生成されます。
プロアクティブに予測される Pod 数: 履歴メトリックデータとワークロード変動のパターンに基づいて AHPA によってプロアクティブに予測される Pod の数。
AHPA の予測結果は、過去 7 日間の履歴データに基づいて生成されます。したがって、AHPA ポリシーを適用してから 7 日間待つ必要があります。AHPA ポリシーを既存のアプリケーションに適用するには、AHPA ダッシュボードでアプリケーションの実行に使用される Deployment を選択します。
この例では、AHPA ポリシーはobserverスケーリングモードを使用しています。次の図は、AHPA 予測結果と HPA スケーリング結果を比較したものです。比較結果を使用して、AHPA 予測結果が期待どおりかどうかを確認できます。
次の図は、AHPA 予測結果と HPA スケーリング結果を比較したものです。

この図は、以下の情報を提供します。
実際の CPU 使用率と予測される CPU 使用率: HPA に基づく実際の CPU 使用率は緑色の線で表されます。AHPA によって予測される CPU 使用率は黄色の線で表されます。
上の図は、予測される CPU 使用率が実際の CPU 使用率よりも高いことを示しています。これは、予測された CPU 容量が十分であることを示しています。
上の図は、予測される CPU 使用率が特定の値に実際の CPU 使用率よりも早く達することを示しています。これは、必要なリソースが事前に準備されていることを示しています。
Pod のトレンド: HPA によって実際にプロビジョニングされた Pod の数は緑色の線で表されます。AHPA によって予測される Pod の数は黄色の線で表されます。
上の図は、黄色の線で表される値が緑色の線で表される値よりも小さいことを示しています。これは、予測される Pod 数が実際の Pod 数よりも少ないことを示しています。
上の図は、黄色の曲線が緑色の曲線よりも滑らかであることを示しています。これは、AHPA スケーリングサービスを使用することで Pod 数の変化が緩やかになり、ビジネスの安定性が向上することを示しています。
結果は、AHPA が予測スケーリングを使用して変動するワークロードを期待どおりに処理できることを示しています。予測結果を確認した後、AHPA ポリシーの scaleStrategy パラメータを auto に設定して、AHPA が Pod を自動的にスケーリングできるようにすることができます。
AHPA の主要メトリック
メトリック | 説明 |
ahpa_proactive_pods | プロアクティブに予測される Pod 数。 |
ahpa_reactive_pods | パッシブに予測される Pod 数。 |
ahpa_requested_pods | 推奨される Pod 数。 |
ahpa_max_pods | Pod の最大数。 |
ahpa_min_pods | Pod の最小数。 |
ahpa_target_metric | スケーリングのしきい値。 |