クラスタ オートスケーラーについて

このトピックでは、ノードプールのサイズを自動的に制御するクラスタ オートスケーラーについて説明します。

ノードプールの自動スケーリング

クラスタ オートスケーラーは、ワークロードの需要に基づいて、特定のノードプール内のノード数を自動的に変更します。ノードを手動で追加または削除する必要はありません。また、ノードプールを過剰にプロビジョニングする必要もありません。ノードプールの最小サイズと最大サイズを指定するだけで、あとは自動的に設定されます。

クラスタの自動スケーリング中にリソースを削除または移動する必要がある場合は、ワークロードが一時的に中断する可能性があります。たとえば、ワークロードが 1 つのレプリカを持つコントローラで構成されている場合は、現在のノードを削除すると、レプリカの Pod は別のノードに再スケジュール設定される可能性があります。このため、一時的な中断が発生する可能性を許容するようにワークロードを設計するか、重要な Pod で割り込みが発生しないように設計する必要があります。

クラスタ オートスケーラーの仕組み

クラスタ オートスケーラーはノードプール単位で機能します。クラスタ オートスケーラーを使用してノードプールを構成する場合は、ノードプールの最小サイズと最大サイズを指定します。ノードプールの作成またはノードプールの更新時に、最小サイズと最大サイズを変更できます。

クラスタ オートスケーラーは、実際のリソース使用率ではなく、ノードプール内のリソース要求に基づいて、ノードプールのサイズを自動的に増減します。クラスタ オートスケーラーは、Pod オブジェクトがスケジュール不可能であり、リクエストに対応するためのノードプール内の容量が不足している場合にノードを追加します。

クラスタ オートスケーラーは、ノードが十分に活用されておらず、すべての Pod オブジェクトが少数のノードでスケジュールされる可能性がある場合にも、ノードを削除します。ノードが 10 分後に正常にドレインされなかった場合、ノードは強制終了されます。この期間は構成できません。

Pod がリクエストするリソースが少なすぎる場合(たとえば、デフォルト値が過小な場合)、クラスタ オートスケーラーは状況を改善できません。クラスタ オートスケーラーが正常に動作するように、すべてのワークロードで適切なリソース リクエストを行う必要があります。詳細については、コンテナのリソースの管理をご覧ください。

動作条件

クラスタ オートスケーラーは、次のことを前提としてノードプールのサイズを変更します。

  • 複製対象のすべての Pod オブジェクトを、他のノードで再起動できるものとします。これにより、短い中断が発生する可能性があります。ワークロードが中断を容認しない場合は、自動スケーリングを無効にしてノードプールで実行するようにワークロードを構成します。詳細については、ノード taint を使用してスケジューリングを制御するをご覧ください。
  • クラスタ オートスケーラーは、手動で行ったノード管理オペレーションをオーバーライドできます。
  • 1 つのノードプール内のすべてのノードは同じラベルセットを持つものとします。
  • クラスタ オートスケーラーは、スケールアップ後にアイドル状態の CPU または未使用のメモリを持つ最小限のノードグループを選択します。この動作は、同じクラスタ内に異なるサイズのノード(たとえば、ハイ CPU やハイメモリ ノード)がある場合に、どのノードプールがスケールアップされるかに影響します。

ノードプールの最小サイズと最大サイズ

min-nodes フラグと max-nodes フラグを使用して、クラスタ内の各ノードプールの最小サイズと最大サイズを指定できます。自動スケーリングを無効にするには、min-nodesmax-nodes を同じ値に設定します。クラスタ オートスケーラーは、このサイズの範囲内でスケーリングの決定を実行します。

ノードプールの最大サイズを設定する際には、すべてのワークロードを実行するのに十分な大きさであることを確認してください。クラスタ内のノードプールにすべてのワークロードを実行するのに十分なメモリと CPU がない場合、停止する可能性があります。

PodDisruptionBudget を使用してワークロードを保護する

PodDisruptionBudget を使用すると、GKE on Azure を構成してワークロードの中断を防ぐことができます。PodDisruptionBudget を作成するときは、使用可能な Pod レプリカの最小数、または任意の時点で使用できない可能性がある Pod レプリカの最大数を指定します。詳細については、アプリケーションの停止予算を指定するをご覧ください。

次のステップ