すべてのプロダクト
Search
ドキュメントセンター

Container Compute Service:インテリジェントなリソース予測のための AHPA のデプロイ

最終更新日:Sep 17, 2026

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 の概要」をご参照ください。

前提条件

手順1:AHPA controller のインストール

  1. ACS コンソール にログインします。左側のナビゲーションペインで、クラスター をクリックします。

  2. クラスター ページで、管理するクラスターを見つけ、その ID をクリックします。クラスター詳細ページの左側のナビゲーションペインで、操作 > アドオン を選択します。

  3. アドオン管理 ページで、[その他] カテゴリにあるAHPA controllerを見つけ、インストール をクリックします。

手順2:Prometheus の設定と AHPA の統合

  1. にログインします。 ARMSコンソールを使用します。

  2. 左側のナビゲーションウィンドウで、Prometheusのマネージドサービス > インスタンス.

  3. インスタンスリスト ページの上部で、Prometheus インスタンスがデプロイされているリージョンを選択します。 ACS クラスターと同じ名前で、インスタンスタイプ が [一般] である対象インスタンスの名前をクリックします。 左側のナビゲーションペインで、設定 をクリックします。 HTTP API アドレス (Grafana 読み取りアドレス) セクションで、次のパラメーターの値を記録します。

    • トークンが有効な場合は、アクセス トークンを記録します。

    • イントラネット エンドポイント (Prometheus URL) を表示して記録します。

  4. ACK クラスターで Prometheus クエリ URL を設定します。

    1. 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 に設定します。

    2. 次のコマンドを実行して application-intelligence をデプロイします。

      kubectl apply -f application-intelligence.yaml
  5. AHPA を統合します。

    1. にログインします。 ARMSコンソールを使用します。

    2. 左側のナビゲーションウィンドウで、Prometheusのマネージドサービス > インスタンス.

    3. 上部のナビゲーションバーで、他のコンポーネントに接続する をクリックします。アクセスセンター で、AHPA を検索し、AHPA カードをクリックします。

    4. AHPA コンポーネントを統合します。

      1. [ACK AHPA] ページで、[コンテナサービスクラスターの選択] > クラスターの選択 を選択し、ドロップダウンリストから統合するクラスターを選択します。

      2. 次の表に基づいて、設定情報セクションのパラメーターを設定します。OK をクリックします。

        パラメーター

        説明

        Exporter 名

        AHPA exporter の一意な名前です。

        メトリクス収集間隔 (秒)

        監視データを収集する間隔です。

    5. 統合ステータスチェックが完了したら、アクセス管理 をクリックします。

手順3:テストサービスのデプロイ

テストサービスには、fib-deployment、fib-svc、fib-loader (リクエストのピークと谷をシミュレートするサービス) に加え、AHPA の結果と比較するための HPA リソースが含まれます。

  1. demo.yaml という名前のファイルを作成し、次の内容を記述します。

    YAML の内容

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: fib-deployment
      namespace: default
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: fib-deployment
      strategy:
        rollingUpdate:
          maxSurge: 25%
          maxUnavailable: 25%
        type: RollingUpdate
      template:
        metadata:
          creationTimestamp: null
          labels:
            app: fib-deployment
        spec:
          containers:
          - image: registry.cn-huhehaote.aliyuncs.com/kubeway/knative-sample-fib-server:20200820-171837
            imagePullPolicy: IfNotPresent
            name: user-container
            ports:
            - containerPort: 8080
              name: user-port
              protocol: TCP
            resources:
              limits:
                cpu: "1"
                memory: 2000Mi
              requests:
                cpu: "1"
                memory: 2000Mi
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: fib-svc
      namespace: default
    spec:
      ports:
      - name: http
        port: 80
        protocol: TCP
        targetPort: 8080
      selector:
        app: fib-deployment
      sessionAffinity: None
      type: ClusterIP
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: fib-loader
      namespace: default
    spec:
      progressDeadlineSeconds: 600
      replicas: 1
      revisionHistoryLimit: 10
      selector:
        matchLabels:
          app: fib-loader
      strategy:
        rollingUpdate:
          maxSurge: 25%
          maxUnavailable: 25%
        type: RollingUpdate
      template:
        metadata:
          creationTimestamp: null
          labels:
            app: fib-loader
        spec:
          containers:
          - args:
            - -c
            - |
              /ko-app/fib-loader --service-url="http://fib-svc.${NAMESPACE}?size=35&interval=0" --save-path=/tmp/fib-loader-chart.html
            command:
            - sh
            env:
            - name: NAMESPACE
              valueFrom:
                fieldRef:
                  apiVersion: v1
                  fieldPath: metadata.namespace
            image: registry.cn-huhehaote.aliyuncs.com/kubeway/knative-sample-fib-loader:20201126-110434
            imagePullPolicy: IfNotPresent
            name: loader
            ports:
            - containerPort: 8090
              name: chart
              protocol: TCP
            resources:
              limits:
                cpu: "8"
                memory: 16000Mi
              requests:
                cpu: "2"
                memory: 4000Mi
    ---
    apiVersion: autoscaling/v1
    kind: HorizontalPodAutoscaler
    metadata:
      name: fib-hpa
      namespace: default
    spec:
      maxReplicas: 50
      minReplicas: 1
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: fib-deployment
      targetCPUUtilizationPercentage: 50
    ---
  2. 次のコマンドを実行してテストサービスをデプロイします。

    kubectl apply -f demo.yaml

手順4:AHPA リソースの作成

AdvancedHorizontalPodAutoscaler リソースを送信して、スケーリングポリシーを設定します。

  1. 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 フィールドが設定されていない場合、デフォルト値は*です。

    • 特殊文字:

      • *:指定可能なすべての値を指定します。

      • /:増分を指定します。

      • ,:値を列挙します。

      • -:範囲を指定します。

      • ?:特定の値を指定しないことを示します。

  2. 次のコマンドを実行して 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 ダッシュボードにおける予測の例を示します。

image.png

説明:

  • 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

ターゲットのしきい値です。