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

Container Service for Kubernetes:Pod の水平オートスケーリングの実装

最終更新日:Jun 17, 2026

HPA (Pod の水平オートスケーリング) を設定して、CPU、メモリ、またはその他のメトリクスに基づいて Pod レプリカを自動的にスケーリングします。

HPA は、需要の変動が激しいサービス、頻繁なスケーリングが必要なサービス、または多数のワークロードを持つサービスに適しており、eコマース、オンライン教育、金融サービスなどの分野で一般的に使用されています。

仕組み

HPA はコントロールループとして動作します。15 秒ごとに、コントローラーは Metrics API にクエリを実行し、使用率を目標値と比較します。Metrics API は 60 秒ごとに kubelet からデータを取得するため、HPA は実質的に 60 秒サイクルでメトリクスを評価します。

コアとなるスケーリング計算式は次のとおりです。

desiredReplicas = ceil(currentReplicas * (currentMetricValue / desiredMetricValue))

例えば、現在の CPU 使用率が 80% で目標が 50% の場合、HPA は ceil(currentReplicas * 80/50) を計算して Deployment をスケールします。10% の許容範囲がスラッシングを防ぎます。HPA は、比率が 1.0 との差が 0.1 以内である場合はスケールしません。

動作 詳細
スケールアウト 即座に実行されます。メトリクスが目標値 (許容範囲を含む) を超えると、HPA は直ちにレプリカ数を増やします。
スケールイン デフォルトで 5 分間のクールダウン期間があり、一時的な低下時の早期スケールインを防ぎます。
複数メトリクス HPA は、指定されたいずれかのメトリクスがしきい値を超えた場合にスケーリングを実行します。
リソースリクエストが必須 currentUsage / requestsHPA は使用率を として計算します。リソースリクエストがない場合、HPA は使用率を計算できません。

詳細については、「アルゴリズムの詳細」をご参照ください。

前提条件

ACK コンソールでの HPA 対応アプリケーションの作成

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

  2. [クラスター] ページで、目的のクラスターを探してその名前をクリックするか、[アクション] 列の [詳細] をクリックします。

  3. 左側のナビゲーションペインで、[ワークロード] > [デプロイメント] を選択します。

  4. [デプロイメント] ページで、[イメージから作成] をクリックします。

  5. [作成] ページで、以下のセクションを設定します。

    • [基本情報]:アプリケーション名とレプリカ数を設定します。

    • [コンテナ]: イメージを選択し、CPU とメモリリソースを指定します。 > 重要: リソースリクエストを設定しないと、HPA は有効になりません。

    • [Advanced]:

      • In the [Access Control] section, click [Create] next to [Services] to configure the Service.

      • In the [Scaling] section, set [HPA] to [Enable] and configure the scaling parameters: | Parameter | Description | |-----------|-------------| | [Metrics] | Select [CPU Usage] or [Memory Usage]. Must match the resource type in [Required Resources]. If both specified, HPA scales when either exceeds its threshold. | | [Condition] | The resource usage threshold that triggers scaling. | | [Max. Replicas] | Maximum replica count. Must exceed the minimum. | | [Min. Replicas] | Minimum replica count. Integer, at least 1. |

詳細については、「イメージからステートレスアプリケーションを作成する」をご参照ください。

kubectl を使用した HPA 対応アプリケーションの作成

このセクションでは、NGINX Deployment を使用して、kubectl による HPA の設定方法を説明します。ワークロードごとに HPA は 1 つのみ作成してください。

ステップ 1:Deployment の作成

ファイル nginx.yml を作成します:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9 # 実際の image_name:tag に置き換えてください。
        ports:
        - containerPort: 80
        resources:
          requests:       # HPA が使用率を計算するために必要です。
            cpu: 500m
重要

コンテナには resources.requests を定義してください。HPA は、使用率を currentUsage / requests として計算します。リクエストがない場合、使用率を判断できず、スケールしません。

Deployment を適用します。

kubectl apply -f nginx.yml

ステップ 2:HPA の作成

hpa.yml という名前のファイルを作成します。 HPA は scaleTargetRef を使用して nginx デプロイメントを対象とし、平均 CPU 使用率が 50% を超えるとスケーリングします。

Kubernetes 1.24 以降 (推奨: autoscaling/v2 を使用):

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: nginx-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx                # ターゲット Deployment 名。
  minReplicas: 1               # 最小レプリカ数。整数で 1 以上。
  maxReplicas: 10              # 最大レプリカ数。minReplicas を超える必要があります。
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50 # 目標平均 CPU 使用率 (リクエストに対する割合)。
Kubernetes 1.24 より前のバージョンの場合 (レガシー)

代わりに autoscaling/v2beta2 を使用してください:

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: nginx-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50
autoscaling/v2beta2 は Kubernetes 1.23 で非推奨となり、1.26 で削除されます。可能な場合は autoscaling/v2 にアップグレードしてください。

HPA を適用します。

kubectl apply -f hpa.yml

(オプション) 複数メトリクスの使用

CPU とメモリの両方に基づいてスケールするには、単一の HPA の metrics フィールドで両方のリソースタイプを指定し、各メトリックに対して個別の HPA を作成しないでください。HPA は、いずれかのメトリックがしきい値を超えた場合にスケールします。

metrics:
- type: Resource
  resource:
    name: cpu
    target:
      type: Utilization
      averageUtilization: 50
- type: Resource
  resource:
    name: memory
    target:
      type: Utilization
      averageUtilization: 50

HPA ステータスの確認

HPA を適用した後、最初のメトリクス収集には少し時間がかかります。この間、kubectl describe hpa は次のような警告を表示することがあります。

Warning  FailedGetResourceMetric       2m (x6 over 4m)  horizontal-pod-autoscaler  missing request for cpu on container nginx in pod default/nginx-deployment-basic-75675f5897-mqzs7

Warning  FailedComputeMetricsReplicas  2m (x6 over 4m)  horizontal-pod-autoscaler  failed to get cpu utilization: missing request for cpu on container nginx in pod default/nginx-deployment-basic-75675f5

これらの警告は、HPA がまだ初期化中であり、メトリクスがまだ利用できないことを示しています。

HPA のステータスを確認します。

kubectl get hpa

スケーリングイベントを確認します。

kubectl describe hpa nginx-hpa

HPA が正しく動作している場合、Events セクションには次のような出力が表示されます。

Type    Reason             Age   From                       Message
----    ------             ----  ----                       -------
Normal  SuccessfulRescale  5m6s  horizontal-pod-autoscaler  New size: 1; reason: All metrics below target

クリーンアップ

このチュートリアルで作成したリソースを削除するには、次のコマンドを実行してください。

kubectl delete hpa nginx-hpa
kubectl delete deployment nginx

次のステップ