IP アドレス割り振りの最適化

このページでは、標準クラスタのノードで実行可能な Pod の最大数を構成する方法について説明します。この値により、Google Kubernetes Engine 上のノードに割り当てられる IP アドレス範囲の大きさが決まります。ノードで実行される Pod には、そのノードの Pod の CIDR 範囲から IP アドレスが割り振られます。

Autopilot クラスタでは、ノードの最大数は事前構成済みで不変であるため、このページの手順は適用されません。

概要

GKE は、デフォルトで、標準クラスタのノードを 110 個以下の Pod が実行されるように構成します。Autopilot クラスタには、ノードあたり最大 32 個の Pod があります。Kubernetes は、各 Pod に一意の IP アドレスが指定されるように、各ノードに IP アドレスの範囲(CIDR ブロック)を割り当てます。CIDR ブロックのサイズは、ノードあたりの最大 Pod 数に対応します。

標準クラスタの CIDR 範囲

標準クラスタで、デフォルトの 1 ノードあたり最大 110 個の Pod の場合、Kubernetes は各ノードに /24 CIDR ブロック(256 アドレス)を割り当てます。ノードで作成できる Pod 数のおよそ 2 倍の IP アドレスの利用可能範囲を指定することで、ノードの Pod が追加 / 削除されるときに、Kubernetes による IP アドレスの再利用を抑制できます。

1 ノードあたりの Pod 数が 110 というのがハードリミットですが、ノードあたりの Pod 数を減らすことはできます。ポッド数をデフォルト値から減らすと、Kubernetes は、これに対応してそのノードにより小さい CIDR ブロックを割り当てます。ブロックには、ノードあたりの最大ポッド数の少なくとも 2 倍のアドレス範囲があります。以下の表は、1 ノードあたりの最大ポッド数に基づいて Kubernetes が各ノードに割り当てる CIDR ブロックのサイズを示しています。

ノードあたりの最大ポッド数 ノードあたりの CIDR 範囲
8 /28
9~16 /27
17~32 /26
33~64 /25
65~110 /24

ノードあたりの最大ポッド数を構成すると、各クラスタノードに必要な IP アドレス空間の量が間接的に構成されます。たとえば、ノードあたりの最大ポッド数を 30 に設定した場合、上の表によると、/26 CIDR 範囲が使用され、各ノードに 64 個の IP アドレスが割り当てられます。ノードあたりの最大 Pod 数を構成しない場合は、/24 CIDR 範囲が使用され、各ノードに 256 個の IP アドレスが割り当てられます。

Autopilot クラスタの CIDR 設定

Autopilot クラスタの CIDR サイズのデフォルト設定は次のとおりです。

  • サブネットワークの範囲: /23
  • クラスタ IP4 CIDR(Pod の範囲): /17
  • Service IP4 CIDR(Service の範囲): /22

Pod の最大数を削減する

ノードあたりの最大 Pod 数を減らすと、IP アドレス空間全体の各ノードに必要な部分が少なくなるため、クラスタにより多くのノードを指定できます。あるいは、クラスタの作成時に Pod により小さい IP アドレス空間を指定すると、クラスタ内で同じ数のノードをサポートできます。

ノードあたりの最大 Pod 数を減らすと、必要な IP アドレスが少ない、より小さなクラスタを作成することもできます。たとえば、ノードあたりのポッド数が 8 の場合、各ノードに /28 CIDR が付与されます。これらの Pod IP アドレス範囲とユーザー定義のサブネットおよびセカンダリ範囲によって、クラスタを正常に作成するために必要な IP アドレスの数が決まります。

クラスタの作成時およびノードプールの作成時にノードあたりの最大 Pod 数を構成できます。

制限事項

  • VPC ネイティブ クラスタでのみ、ノードあたりの最大ポッド数を構成できます。
  • ノードの作成は、Pod のアドレス範囲内の使用可能なアドレスの数に限定されます。Pod のアドレス範囲のデフォルト サイズ、最小サイズ、最大サイズについては、こちらの表をご覧ください。また、不連続マルチ Pod CIDR を使用して、Pod の IP アドレスを追加することもできます。
  • 各クラスタでは、kube-system Namespace に kube-proxy などの kube-system Pod を作成する必要があります。ノードあたりの最大 Pod 数を減らす場合は、Pod とシステム Pod の両方を考慮する必要があります。クラスタ内のシステム Pod は、次のコマンドで一覧表示できます。

    kubectl get pods --namespace kube-system
    

ノードあたりの最大 Pod 数の構成

クラスタまたはノードプールの作成時にノードあたりの最大ポッド数を構成できます。クラスタまたはノードプールの作成後に、この設定を変更することはできません。

ただし、Pod の IP アドレスが不足している場合は、不連続マルチ Pod CIDR を使用して、Pod の IP アドレス範囲を追加作成できます。

クラスタの作成時に Pod アドレス範囲のサイズを設定するには、gcloud ツールまたは Google Cloud Console を使用します。

ノードあたりの最大 110 個の Pod を持つクラスタを作成する

gcloud

gcloud container clusters create cluster-name \
  --enable-ip-alias --cluster-ipv4-cidr=10.0.0.0/21 \
  --create-subnetwork=name='cluster-name-subnet',range=10.4.32.0/27 \
  --services-ipv4-cidr=10.4.0.0/19 --default-max-pods-per-node=110 \
  --zone=compute-zone

Console

  1. Cloud Console で Google Kubernetes Engine のメニューに移動します。

    Google Kubernetes Engine のメニューに移動

  2. [ 作成] をクリックします。

  3. 必要に応じてクラスタを構成します。

  4. ナビゲーション パネルの [クラスタ] の下の [ネットワーキング] をクリックします。

  5. [VPC ネイティブのトラフィック ルーティングを有効にする(エイリアス IP を使用)] チェックボックスが選択されていることを確認します。

  6. ナビゲーション パネルで、[ノードプール] の下の [ノード] をクリックします。

  7. [ノードあたりの最大 Pod 数] フィールドを 110 に設定します。GKE はこの値を使用して、ノードに割り当てられている IP アドレス範囲のサイズを調整します。

  8. [作成] をクリックします。

これにより、最大 8 つのノードを含めることができるクラスタが作成されます。ノードあたりの最大ポッド数に基づいて、Kubernetes は各ノードにノードのポッドで使用するための /24 CIDR 範囲を付与します。このクラスタは /21 CIDR 範囲(cluster-ipv4-cidr)からポッドの IP アドレスを割り当てるため、最大 8 つのノードが存在できます(24-21 = 3、23 = 8)。110 がデフォルト値であるため、default-max-pods-per-node オプションは省略できます。

ノードあたり最大 8 個の Pod を持つクラスタを作成する

gcloud

gcloud container clusters create cluster-name \
  --enable-ip-alias --cluster-ipv4-cidr=10.0.0.0/21 \
  --create-subnetwork=name='cluster-name-subnet',range=10.4.32.0/21 \
  --services-ipv4-cidr=10.4.0.0/19 --default-max-pods-per-node=8 \
  --zone=compute-zone

Console

  1. Cloud Console で Google Kubernetes Engine のメニューに移動します。

    Google Kubernetes Engine のメニューに移動

  2. [ 作成] をクリックします。

  3. 必要に応じてクラスタを構成します。

  4. ナビゲーション パネルの [クラスタ] の下の [ネットワーキング] をクリックします。

  5. [VPC ネイティブのトラフィック ルーティングを有効にする(エイリアス IP を使用)] チェックボックスが選択されていることを確認します。

  6. ナビゲーション パネルで、[ノードプール] の下の [ノード] をクリックします。

  7. [ノードあたりの最大 Pod 数] フィールドを 8 に設定します。GKE はこの値を使用して、ノードに割り当てられている IP アドレス範囲のサイズを調整します。

  8. [作成] をクリックします。

これにより、最大 128 個のノードを含めることができるクラスタが作成されます。ノードあたりの最大ポッド数に基づいて、Kubernetes は各ノードにノードのポッドで使用するための /28 CIDR 範囲を付与します。すべての Pod に使用可能な範囲(cluster-ipv4-cidr)が /21 範囲であるため、最大 128 個のノードが存在できます(28-21 = 7、27 = 128)。

既存のクラスタの新しいノードプールに Pod の最大数を設定する

既存のクラスタにノードプールを作成するときに、ノードあたりの最大 Pod 数を指定することもできます。新しいノードプールを作成すると、default-max-pods-per-node がクラスタレベルで構成されていない既存のクラスタでも、IP アドレスの割り当てを最適化できます。

gcloud

gcloud container node-pools create pool-name \
  --cluster=cluster-name \
  --max-pods-per-node=30

Console

  1. Cloud Console の GKE メニューに移動します。

    Google Kubernetes Engine のメニューに移動

  2. クラスタのリストで、変更するクラスタの名前をクリックします。

  3. [ノードプールを追加] をクリックします。

  4. ナビゲーション パネルで [ノード] をクリックします。

  5. [ネットワーキング] で、[ノードあたりの最大 Pod 数] フィールドに値を入力します。GKE はこの値を使用して、ノードに割り当てられている IP アドレス範囲のサイズを調整します。

この値は、クラスタレベルで適用される default-max-pods-per-node オプションをオーバーライドします。ノードプールを作成するときに max-pods-per-node オプションを省略すると、クラスタレベルのデフォルト構成が使用されます。

次のステップ