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

Container Service for Kubernetes:HPA のスケーリング動作の微調整

最終更新日:Apr 15, 2025

クラスターで水平ポッド自動スケーリング(HPA)を有効にした後、デフォルトのスケーリング動作が要件を満たせない場合は、behavior 設定を変更して、スケールイン(scaleDown)とスケールアウト(scaleUp)の動作を微調整できます。たとえば、ビジネストラフィックの急増時に迅速にスケールアウトしたり、変動するワークロードを処理するためにスケールインまたはスケールアウトしたり、状態に依存するアプリケーションのスケールインを禁止したりできます。

注意事項

  • behavior 設定は、Kubernetes 1.23 で Stable 状態に達しました。 Kubernetes 1.24 以降を実行しているクラスターで HPA が有効になっていることを確認してください。 詳細については、「水平ポッド自動スケーリングの実装」をご参照ください。クラスターの更新方法の詳細については、「ACK クラスタの手動更新」をご参照ください。

  • kubectl を使用して HPA コントローラーを手動でデプロイする場合は、HPA API のバージョンが v2beta2 以降であることを確認してください。

behavior 設定方法

HPA 構成の behavior 設定はオプションです。この設定を構成して、スケーリング動作を微調整できます。 behavior 設定の scaleDown フィールドと scaleUp フィールドは、リソースの枯渇や不足を回避し、リソース使用率を向上させ、アプリケーションのパフォーマンスを最適化するために、スケーリング動作を微調整するために使用されます。

次のコードブロックは、behavior 設定を含む HPA 構成の例です。 この例では、behavior 設定はデフォルトに設定されています。必要に応じて、既存のフィールドの値を変更できます。フィールドの値を指定しない場合は、デフォルト設定が使用されます。

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: sample-hpa
spec:
  minReplicas: 1
  maxReplicas: 100
  metrics:
  - pods:
      metric:
        name: http_requests_per_second
      target:
        averageValue: 50
        type: AverageValue
    type: Pods
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: sample-app
  behavior:  # デフォルトの動作設定。
    scaleDown: # スケールイン動作を微調整するには、このフィールドを変更します。
      stabilizationWindowSeconds: 300
      policies:
      - type: Pods
        value: 10
        periodSeconds: 15
    scaleUp:  # スケールアウト動作を微調整するには、このフィールドを変更します。
      stabilizationWindowSeconds: 0
      policies:
      - type: Percent
        value: 100
        periodSeconds: 15
      - type: Pods
        value: 4
        periodSeconds: 15
      selectPolicy: Max

サンプル YAML ファイルでは、scaleDown フィールドは 300 秒の安定化期間(stabilizationWindowSeconds)を定義し、policies セクションでスケーリングポリシーを定義しています。安定化期間は、HPA コントローラーが過去 5 分以内のスケールイン対象のレプリケート ポッド数に関する推奨事項を考慮し、最大値を選択し、15 秒ごとに最大 10 個のレプリケート ポッドをスケールインする必要があることを示します。これにより、ポッド数のフラッピングが回避されます。

scaleUp フィールドは 0 秒の安定化期間を定義しており、HPA コントローラーがスケールアウト操作をすぐに実行することを示しています。2 つのスケールアウトポリシーが定義されており、次のように選択されます。HPA コントローラーは、15 秒ごとに現在のレプリケート ポッド数の最大 100% をスケールアウトするか、15 秒ごとに最大 4 つのレプリケート ポッドをスケールアウトします。ポッドのスケールアウト中に、HPA コントローラーはより多くのポッドを追加するポリシーを選択します。

次の表は、scaleDownscaleUp でサポートされているフィールドについて説明しています。

フィールド

説明

stabilizationWindowSeconds

スケーリングメトリックの値が常に変動する場合に、レプリケート ポッド数のフラッピングを回避するために使用される安定化期間。HPA コントローラーは、安定化期間内のすべてのレプリケート ポッド数に関する推奨事項を考慮する必要があります。scaleDown を構成する場合、HPA コントローラーは推奨される最大数を選択します。scaleUp を構成する場合、HPA コントローラーは推奨される最小数を選択します。単位:秒。

policies

1 つ以上のスケールインポリシーを定義します。各ポリシーは、typePercentPods など)と value で構成され、スケールイン条件が満たされたときにポッドを削除する方法を記述します。たとえば、HPA コントローラーは、指定された割合のポッドまたは固定数のポッドを削除します。

selectPolicy

複数のスケールインポリシーが使用可能な場合に使用するポリシーを指定します。有効な値:MinMaxDisabledscaleDown を構成する場合、Max は、HPA コントローラーが最も多くのレプリケート ポッドを削除するスケールインポリシーを選択することを示します。scaleUp を構成する場合、HPA コントローラーが最も多くのレプリケート ポッドを追加するポリシーを選択することを示します。

以下のセクションでは、さまざまなシナリオに基づいて behavior 設定を微調整する方法について説明します。

迅速なスケールアウト

フラッシュセールや製品リリースなどのイベント中に、次の構成を使用して、ワークロードの急激な増加を処理します。

behavior:
  scaleUp:
    policies:
    - type: Percent
      value: 900
      periodSeconds: 15

この構成では、HPA コントローラーが 15 秒以内に現在のポッド数の 900% を追加しようとし、maxReplicas の制約を尊重しながら 10 倍のレプリカ拡張を実現します。初期ポッド数が 1 で、スケールアウト条件が常に満たされている場合、ポッド数の変化は次のようになります。

1 -> 10 -> 100 -> 1000

迅速なスケールアウトと低速なスケールイン

スケールインアクティビティ後の予期しないトラフィックの急増を処理して、アプリケーションの安定性と迅速な応答を確保するために、次の構成を使用して迅速にスケールアウトし、ゆっくりとスケールインできます。

behavior:
  scaleUp:
    policies:
    - type: Percent
      value: 900
      periodSeconds: 60
  scaleDown:
    policies:
    - type: Pods
      value: 1
      periodSeconds: 600 # 10 分ごとにポッドを 1 つ削除します。

スケールアウトアクティビティ中に、HPA コントローラーは 60 秒以内に現在のポッド数の 900% を追加します。メトリック値がしきい値を常に下回っている場合、HPA コントローラーはスケールインアクティビティ中に 600 秒(10 分)以内に最大 1 つのポッドを削除します。

スケールインの禁止

スケールインアクティビティは、重要なタスクや状態に依存するアプリケーションを中断したり、ワークロードの移行を引き起こしたりする可能性があります。アプリケーションの高可用性と安定性を確保するために、次の構成を参照してスケールインを禁止できます。

behavior:
  scaleDown:
    selectPolicy: Disabled

スケールイン期間の延長または短縮

リソースまたは予算が限られているシナリオでは、迅速なスケールアウトアクティビティにより、すべてのリソースが使い果たされたり、コストが大幅に増加したりする可能性があります。stabilizationWindowSeconds を使用して、変動するワークロードによって引き起こされるスケールアウトの頻度を制御できます。

behavior:
  scaleDown:
    stabilizationWindowSeconds: 600
    policies:
    - type: Pods
      value: 5
      periodSeconds: 600

上記の構成では、メトリック値がスケールインしきい値を下回っても、HPA コントローラーはすぐにスケールインアクティビティを実行しません。 600 秒(10 分)の期間を待機してから、メトリック値がまだしきい値よりも低いかどうかを確認します。期間内では、HPA コントローラーは最大 5 つのポッドを削除します。スケールイン条件が満たされたときにすぐにスケールインするには、stabilizationWindowSeconds0 に設定します。

複数のスケールアウトポリシーの使用

ビジネストラフィックの増加パターンが予測できない場合は、次の構成を参照して、トラフィックの変動を処理するための複数のスケールアウトポリシーを定義できます。

  behavior:
    scaleUp:
      policies:
      - type: Pods # ポッド数に基づいてスケールアウトします。
        value: 4
        periodSeconds: 60
      - type: Percent  # 指定されたパーセンテージに基づいてスケールアウトします。
        value: 50
        periodSeconds: 60
      selectPolicy: Max

上記の構成では、scaleUp は 2 つのポリシーを定義しています。

  • 1 つのポリシーは、1 分ごとに最大 4 つのポッドを追加します。

  • もう 1 つのポリシーは、1 分ごとに現在のポッド数の最大 50% を追加します。

selectPolicyMax に設定されており、HPA コントローラーが最も多くのポッドを追加するポリシーを選択することを示します。

参考資料