ノードプールについて


このページでは、Google Kubernetes Engine(GKE)でのノードプールの仕組みについて説明します。ノードプールとは、クラスタ内で同じ構成を持つノードのグループのことです。GKE Standard モードでは、ワークロードのニーズに合わせてノードプールのさまざまなオプションを選択できます。Autopilot を使用する場合は、ノードプールを構成する必要はありません。ノードは GKE により管理されます。

Standard モード クラスタの作成について詳しくは、リージョン クラスタを作成するゾーンクラスタを作成するをご覧ください。既存の Standard クラスタでノードプールを管理する方法については、ノードプールの追加と管理をご覧ください。

概要

ノードプールとは、クラスタ内で同じ構成を持つノードのグループのことです。ノードプールでは、NodeConfig の仕様が使用されます。プール内の各ノードには Kubernetes ノードのラベル(cloud.google.com/gke-nodepool)が付けられており、ラベルの値はノードプールの名前です。

Standard モードのクラスタを作成すると、クラスタの最初のノードプールが指定したノード数とノードタイプを使用して作成されます。デフォルトでは、この最初のノードプール(デフォルト ノードプール)は、クラスタの各コンピューティング ゾーンの 3 つのノード、デフォルトのノードイメージ cos_containerd、汎用マシンタイプで構成されています。ワークロードの要件に応じて、ノードプールにさまざまなプロパティを指定できます。たとえば、ローカル SSD最小 CPU プラットフォームSpot VM、異なるノードイメージ、さまざまなマシンタイプ、より効率的な仮想ネットワーク インターフェースを使用して、クラスタ内のノードプールを作成できます。

その後、別のサイズやタイプのノードプールをクラスタに追加できます。ノードプール内のノードはすべて同一になります。

カスタムのノードプールは、他より多くのリソース(メモリやローカル ディスク容量など)を必要とする Pod をスケジュールする必要がある場合に役立ちます。Pod をスケジュールする場所をより細かく管理する場合は、ノード taints を使用できます。

クラスタ全体に影響を与えることなく、ノードプールの作成、アップグレード、削除を個別に行うことができます。ノードプール内に単一ノードを構成することはできません。構成は、ノードプール内のすべてのノードに影響します。

クラスタ内のノードプールのサイズを変更するには、ノードを追加または削除します。

デフォルトでは、すべての新しいノードプールがコントロール プレーンと同じバージョンの Kubernetes を実行します。既存のノードプールは手動でアップグレードすることも、自動的にアップグレードすることもできます。また、クラスタ内の各ノードプールでは複数の Kubernetes ノード バージョンを実行できます。ノードプールを個別に更新することも、特定のデプロイに対して異なるノードプールをターゲットとして指定することもできます。

特定のノードプールに Service をデプロイする

Service を定義すると、デプロイ先のノードプールを間接的に制御できます。ノードプールは、Service の構成ではなく、Pod の構成に依存します。

  • Pod マニフェストに nodeSelector を設定することにより、Pod を特定のノードプールに明示的にデプロイできます。こうすることで、Pod はそのノードプール内のノードでのみ実行されるようになります。例については、Pod を特定のノードプールにデプロイするをご覧ください。

  • コンテナのリソース リクエストを指定できます。Pod は、リソース リクエストを満たすノードでのみ実行されます。たとえば、Pod 定義に 4 つの CPU を必要とするコンテナが含まれている場合、Service は 2 つの CPU を持つノード上で動作する Pod を選択しません。

マルチゾーン クラスタまたはリージョン クラスタ内のノード

マルチゾーン クラスタまたはリージョン クラスタを作成すると、すべてのノードプールがこれらのゾーンに自動的に複製されます。新しいノードプールも、これらのゾーンに自動的に作成されます。同様に、あるゾーンからノードプールを削除すると、それらのノードプールが他のゾーンからも削除されます。

この乗法効果のため、ノードプールを作成すると、特定のリージョンに対するプロジェクトの割り当ての消費が増える場合があります。

ノードプールの削除

ノードプールを削除すると、GKE はノードプール内のすべてのノードをドレインし、すべての Pod を削除してスケジュールを再設定します。このドレイン プロセスでは、GKE によってノードプール内の各ノードの Pod が削除されます。ノードプールの各ノードは、割り当てられた猶予期間の MAX_POD で Pod を削除することによって、ドレインされます。MAX_POD は、ノードに対してスケジュール済みの Pod に設定される最大 terminationGracePeriodSeconds で、1 時間の上限に設定されます。ノードプールの削除中に PodDisruptionBudget の設定は適用されません。

Pod に特定のノードセレクタが設定されており、クラスタ内の他のノードが条件を満たさない場合、その Pod はスケジュールできない状態のままになることがあります。

クラスタが削除されると、GKE はノードをドレインして正常に終了するプロセスを実行しません。クラスタで実行されているワークロードを正常に終了する必要がある場合は、クラスタを削除する前に kubectl drain を使用してワークロードをクリーンアップします。

ノードプールを削除するには、ノードプールを削除するをご覧ください。

次のステップ