水平 Pod オートスケーラー (HPA) を有効にすると、CPU 使用率、メモリ使用量、またはカスタムメトリクスに基づいて Pod を自動的にスケーリングできます。HPA は、トラフィックスパイクを処理するために Pod のレプリカ数を増やし、アイドル期間中にはリソースを自動的に節約するために数を減らします。この機能は、e コマースプラットフォーム、オンライン教育サービス、金融アプリケーションなど、頻繁なスケーリングを必要とする変動の激しいワークロードを持つアプリケーションに最適です。
事前準備
HPA を効果的に使用するために、Kubernetes の公式ドキュメント「Horizontal Pod Autoscaling」をお読みいただき、その基本原則、アルゴリズム、設定可能なスケーリング動作を理解することを推奨します。
さらに、Alibaba Cloud Container Service for Kubernetes (ACK) クラスターは、さまざまなワークロードのスケーリング (スケジューリング層の弾力性) およびノードのスケーリング (リソース層の弾力性) ソリューションを提供します。先に進む前に、「オートスケーリング」をお読みいただき、各ソリューションのユースケースと制限を理解してください。
前提条件
-
ACK マネージドクラスターまたはACK 専用クラスターが作成されていること。詳細については、「Kubernetes クラスターの作成」をご参照ください。
-
kubectl コマンドを使用して HPA を実装する場合、kubectl を使用して Kubernetes クラスターに接続する必要があります。詳細については、「クラスターの KubeConfig を取得し、kubectl を使用してクラスターに接続する」をご参照ください。
コンソールでの HPA アプリケーションの作成
ACK は HPA と統合されており、コンソールから HPA を有効にしたアプリケーションを作成できます。新しいアプリケーションを作成するとき、または既存のアプリケーションに対して HPA を有効にできます。ワークロードごとに作成する HPA は 1 つだけにすることを推奨します。
アプリケーション作成時の HPA の有効化
次の例では、Deployment を使用して、アプリケーションの作成時に HPA を有効にする方法を示します。他のワークロードタイプの手順も同様です。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
-
デプロイメント ページで、イメージによる作成 をクリックします。
-
作成する ページで、画面の指示に従い、アプリケーションの基本情報、コンテナ、サービス、スケーリングを設定して、HPA に対応した Deployment を作成します。
詳細な手順とパラメーターの説明については、「ステートレスワークロード (Deployment) の作成」をご参照ください。次のセクションでは、主要なパラメーターのみを説明します。
-
[基本情報]:アプリケーションの名前やレプリカ数などの設定を行います。
-
[コンテナー]:イメージと、必要な CPU およびメモリリソースを設定します。
リソースプロファイリング機能は、過去のリソース使用状況を分析し、コンテナの Requests と Limits を設定するための推奨事項を提供します。詳細については、「リソースプロファイリング」をご参照ください。
重要HPA を有効にするには、アプリケーションにリソースの requests を設定する必要があります。
-
[詳細設定]:
-
スケーリング セクションで、HPA の 有効 を選択し、スケーリングの条件とパラメーターを設定します。
-
[メトリック]:サポートされているメトリクスは CPU とメモリです。メトリクスは、設定したリソース要件のタイプと一致している必要があります。 CPU とメモリの両方のリソースタイプを指定した場合、いずれかのメトリクスがスケーリングのしきい値に達すると、HPA はスケーリング操作を実行します。
-
トリガー条件:リソース使用率のしきい値で、パーセンテージで指定します。リソース使用率がこのしきい値を超えると、コンテナはスケールアウトします。水平 Pod オートスケーラーのアルゴリズムの詳細については、「アルゴリズムの詳細」をご参照ください。
-
[最大レプリカ]:Deployment がスケールアウトできるレプリカの最大数です。この値は、最小レプリカ数より大きい必要があります。
-
[最小レプリカ]:Deployment のレプリカの最小数です。値は 1 以上の整数である必要があります。
-
-
作成が完了したら、デプロイメント ページで作成した Deployment を表示できます。Deployment 名をクリックし、Deployment の詳細ページで ポッドのスケーリング タブをクリックします。このセクションでは、CPU やメモリの使用率、レプリカの最大数や最小数など、HPA のアクティビティに関連するメトリクスを表示し、設定を更新したり無効にしたりして HPA を管理できます。
-
既存アプリケーションでの HPA の有効化
この例では、既存の Deployment で HPA を有効にする方法を示します。他のワークロードタイプの手順も同様です。
ワークロードページ
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
-
デプロイメント ページで、対象アプリケーションの名前をクリックし、ポッドのスケーリング タブをクリックして、HPA セクションの 作成する をクリックします。
-
作成する ダイアログボックスで、画面の指示に従ってスケーリング設定を構成します。
-
[名前]:HPA ポリシーの名前です。
-
[メトリック]:追加 をクリックします。
-
[Metric Name]:CPU とメモリをサポートします。メトリクスは、設定したリソースタイプと一致する必要があります。CPU とメモリの両方を指定した場合、いずれかのメトリクスがスケーリングのしきい値に達するとすぐに HPA はスケーリング操作を実行します。
-
[しきい値]:リソース使用率のパーセンテージ。これを超えるとコンテナのスケールアウトが開始します。水平 Pod オートスケーラーのアルゴリズムの詳細については、「アルゴリズムの詳細」をご参照ください。
-
-
-
[コンテナーの最大数]:Deployment がスケールアウトできるレプリカの最大数です。この値は、最小レプリカ数より大きい必要があります。
-
[コンテナーの最小数]:Deployment がスケールダウンできるレプリカの最小数です。値は 1 以上の整数である必要があります。
設定が完了したら、[デプロイメント] ページで Deployment 名をクリックし、Deployment の詳細ページで ポッドのスケーリング タブをクリックします。このエリアでは、CPU やメモリの使用率、レプリカの最大数や最小数など、HPA のアクティビティに関連するメトリクスを表示し、設定を更新したり無効にしたりして HPA を管理できます。
ワークロードのスケーリングページ
このページは、許可リストに登録されたユーザーのみが利用できます。アクセスをリクエストするには、チケットを送信してください。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
-
ページの右上隅にある オートスケーリングを作成する をクリックし、HPA および CronHPA タブをクリックします。対象のワークロードを選択し、スケーリングポリシーを設定する セクションで HPA を選択し、プロンプトに従って HPA ポリシーを設定します。
-
[スケーリングポリシー名]:HPA ポリシーの名前です。
-
[コンテナーの最小数]:ワークロードのレプリカの最小数です。この値は 1 以上の整数である必要があります。
-
[コンテナーの最大数]:ワークロードがスケールアウトできるコンテナの最大数です。この値は、最小レプリカ数より大きい必要があります。
-
[メトリック名]:サポートされているメトリクスには、CPU、GPU、メモリ、Nginx Ingress リクエスト、カスタムメトリクスが含まれます。メトリクスタイプは、指定されたリソースタイプと一致する必要があります。複数のメトリクスを指定した場合、水平 Pod オートスケーラー (HPA) は、いずれかのメトリクスがしきい値に達するとスケーリング操作を実行します。
-
[しきい値]:リソース使用率のパーセンテージ。使用率がこの値を超えると、コンテナはスケールアウトを開始します。水平 Pod オートスケーラーのアルゴリズムの詳細については、「アルゴリズムの詳細」をご参照ください。
-
作成が完了したら、ワークロードスケーリング ページで HPA のリストを表示できます。アクション 列では、リソース使用率やレプリカの最大数・最小数など、HPA のアクティビティに関連するメトリクスを表示し、設定を更新したり無効にしたりして HPA を管理できます。
結果の確認
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
-
Horizontal Pod Autoscaler タブをクリックし、[HPA] を選択して、スケーリングステータスとタスクリストを表示します。
本番環境では、アプリケーションは Pod の負荷に基づいてスケーリングします。テスト環境で Pod にストレステストを実行して、水平スケーリングの動作を確認することもできます。
kubectl を使用した HPA アプリケーションの作成
オーケストレーションテンプレートを使用して手動で HPA を作成し、対象の Deployment にバインドすることもできます。ワークロードごとに作成する HPA は 1 つだけにすることを推奨します。この例では、HPA をサポートする Nginx アプリケーションをデプロイする方法を示します。
-
nginx.yml という名前のファイルを作成し、次の内容をコピーします。
重要HPA を実装するには、Pod にリソースの
requestsを設定する必要があります。設定しない場合、HPA は機能しません。リソースプロファイリング機能を使用して、過去のリソース使用状況データを分析し、コンテナの Requests と Limits を設定するための推奨事項を取得できます。詳細については、「リソースプロファイリング」をご参照ください。 -
次のコマンドを実行して、Nginx アプリケーションを作成します。
kubectl apply -f nginx.yml -
hpa.yml という名前のファイルを作成し、次の内容をコピーして HPA を作成します。
scaleTargetRefを使用して、HPA の対象オブジェクトを指定します。この例では、HPA はnginxという名前の Deployment にバインドされ、すべての Pod 内のコンテナの平均 CPU 使用率が 50% に達するとスケーリング操作をトリガーします。Kubernetes 1.24 以降
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: nginx-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: nginx minReplicas: 1 # Deployment の最小レプリカ数。1 以上の整数である必要があります。 maxReplicas: 10 # Deployment の最大レプリカ数。minReplicas より大きい必要があります。 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 50 # 目標の平均リソース使用率。平均リソース使用量と要求リソース量の比率です。Kubernetes 1.24 未満
apiVersion: autoscaling/v2beta2 kind: HorizontalPodAutoscaler metadata: name: nginx-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: nginx minReplicas: 1 # 1 以上の整数である必要があります。 maxReplicas: 10 # 最小レプリカ数より大きい必要があります。 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 50CPU とメモリの両方のメトリクスを指定する必要がある場合は、2 つの HPA を作成する代わりに、
cpuとmemoryの両方のリソースタイプをmetricsフィールドで指定できます。HPA は、いずれかのメトリクスがスケーリングのしきい値に達したことを検出すると、スケーリング操作を実行します。metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 50 - type: Resource resource: name: memory target: type: Utilization averageUtilization: 50 -
次のコマンドを実行して、HPA を作成します。
kubectl apply -f hpa.ymlこの時点で、
kubectl describe hpa <HPA 名>コマンドを実行します。この例では、HPA 名は nginx-hpa です。期待される出力は次の警告メッセージです。これは、HPA がまだデプロイ中であることを示します。kubectl get hpaコマンドを実行して、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 が作成され、Pod がスケーリング条件を満たした後 (この例では、Nginx Pod の CPU 使用率が 50% を超えた場合)、
kubectl describe hpa <HPA-name>コマンドを再度実行して、水平スケーリングのステータスを表示できます。次の出力は、HPA が正しく実行されていることを示しています。
Type Reason Age From Message ---- ------ ---- ---- ------- Normal SuccessfulRescale 5m6s horizontal-pod-autoscaler New size: 1; reason: All metrics below target
関連操作
デフォルトのスケーリング動作がビジネス要件を満たさない場合は、behavior フィールドを使用して、スケールダウン (scaleDown) とスケールアップ (scaleUp) の動作をより詳細に設定できます。詳細については、「設定可能なスケーリング動作」をご参照ください。
behavior の典型的なシナリオには、以下のようなものがあります。
-
突然のトラフィックスパイク時の迅速なスケールアウト。
-
頻繁に変動するワークロードに対する、迅速なスケールアウトと緩やかなスケールイン。
-
状態に敏感なアプリケーションのスケールインの無効化。
-
リソースに制約のある、またはコストに敏感なシナリオでは、安定化ウィンドウ (
stabilizationWindowSeconds) がスケールアウト率を制限し、一時的な変動による頻繁な調整を減らします。
behavior の設定の説明と例については、「HPA のスケーリング感度の調整」をご参照ください。
よくある質問
関連ドキュメント
その他の関連操作
-
Kubernetes External Metrics を使用して Alibaba Cloud コンポーネントのメトリクスに基づいて水平 Pod オートスケーリングを実装するには、「Nginx Ingress メトリクスに基づく水平 Pod オートスケーリング」をご参照ください。
-
Managed Service for Prometheus のメトリクスを HPA 互換のメトリクスに変換するには、「Managed Service for Prometheus のメトリクスに基づく水平 Pod オートスケーリング」をご参照ください。
HPA のトラブルシューティングについては、「ノードオートスケーリング FAQ」をご参照ください。
-
CronHPA と HPA を連携させる必要がある場合は、「CronHPA と HPA の併用」をご参照ください。
その他のワークロードのスケーリングソリューション
-
アプリケーションに周期的なリソース使用パターンがあり、スケジュールに基づいて Pod をスケーリングする必要がある場合は、「CronHPA を使用したスケジュールに基づく水平スケーリング」をご参照ください。
-
アプリケーションのリソース使用に周期的な変化があり、ルールで定義するのが難しい場合は、AHPA を使用して過去のメトリクスに基づいてワークロードパターンを自動的に識別し、Pod のオートスケーリングを実行できます。詳細については、「オートスケーリング予測 (AHPA)」をご参照ください。
-
Pod のリソース使用量に基づいてリソース制限を自動的に設定するには、「垂直 Pod オートスケーラー (VPA) の使用」をご参照ください。
-
メッセージキュー、スケジュール、またはカスタムメトリクスからのイベントに基づいて柔軟なスケーリングポリシーを作成するには、「イベント駆動のオートスケーリング」をご参照ください。
組み合わせソリューション
HPA をノードオートスケーリング機能と併用して、リソースが不足したときにクラスターノードを自動的にスケーリングできます。詳細については、「ノードオートスケーリングの有効化」をご参照ください。