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

Container Service for Kubernetes:AHPA のデプロイ

最終更新日:Mar 26, 2026

Advanced Horizontal Pod Autoscaler (AHPA) は、過去の使用量パターンを学習して将来のリソース需要を予測し、予測される需要のピークに先立って Pod のレプリカをスケーリングします。これにより、コールドスタートによる遅延が削減され、システムの安定性が向上します。需要の減少が予測される場合は、AHPA は早期にスケールインを行い、リソースコストを削減します。

前提条件

開始する前に、以下を確認してください:

  • Container Service for Kubernetes (ACK) マネージドクラスターまたは ACK サーバーレスクラスター。お持ちでない場合は、「ACK マネージドクラスターの作成」または「ACK サーバーレスクラスターの作成」をご参照ください。

  • クラスターで Managed Service for Prometheus が有効になっていること。有効になっていない場合は、「Managed Service for Prometheus への接続と設定」をご参照ください。

  • Prometheus によって収集された、CPU およびメモリ使用量データを含む、少なくとも 7 日間のアプリケーション統計。AHPA は、予測を生成するためにこの既存データを必要とします。Prometheus インスタンスを有効にしたばかりの場合は、7 日間待ってからステップ 4: AHPA のデプロイに進んでください。

ステップ 1: AHPA Controller のインストール

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

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。左側のナビゲーションウィンドウで、[アドオン] をクリックします。

  3. [アドオン] ページで、[AHPA Controller] カードを見つけ、[インストール] をクリックします。画面上の指示に従って、インストールを完了します。

ステップ 2: データソースとしての Prometheus の設定

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

  2. 左側のナビゲーションウィンドウで、Managed Service for Prometheusインスタンス を選択します。

  3. [インスタンス] ページで、Prometheus インスタンスがデプロイされているリージョンを選択します。Prometheus インスタンスの名前をクリックします。インスタンス名は ACK クラスターの名前と一致します。

  4. [設定項目] ページで、[HTTP API URL (Grafana 読み取り URL)] セクションを見つけ、内部エンドポイントを記録します。クラスターでアクセストークンが有効になっている場合は、アクセストークンもメモしておきます。

  5. 次の内容で application-intelligence.yaml という名前のファイルを作成します。プレースホルダーの値を、実際の Prometheus エンドポイントとアクセストークンに置き換えます。

    AHPA ダッシュボードで Prometheus Service のメトリックを表示するには、次のパラメーターを ConfigMap に追加します:prometheus_writer_url (Remote Write の内部エンドポイント)、prometheus_writer_ak (AccessKey ID)、および prometheus_writer_sk (AccessKey Secret)。詳細については、「AHPA の Prometheus ダッシュボードの有効化」をご参照ください。
    プレースホルダー説明
    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"
  6. ConfigMap を適用します:

    kubectl apply -f application-intelligence.yaml

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

このステップでは、テスト環境をデプロイして、AHPA の予測スケーリングを標準の Horizontal Pod Autoscaler (HPA) の動作と比較します。この環境は、以下で構成されます:

  • fib-deployment:ターゲットワークロード

  • fib-svcfib-deployment にトラフィックをルーティングするサービス

  • fib-loader:トラフィックの変動をシミュレートする負荷ジェネレーター

  • fib-hpa:比較のためのベースラインを提供する HPA ポリシー

次の内容で demo.yaml という名前のファイルを作成します:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: fib-deployment
  namespace: default
  annotations:
    k8s.aliyun.com/eci-use-specs: "1-2Gi"
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

構成を適用します:

kubectl apply -f demo.yaml

ステップ 4: AHPA のデプロイ

AHPA を observer モードで開始します。このモードでは、AHPA はスケーリングの予測を記録しますが、それに基づいて動作はしません。これにより、自動スケーリングを有効にする前に予測の精度を検証できます。

  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     # 平均 CPU 使用率が 40% を超えた場合にスケーリング
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: fib-deployment
      maxReplicas: 100
      minReplicas: 2
      stabilizationWindowSeconds: 300  # フラッピングを防ぐため、スケールイン信号の受信後、動作するまで 300 秒待機
      prediction:
        quantile: 0.95                 # 信頼度:過去のピークの 95% をカバー
        scaleUpForward: 180            # Pod のコールドスタート時間に対応するため、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スケーリングモード。有効な値については、以下の表をご参照ください
    maxReplicasはいPod レプリカの最大数
    minReplicasはいPod レプリカの最小数
    stabilizationWindowSecondsいいえ300スケールインアクティビティのクールダウン時間 (秒)
    prediction.quantileはい0.99予測の信頼度を分位数で表現します。値が大きいほど、より保守的な予測となり、十分なキャパシティを事前にプロビジョニングできる可能性が高くなります。有効な値:01、小数点以下 2 桁まで。ほとんどのワークロードでは、0.900.99 の値が推奨されます
    prediction.scaleUpForwardはい予測される需要のピークの何秒前に AHPA がスケーリングを開始するか。Pod のコールドスタート時間 (Pod の作成から Ready 状態になるまでの時間) に合わせて設定します
    instanceBoundsいいえスケーリング操作の持続時間。レプリカ Pod の数は、AHPA で定義されたレプリカ Pod の最大数と最小数によって制限されます
    instanceBounds.startTimeいいえインスタンスバウンドルールの開始時刻
    instanceBounds.endTimeいいえインスタンスバウンドルールの終了時刻
    instanceBounds.bounds.cronいいえレプリカ数の制限が適用されるタイミングを定義する cron 式

    scaleStrategy フィールドには、次の値を指定できます:

    説明
    observerスケーリングを実行せずに予測を記録します。本番環境に適用する前に、これを使用して AHPA の動作を検証します
    autoAHPA が自動的にスケーリング操作を実行します
    proactive過去のパターンに基づく予測スケーリングのみを適用します
    reactive標準の HPA と同様に、メトリック駆動のスケーリングのみを適用します

    cron 式のフォーマット

    instanceBounds.bounds.cron フィールドは、次の 5 つのフィールド形式を使用します:

    フィールド必須有効な値特殊文字
    はい0~59* / , -
    はい0~23* / , -
    はい1~31* / , - ?
    はい1~12 または JAN~DEC* / , -
    曜日いいえ0~6 または SUN~SAT* / , - ?

    特殊文字:* (すべての値)、/ (増分)、, (リストの区切り文字)、- (範囲)、? (プレースホルダー)。

    月と曜日のフィールドでは大文字と小文字は区別されません (SUNSunsun は同等です)。曜日を省略した場合、デフォルトで * になります。

    cron 式の構文の詳細については、「cron 式」をご参照ください。

  2. AHPA ポリシーを適用します:

    kubectl apply -f ahpa-demo.yaml

ステップ 5: 予測の検証と自動スケーリングの有効化

AHPA は、過去 7 日間の既存データから予測を生成します。ポリシーを適用した後、予測が蓄積されるまで 7 日間待ちます。既存のアプリケーションに AHPA ポリシーを適用するには、AHPA ポリシー構成でアプリケーションを指定します。

7 日間の蓄積期間中に、構成が正しく機能していることを確認します:

# AHPA オブジェクトのステータスを確認
kubectl describe advancedhorizontalpodautoscaler ahpa-demo

# 予測されるレプリカ数が時間とともに更新されるのを監視
kubectl get advancedhorizontalpodautoscaler ahpa-demo -w

7 日後、Prometheus ダッシュボードを使用して予測結果を確認します。設定手順については、「AHPA 用の Prometheus ダッシュボードを有効化する」をご参照ください。

この例では、AHPA は HPA ベースラインと並行して observer モードで実行されます。ダッシュボードには 2 つの比較チャートが表示されます:

image.png
  • CPU 使用量:緑色の線は実際の CPU 使用量 (HPA による) を示します。黄色の線は AHPA が予測した CPU 使用量を示します。

    • 予測値は実際の値よりも高くなっています。これは、AHPA が十分なキャパシティを事前にプロビジョニングしていることを示します。

    • 予測値は実際の値よりも早くピークに達します。これは、需要が発生する前にリソースが準備できていることを示します。

  • Pod 数:緑色の線は HPA によってプロビジョニングされた実際の Pod 数を示します。黄色の線は AHPA が予測した Pod 数を示します。

    • AHPA は短期的なスパイクを平滑化するため、予測された Pod 数 (黄色) は HPA の数 (緑色) よりも少なくなります。

    • 黄色の曲線は緑色の曲線よりも滑らかです。急激な変更が少ないため、ワークロードの安定性が向上します。

自動スケーリングの有効化

予測が期待どおりになったら、AHPA を observer モードから auto モードに切り替えます。ahpa-demo.yaml を編集し、scaleStrategy を変更します:

scaleStrategy: auto

次に、変更を適用します:

kubectl apply -f ahpa-demo.yaml

これで、AHPA は予測スケーリングを使用して fib-deployment を自動的にスケーリングします。

次のステップ