クラスターで水平ポッド自動スケーリング(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 コントローラーはより多くのポッドを追加するポリシーを選択します。
次の表は、scaleDown と scaleUp でサポートされているフィールドについて説明しています。
フィールド | 説明 |
| スケーリングメトリックの値が常に変動する場合に、レプリケート ポッド数のフラッピングを回避するために使用される安定化期間。HPA コントローラーは、安定化期間内のすべてのレプリケート ポッド数に関する推奨事項を考慮する必要があります。 |
| 1 つ以上のスケールインポリシーを定義します。各ポリシーは、 |
| 複数のスケールインポリシーが使用可能な場合に使用するポリシーを指定します。有効な値: |
以下のセクションでは、さまざまなシナリオに基づいて 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 つのポッドを削除します。スケールイン条件が満たされたときにすぐにスケールインするには、stabilizationWindowSeconds を 0 に設定します。
複数のスケールアウトポリシーの使用
ビジネストラフィックの増加パターンが予測できない場合は、次の構成を参照して、トラフィックの変動を処理するための複数のスケールアウトポリシーを定義できます。
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% を追加します。
selectPolicy は Max に設定されており、HPA コントローラーが最も多くのポッドを追加するポリシーを選択することを示します。
参考資料
すべてのポッドに十分なコンピューティングリソースがあることを確認するために、HPA と ノードスケーリング を一緒に使用することをお勧めします。 詳細については、「ノードスケーリングの概要」をご参照ください。
HPA の使用に関する質問がある場合は、「ワークロードスケーリングに関する FAQ」をご参照ください。