水平ポッドオートスケーラー (HPA) 機能を有効にして、CPU使用率、メモリ使用量、またはその他のメトリックに基づいてポッドを自動的にスケーリングできます。 HPAは、複製されたポッドをすばやくスケールアウトして、ワークロードが急増したときに重いストレスに対処し、ワークロードが減少したときに適切にスケールインしてリソースを節約できます。 プロセス全体は自動化されており、人間の介入は必要ありません。 eコマースサービス、オンライン教育、金融サービスなど、サービスの変動が大きく、サービス数が多く、頻繁にスケーリングが必要な企業に最適です。
あなたが始める前に
HPA機能をより有効に活用できるように、このトピックを読む前に、Kubernetesの公式ドキュメントHorizontal Pod Autoscalingを読んで、HPAの基本原則、アルゴリズムの詳細、およびスケーリング設定を理解することをお勧めします。
さらに、Container Service for Kubernetes (ACK) クラスターは、スケジューリングレイヤ弾力性のためのさまざまなワークロードスケーリングソリューションと、リソースレイヤ弾力性のためのノードスケーリングソリューションを提供します。 HPA機能を使用する前に、自動スケーリングの概要を読んで、さまざまなソリューションの適用可能なシナリオと使用制限を理解することをお勧めします。
前提条件
ACK管理クラスターまたはACK専用クラスターが作成されます。 詳細については、「クラスターの作成」をご参照ください。
kubectlコマンドを使用してHPAを実装する場合は、kubectlクライアントがKubernetesクラスターに接続されていることを確認する必要があります。 詳細については、「クラスターのkubeconfigファイルを取得し、kubectlを使用してクラスターに接続する」をご参照ください。
ACKコンソールでHPAが有効になっているアプリケーションを作成する
ACKはHPAと統合される。 ACKコンソールでHPAが有効になっているアプリケーションを作成できます。 アプリケーションを作成するとき、または既存のアプリケーションに対してHPAを有効にできます。 ワークロードに対してHPAが有効になっているアプリケーションを1つだけ作成することをお勧めします。
アプリケーションの作成時にHPAを有効にする
以下では、展開アプリケーションを例として、アプリケーションの作成時にHPAを有効にする方法を説明します。 他のワークロードタイプの手順も同様です。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
[デプロイメント] ページで、[イメージから作成] をクリックします。
[作成] ページで、HPAをサポートするデプロイメントを作成するためのプロンプトに従って、基本情報、コンテナー構成、サービス構成、およびスケーリング構成を入力します。
特定の手順と構成パラメーターの詳細については、「デプロイを使用したステートレスアプリケーションの作成」をご参照ください。 次のリストに、主要なパラメーターについて説明します。
基本情報: レプリカの名前や数など、アプリケーションの情報を設定します。
コンテナー: イメージと必要なCPUおよびメモリリソースを選択します。
リソースプロファイリング機能を使用して、リソース使用量の履歴データを分析し、コンテナリクエストと制限を設定するための推奨事項を取得できます。 詳細については、「リソースプロファイリング」をご参照ください。
重要アプリケーションに必要な
リクエスト
リソースを設定する必要があります。 それ以外の場合は、HPAを有効にできません。高度な:
[アクセス制御] セクションで、[サービス] の右側にある [作成] をクリックしてパラメーターを設定します。
[スケーリング] セクションで、[HPA] の [有効化] を選択し、スケーリングしきい値と関連パラメーターを設定します。
メトリック: [CPU使用率] または [メモリ使用率] を選択します。これらは、[必須リソース] フィールドで指定したものと同じである必要があります。 CPU使用量とメモリ使用量の両方が指定されている場合、いずれかのメトリックがスケーリングしきい値に達すると、HPAはスケーリング操作を実行します。
条件 :リソース使用量のしきい値を指定します。 HPAは、しきい値を超えるとスケーリングイベントをトリガーします。 水平ポッドの自動スケーリングの実行に使用されるアルゴリズムの詳細については、「アルゴリズムの詳細」をご参照ください。
マックス レプリカ: デプロイをスケーリングできるポッドの最大数を指定します。 このパラメーターの値は、レプリケートされるポッドの最小数より大きくなければなりません。
分。 レプリカ: デプロイで実行する必要のあるポッドの最小数を指定します。 このパラメーターの値は、1以上の整数である必要があります。
作成後、[デプロイ名] をクリックして、[デプロイ] ページで新しいデプロイを表示できます。 [基本情報] ページで、[ポッドスケーリング] タブをクリックします。 HPAセクションでは、CPUとメモリの使用量、レプリカの最大数と最小数など、HPAアクティビティに関連するメトリックを監視できます。 このセクションでは、設定の更新や無効化など、HPAを管理することもできます。
既存のアプリケーションのHPAの有効化
次に、Deploymentアプリケーションを例として、既存のアプリケーションでHPAを有効にする方法を説明します。 他のワークロードタイプの手順も同様です。
ワークロードページの使用
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
[デプロイメント] ページで、対象のアプリケーション名をクリックし、[ポッドスケーリング] タブをクリックし、HPAの右側にある [作成] をクリックします。
[作成] ダイアログボックスで、指示に従ってHPAの設定を行います。
名前: HPAポリシーの名前を入力します。
メトリック: [CPU使用率] または [メモリ使用率] を選択します。これらは、[必須リソース] フィールドで指定したものと同じである必要があります。 CPU使用量とメモリ使用量の両方が指定されている場合、いずれかのメトリックがスケーリングしきい値に達すると、HPAはスケーリング操作を実行します。
しきい値: リソース使用しきい値を指定します。 HPAは、しきい値を超えるとスケーリングイベントをトリガーします。 水平ポッドの自動スケーリングの実行に使用されるアルゴリズムの詳細については、「アルゴリズムの詳細」をご参照ください。
マックス コンテナー: デプロイをスケーリングできるポッドの最大数を指定します。 このパラメーターの値は、レプリケートされるポッドの最小数より大きくなければなりません。
分。 コンテナー: デプロイで実行する必要があるポッドの最小数を指定します。 このパラメーターの値は、1以上の整数である必要があります。
作成後、[デプロイメント] ページで [デプロイメント名] をクリックできます。 [基本情報] ページで、[ポッドスケーリング] タブをクリックします。 HPAセクションでは、CPUとメモリの使用量、レプリカの最大数と最小数など、HPAアクティビティに関連するメトリックを監視できます。 このセクションでは、設定の更新や無効化など、HPAを管理することもできます。
ワークロードのスケーリングページの使用
このページは、ホワイトリストのユーザーのみが利用できます。 それを使用する必要があれば
チケットを起票して申請します。ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、
を選択します。ページの右上隅にある [Auto Scalingの作成] をクリックし、対象のワークロードを選択してから、[HPAとCronHPA] タブの [HPA] オプションをオンにし、指示に従ってHPAポリシーを設定します。
スケーリングポリシー名: HPAポリシーの名前を入力します。
分。 コンテナー: デプロイで実行する必要があるポッドの最小数を指定します。 このパラメーターの値は、1以上の整数である必要があります。
マックス コンテナー: デプロイをスケーリングできるポッドの最大数を指定します。 このパラメーターの値は、レプリケートされるポッドの最小数より大きくなければなりません。
スケーリングメトリック: CPUとメモリをサポートします。必要なリソースタイプセットと同じである必要があります。 CPUとメモリの両方のリソースタイプが指定されている場合、いずれかのメトリックがスケーリングしきい値に達すると、HPAはスケーリング操作を実行します。
しきい値: リソース使用しきい値を指定します。 HPAは、しきい値を超えるとスケーリングイベントをトリガーします。 水平ポッドの自動スケーリングの実行に使用されるアルゴリズムの詳細については、「アルゴリズムの詳細」をご参照ください。
作成後、[ワークロードスケーリング] ページでHPAリストを表示できます。 新しいHPAタスクの [操作] で [詳細] をクリックします。 詳細ページでは、CPUやメモリの使用量、レプリカの最大数と最小数など、HPAアクティビティに関連するメトリックを監視できます。 このセクションでは、設定の更新や無効化など、HPAを管理することもできます。
結果検証
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、
を選択します。[水平スケーリング] タブをクリックし、[HPA] を選択してスケーリングステータスとタスクリストを表示します。
アプリケーションの実行が開始されると、コンテナーリソースはポッド間の負荷に基づいて自動的にスケーリングされます。 また、ステージング環境でHPAが有効になっているかどうかを確認するには、アプリケーションのポッドでCPUストレステストを実行します。
kubectlを使用してHPAが有効になっているアプリケーションを作成する
オーケストレーションテンプレートを使用してHPAを作成し、HPAを有効にするデプロイにHPAを関連付けることもできます。 次に、kubectlコマンドを実行してHPAを有効にします。 ワークロードに対してHPAが有効になっているアプリケーションを1つだけ作成することをお勧めします。 次の例では、NGINXアプリケーションでHPAが有効になっています。
nginx.ymlという名前のファイルを作成し、次の内容をファイルにコピーします。
重要アプリケーションに必要な
リクエスト
リソースを設定する必要があります。 それ以外の場合は、HPAを有効にできません。 リソースプロファイリング機能を使用して、リソース使用量の履歴データを分析し、コンテナリクエストと制限を設定するための推奨事項を取得できます。 詳細については、「リソースプロファイリング」をご参照ください。次のコマンドを実行して NGINX アプリケーションをインストールします。
kubectl apply -f nginx.yml
hpa.ymlという名前のファイルを作成し、次の内容をファイルにコピーしてHPAを作成します。
scaleTargetRef
パラメーターを使用してHPAをnginx
デプロイメントに関連付け、ポッド内のすべてのコンテナーの平均CPU使用率が50% に達したときにスケーリング操作をトリガーします。Kubernetesバージョンが1.24以降のクラスターのYAMLテンプレート
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: nginx-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: nginx minReplicas: 1 # The minimum number of containers that must run for the Deployment. The value of this parameter must be an integer greater than or equal to 1. maxReplicas: 10 # The maximum number of containers to which the Deployment can be scaled. The value of this parameter must be greater than minReplicas. metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 50 # The average utilization of the target resource, which is the ratio of the average value of resource usage to its request amount.
Kubernetesバージョンが1.24より前のクラスターのYAMLテンプレート
apiVersion: autoscaling/v2beta2 kind: HorizontalPodAutoscaler metadata: name: nginx-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: nginx minReplicas: 1 # Must be an integer greater than or equal to 1. maxReplicas: 10 # Must be greater than minReplicas. metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 50
CPUとメモリメトリクスの両方を指定する必要がある場合は、2つのHPAを作成する代わりに、
metrics
フィールドでcpu
とmemory
の両方のリソースタイプを指定できます。 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 name>
コマンドを実行すると、次の出力と同様の警告が返され、HPAがまだデプロイ中であることを示します。 この例のHPA名はnginx-hpa.ymlです。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が作成され、ポッドがスケーリング条件に達するまで待ちます。この例では、NGINXのポッド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
関連する API 操作
autocaling /v2
APIを使用すると、HPAのbehavior
パラメーターを使用してスケーリング設定を構成できます。 behavior
パラメーターでscaleUp
フィールドとscaleDown
フィールドを指定して、スケールアウトとスケールインの設定を指定できます。
機能ステータス: Kubernetes v1.23 [stable]
スケーリング操作のみを実行するようにポッドを構成する
selectPolicy
フィールドを使用して、スケールアウト操作のみまたはスケールイン操作のみを実行するようにHPAを設定できます。 詳細については、「設定可能なスケーリング動作」をご参照ください。
デフォルトでは、スケールアウトとスケールインは無効になっていません。
スケールアウトの無効化: scaleUpフィールドで
selectPolicy
を無効
に設定します。 例:behavior: scaleUp: selectPolicy: Disabled
スケーリングの無効化: scaleDownフィールドで
selectPolicy
を無効
に設定します。 例:behavior: scaleDown: selectPolicy: Disabled
安定ウィンドウの設定
スケールインとスケールアウトのメトリクスが頻繁に変動する場合は、behavior
パラメーターの下にstabilizationWindowSeconds
フィールドを追加して、一定期間安定したウィンドウを設定し、レプリカ数の変動を制限できます。 このウィンドウは、スケールインまたはスケールアウトをトリガしてシステムの予想される状態を決定する前に、HPAコントローラがメトリックデータを観察する必要がある時間を指定することができ、短期メトリック変動による過度に頻繁なまたは不必要なスケーリングを防止する。
以下の例では、ターゲットがスケールダウンすべきであることをメトリックが示す場合、自動スケーリングアルゴリズムは、過去5分間のすべての所望の状態を考慮し、ウィンドウ期間内の最大値を使用する。
behavior:
scaleDown:
stabilizationWindowSeconds: 300
よくある質問
関連ドキュメント
その他の関連ドキュメント
Alibaba Cloudメトリクスに基づいてHPAを実装するためにKubernetesでサポートされている外部メトリクスを設定する方法の詳細については、「Alibaba Cloudメトリクスに基づいて水平オートスケーリングを実装する」をご参照ください。
HPAを実装するためにManaged Service For PrometheusメトリックをHPAでサポートされているメトリックに変換する方法の詳細については、「Prometheusメトリックに基づく水平自動スケーリングの実装」をご参照ください。
HPAを使用するときによくある質問については、トラブルシューティングのためのFAQ about node auto scalingをご参照ください。
CronHPAとHPAが競合することなく対話できるようにする方法の詳細については、「CronHPAをHPAと互換性のあるものにする」をご参照ください。
その他のワークロードスケーリングソリューション
アプリケーションリソースの使用状況に定期的な変更があり、Crontabのような戦略に従ってポッドを定期的にスケーリングする必要がある場合は、「スケジュールされた水平スケーリングにCronHPAを使用する」をご参照ください。
アプリケーションのリソース使用量に定期的な変更があり、ルールで定義するのが難しい場合は、Advanced Horizontal Pod Autoscasing (AHPA) を使用して、リソース使用サイクルを自動的に識別し、履歴メトリックに基づいてポッドをスケーリングできます。 詳細については、「AHPAの概要」をご参照ください。
ポッドが十分なコンピューティングリソースを確保するために、ポッドリソースの使用状況に基づいてポッドのリソース制限を自動的に設定する必要がある場合は、「垂直ポッドオートスケーラーの使用」をご参照ください。
メッセージキュー、タイミング戦略、カスタムメトリクス、およびその他のKubernetesイベントに基づいてポッドのスケーリングポリシーを柔軟にカスタマイズする必要がある場合は、「ACK KEDA」をご参照ください。
組み合わせソリューション
ノードオートスケーリング機能を備えたHPAを使用すると、クラスターノードリソースが不足している場合にノードを自動的にスケーリングできます。 詳細については、「ノードの自動スケーリングの有効化」をご参照ください。