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

Container Service for Kubernetes:AHPA のデプロイ

最終更新日:Dec 26, 2025

Container Service for Kubernetes は Advanced Horizontal Pod Autoscaler (AHPA) をサポートしています。AHPA は履歴データを学習・分析して将来のリソース需要を予測し、Pod のレプリカ数を動的に調整します。これにより、需要のピーク前にリソースがスケールアウトおよびプリフェッチされ、システムの応答速度と安定性が向上します。トラフィックが少ない期間が予測される場合、AHPA は適切なタイミングでリソースをスケールインしてコストを削減します。

前提条件

  • ACK マネージドクラスターまたはACK サーバーレスクラスターを作成済みであること。詳細については、「ACK マネージドクラスターの作成」または「クラスターの作成」をご参照ください。

  • Managed Service for Prometheus を有効化済みであること。Managed Service for Prometheus が、CPU やメモリ使用量など、少なくとも 7 日間のアプリケーション履歴データを収集していることを確認してください。Managed Service for Prometheus を有効にする方法の詳細については、「Managed Service for Prometheus への接続と設定」をご参照ください。

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

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

  2. クラスター ページで、管理対象のクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、アドオン管理 をクリックします。

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

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

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

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

  3. [インスタンス] ページの上部で、Prometheus インスタンスのリージョンを選択し、対象インスタンスの名前をクリックします。インスタンス名は ACK クラスター名と同じです。

  4. [設定] ページの [HTTP API URL (Grafana Read URL)] セクションで、次の設定項目の値を記録します。

    • (任意) トークンが有効になっている場合は、アクセストークンを記録します。

    • [内部ネットワーク] エンドポイント (Prometheus URL) を記録してください。

  5. ACK クラスターで Prometheus クエリエンドポイントを設定します。

    1. 次の内容で `application-intelligence.yaml` という名前のファイルを作成します。

      • prometheusUrl:Managed Service for 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 で次のフィールドも設定する必要があります:

        詳細については、「AHPA の Prometheus ダッシュボードの有効化」をご参照ください。

      • 次のコマンドを実行して、`application-intelligence` 構成をデプロイします。

        kubectl apply -f application-intelligence.yaml

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

    テストサービスには、リクエストのピークと谷をシミュレートする `fib-deployment`、`fib-svc`、`fib-loader` が含まれます。また、Horizontal Pod Autoscaler (HPA) リソースもデプロイされ、そのスケーリング結果を AHPA の結果と比較します。

    次の内容で `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
    ---

    ステップ 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: 0.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 は観測のみを行い、スケーリング操作は実行しません。このモードを使用して、AHPA が期待どおりに動作するかどうかを確認できます。

      • proactive:プロアクティブな予測のみが有効になります。

      • reactive:リアクティブな予測のみが有効になります。

      maxReplicas

      はい

      スケールアウト時のレプリカの最大数。

      minReplicas

      はい

      スケールイン時のレプリカの最小数。

      stabilizationWindowSeconds

      いいえ

      スケールインのクールダウン時間。デフォルト値は 300 秒です。

      prediction. quantile

      はい

      予測分位数。値が大きいほど、より保守的な予測となり、実際のメトリック値がターゲット値を下回る確率が高くなります。値は 0 から 1 の間で、小数点以下 2 桁までサポートされます。デフォルト値は 0.99 です。0.90 から 0.99 の値が推奨されます。

      prediction. scaleUpForward

      はい

      Pod が Ready 状態になるまでに必要な時間 (コールドスタート時間)。

      instanceBounds

      いいえ

      スケーリング期間中のインスタンス数の範囲。

      • startTime:開始時刻。

      • endTime:終了時刻。

      instanceBounds. bounds. cron

      いいえ

      定期タスクを設定します。cron 式は時間のセットを表します。スペースで区切られた 5 つのフィールドを使用します。たとえば、- cron: "* 0-8 ? * MON-FRI" は、タスクが毎週月曜日から金曜日の 00:00 から 08:59 まで実行されることを示します。

      次の表に、cron 式のフィールドを示します。詳細については、「定期タスク」をご参照ください。

      フィールド名

      必須

      有効値

      使用可能な特殊文字

      はい

      0~59

      * / , -

      はい

      0~23

      * / , -

      はい

      1~31

      * / , – ?

      はい

      1~12 または JAN~DEC

      * / , -

      曜日

      いいえ

      0~6 または SUN~SAT

      * / , – ?

      説明
      • 月と曜日のフィールドの値では、大文字と小文字は区別されません。たとえば、SUNSunsun は同じ効果を持ちます。

      • 曜日のフィールドが設定されていない場合、デフォルト値は * です。

      • 特殊文字:

        • *:すべての有効な値を示します。

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

        • ,:列挙値をリストします。

        • -:範囲を示します。

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

    2. 次のコマンドを実行して、AHPA 弾性ポリシーを作成します。

      kubectl apply -f ahpa-demo.yaml

    ステップ 5:予測結果の表示

    AHPA の弾性予測結果を表示するには、「AHPA の Prometheus ダッシュボードの有効化」をご参照ください。

    説明

    予測には 7 日間の履歴データが必要なため、サンプルデプロイメントが少なくとも 7 日間実行された後にのみ予測結果を表示できます。既存のオンラインアプリケーションがある場合は、AHPA 構成で直接指定できます。

    このトピックでは、observer モードを例として使用します。このモードでは、結果が HPA ポリシーと比較されます。この比較は、アプリケーションが必要とする実際のリソースの参考となり、AHPA の予測結果が期待を満たしているかどうかを確認するのに役立ちます。

    image.png

    • 実際の CPU 使用率と予測された CPU 使用率:緑色の曲線は HPA での実際の CPU 使用率を表します。黄色の曲線は AHPA によって予測された CPU 使用率を表します。

      • 黄色の曲線が緑色の曲線を上回っており、予測された CPU 容量が十分であることを示しています。

      • 黄色の曲線が緑色の曲線より先行しており、必要なリソースが事前に準備されていることを示しています。

    • Pod の傾向:緑色の曲線は HPA によってスケーリングされた実際の Pod 数を表します。黄色の曲線は AHPA によって予測された Pod 数を表します。

      • 黄色の曲線が緑色の曲線を下回っており、AHPA がより少ない Pod 数を予測していることを示しています。

      • 黄色の曲線が緑色の曲線よりも滑らかであり、AHPA によるスケーリングが変動を少なくし、サービスの安定性を向上させることを示しています。

    予測の傾向は期待どおりです。一定期間の観測の後、結果が期待どおりであれば、スケーリングモードを auto に設定して AHPA にスケーリングを管理させることができます。

    関連ドキュメント