水平ポッド自動スケーリング

このページでは、水平ポッド オートスケーラー(HPA)の概要とその仕組みについて説明します。クラスタで水平ポッド オートスケーラーを構成し、使用する方法についてもご覧ください。

HPA では、ワークロードの CPU やメモリの消費量、Kubernetes から報告されるカスタム指標、クラスタ外部のソースから取得した外部指標に応じてポッド数を自動的に調整することで、Kubernetes ワークロードの形状を変更します。

HPA は、DaemonSets など、スケーリングできないワークロードには使用できません。

概要

Kubernetes クラスタにワークロードを初めてデプロイする段階では、明確なリソース要件を把握することはできません。使用パターン、外部依存関係などの要因でリソース要件がどのように変化するのかは予測できません。HPA を使用すると、状況が変化してもワークロードの機能を維持できます。本当に必要な場合にのみ有料で容量を増やすようにして、コストを管理できます。

指標からワークロードのリソース不足や低使用率を予測するのは必ずしも簡単なことではありません。HPA は、次のタイプの指標に基づいて、ワークロード内のポッド数を自動的に調整します。

  • 実際のリソース使用量: 特定のポッドの CPU またはメモリ使用量がしきい値を超えているかどうかを判断できます。これは、そのままの数値で表すことも、そのリソースに対するポッドの要求数の割合で表すこともできます。

  • カスタム指標: 1 秒あたりのクライアント要求数や、1 秒あたりの I/O 書き込み数など、クラスタ内の Kubernetes オブジェクトによって報告される任意の指標です。

    これは、アプリケーションが CPU やメモリではなく、ネットワークのボトルネックになりやすい場合に有効です。

  • 外部指標: クラスタ外部のアプリケーションやサービスから取得した指標です。

    たとえば、Pub/Sub などのパイプラインから大量の要求を取り込むと、ワークロードの CPU 使用量が増えることがあります。キューのサイズに外部指標を作成して、キューサイズが所定のしきい値に達したときにポッド数を自動的に増やし、キューサイズが縮小したときにポッド数を減らすように HPA を構成できます。

HPA と垂直ポッド オートスケーラーを併用することもできますが、その場合、次のセクションで説明するような制限事項があります。

HPA の仕組み

構成した水平ポッド オートスケーラーのオブジェクトは制御ループを使用して動作します。ワークフローごとに個別の HPA オブジェクトが存在します。HPA オブジェクトは、特定のワークロードの指標と構成する目標しきい値と定期的に比較し、ワークロードの形状を自動的に変更します。

ポッドごとのリソース

CPU など、ポッドごとに割り当てられるリソースの場合、コントローラは API を使用して、ポッドで実行されるコンテナごとにリソースの指標を取得します。

  • CPU またはメモリに未加工の値を指定した場合は、その値が使用されます。
  • CPU またはメモリのパーセンテージ値を指定した場合、HPA はそのポッドの CPU またはメモリ要求の割合として平均使用率を計算します。
  • カスタム指標と外部指標は、未加工の値または平均値で表します。

コントローラは、報告された指標の平均値または未加工値を使用して比率を計算し、その比率を使用してワークロードを自動的にスケーリングします。詳しくは、Kubernetes プロジェクト ドキュメントで水平ポッド オートスケーラーのアルゴリズムの説明をご覧ください。

複数の指標への対応

ワークロードを複数の指標に基づいて自動スケーリングするように構成した場合、HPA はそれぞれの指標を個別に評価し、スケーリング アルゴリズムを使用して新しいワークロードのスケールを特定します。自動スケーリングのアクションには最大スケールが選択されています。

なんらかの理由で 1 つ以上の指標が利用できない場合でも、HPA は計算した最大サイズに基づいてスケールアップを行いますが、スケールダウンは行いません。

スラッシングの防止

スラッシングとは、ワークロードが前の自動スケーリングへの対応を完了する前に、HPA が新しい自動スケーリングを試みた状況を意味します。スラッシングを防ぐため、HPA は直近 5 分間の状況に基づいて最大の推奨値を選択します。

制限事項

  • CPU またはメモリに対して、HPA と垂直ポッド オートスケーラー(VPA)を併用しないでください。ただし、HPA が CPU やメモリ以外の指標を評価する場合は、VPA と HPA を併用できます。
  • Deployment がある場合は、ReplicaSet またはそのレプリケーション コントローラに HPA を構成しないでください。Deployment またはレプリケーション コントローラにローリング アップデートを実行すると、新しいレプリケーション コントローラに置き換わります。このため、Deployment 自体に HPA を構成してください。

HPA オブジェクトの操作

ワークロードの HPA の構成は、Google Cloud Console の [ワークロード] ページで行います。このページでは、自動スケーリング イベントに関する情報とそのイベントの原因を確認できます。

HPA は、クラスタ内で hpa オブジェクトとして存在します。これらのオブジェクトを操作するには、kubectl get hpakubectl describe hpa [HPA-NAME] などのコマンドを使用します。

また、hpa オブジェクトを作成するには、kubectl autoscale コマンドを使用します。

HPA の構成と監視の詳細については、水平ポッド オートスケーラーの構成をご覧ください。

次のステップ