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

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

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

概要

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

Standard クラスタの CIDR 範囲

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

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

次の表では、ノードあたりの最大 Pod 数別に、CIDR ブロックのサイズと、Kubernetes がノードに割り振る IP アドレスの最大数を示します。

ノードあたりの最大 Pod 数 ノードあたりの CIDR 範囲 IP アドレスの数
8 /28 16
9~16 /27 32
17~32 /26 64
33~64 /25 128
65~110 /24 256

Autopilot クラスタの CIDR 設定

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

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

Autopilot は、ノードあたりの最大 Pod 数が 32 になります。GKE Standard の場合と同様に、ノードごとに /26 範囲がプロビジョニングされます(つまり 64 個の IP)。Pod アドレスの範囲が /17 の場合、クラスタは最大で 511 ノードまでサポートされます(ノードあたり 32,766 の IP / 64 の IP アドレス)。

指定した Pod アドレスの CIDR 範囲が、予想される最大クラスタサイズをサポートするのに十分な大きさであることを確認します。クラスタの最大拡張をサポートするために、範囲 /16(たとえば、cluster-ipv4-cidr=10.0.0.0/16)を指定することをおすすめします。

Pod の最大数を削減する

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

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

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

制限事項

  • VPC ネイティブ クラスタでは、ノードあたりの最大 Pod 数のみ構成できます。
  • ノードの作成は、Pod のアドレス範囲内の使用可能なアドレスの数に限定されます。Pod のアドレス範囲のデフォルト サイズ、最小サイズ、最大サイズについては、IP アドレス範囲の計画表をご覧ください。また、不連続マルチ 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 を使用します。

gcloud

gcloud ツールを使用してデフォルトのノードごとの最大 Pod 数を設定するには、次のコマンドを実行します。

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

次のように置き換えます。

  • CLUSTER_NAME: 新しいクラスタの名前。
  • SUBNET_NAME: クラスタの新しいサブネットワークの名前。
  • MAXIMUM_PODS: クラスタのデフォルトのノードあたりの最大 Pod 数。省略した場合は、Kubernetes によってデフォルト値の 110 が割り当てられます。
  • 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. [作成] をクリックします。

クラスタのノードあたりの最大 Pod 数を構成すると、Kubernetes はこの値を使用してノードに CIDR 範囲を割り当てます。Pod のクラスタの IPv4 CIDR 範囲とノードに割り当てられた CIDR 範囲に基づいて、クラスタの最大ノード数を計算できます。

たとえば、Pod のデフォルトの最大数を 110 に設定し、Pod に対するクラスタの IPv4 CIDR 範囲を /21 に設定した場合、Kubernetes は /24 の CIDR 範囲をクラスタのノードに割り当てます。これにより、そのクラスタには、最大 2(24-21) = 23 = 8 個のノードが存在できるようになります。

同様に、デフォルトの最大 Pod 数を 8 に設定し、Pod に対するクラスタの IPv4 CIDR 範囲を /21 に設定した場合、Kubernetes は /28 の CIDR 範囲をノードに割り当てます。これにより、そのクラスタには、最大 2(28-21) = 27 = 128 個のノードが存在できるようになります。

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

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

ノードプール レベルで Pod の最大数を設定すると、クラスタレベルのデフォルトの最大値がオーバーライドされます。ノードプールの作成時にノードあたりの最大 Pod 数を構成しない場合は、クラスタレベルの最大数が適用されます。

gcloud

gcloud container node-pools create POOL_NAME \
    --cluster CLUSTER_NAME \
    --max-pods-per-node MAXIMUM_PODS

次のように置き換えます。

  • POOL_NAME: 新しいノードプールの名前。
  • CLUSTER_NAME: ノードプールを作成するクラスタの名前。
  • MAXIMUM_PODS: ノードプール内の Pod の最大数。

Console

  1. Cloud Console で Google Kubernetes Engine のページに移動します。

    Google Kubernetes Engine に移動

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

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

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

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

次のステップ