このページでは、Standard クラスタのノードで実行可能な Pod の最大数を構成する方法について説明します。この値により、Google Kubernetes Engine(GKE)上のノードに割り振られる IP アドレス範囲の大きさが決まります。ノードで実行される Pod には、そのノードに割り当てられた CIDR 範囲から IP アドレスが割り振られます。
スケジューリングを行う際、GKE はノードあたりの Pod の最大数を使用して、Pod をスケジュールするのに十分な容量があるかどうかを判断します。ノードに割り当てられ、まだ終了していない Pod(Failed
または Succeeded
フェーズ)のみがこの容量としてカウントされます。
Autopilot クラスタでは、ノードの最大数は事前構成済みで不変であるため、このページの手順は適用されません。
始める前に
作業を始める前に、次のことを確認してください。
- Google Kubernetes Engine API を有効にします。 Google Kubernetes Engine API の有効化
- このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化します。すでに gcloud CLI をインストールしている場合は、
gcloud components update
を実行して最新のバージョンを取得します。
制限事項
- 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 数を構成できます。クラスタまたはノードプールの作成後に、この設定を変更することはできません。
ただし、Pod の IP アドレスが不足している場合は、不連続マルチ Pod CIDR を使用して、Pod の IP アドレス範囲を追加作成できます。
クラスタの作成時に Pod アドレス範囲のサイズを設定するには、gcloud CLI または Google Cloud コンソールを使用します。
gcloud
gcloud CLI を使用してノードあたりのデフォルトの最大 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.5.32.0/27 \
--default-max-pods-per-node=MAXIMUM_PODS \
--location=COMPUTE_LOCATION
次のように置き換えます。
CLUSTER_NAME
: 新しいクラスタの名前。SUBNET_NAME
: クラスタの新しいサブネットワークの名前。MAXIMUM_PODS
: クラスタのノードあたりのデフォルトの最大 Pod 数。256
まで構成できます。省略した場合は、Kubernetes によってデフォルト値の110
が割り当てられます。COMPUTE_LOCATION
: 新しいクラスタの Compute Engine のロケーション。
コンソール
Google Cloud コンソールで Google Kubernetes Engine のページに移動します。
[add_box 作成] をクリックします。
新しいクラスタを構成します。
ナビゲーション パネルの [クラスタ] の下の [ネットワーキング] をクリックします。
[VPC ネイティブのトラフィック ルーティングを有効にする(エイリアス IP を使用)] チェックボックスが選択されていることを確認します。
ナビゲーション パネルで、[ノードプール] の下の [ノード] をクリックします。
[ノードあたりの最大 Pod 数] フィールドを
110
に設定します。GKE はこの値を使用して、ノードに割り当てられている IP アドレス範囲のサイズを調整します。[作成] をクリックします。
クラスタのノードあたりの最大 Pod 数を構成すると、Kubernetes はこの値を使用してノードに CIDR 範囲を割り当てます。Pod のクラスタのセカンダリ IP アドレス範囲とノードに割り当てられた CIDR 範囲に基づいて、クラスタの最大ノード数を計算できます。
たとえば、Pod のデフォルトの最大数を 110
に設定し、Pod のセカンダリ IP アドレス範囲を /21
に設定すると、Kubernetes は /24
の CIDR 範囲をクラスタのノードに割り当てます。これにより、そのクラスタには、最大 2(24-21) = 23 = 8
個のノードが存在できるようになります。
同様に、Pod のデフォルトの最大数を 8
に設定し、Pod のクラスタのセカンダリ IP アドレス範囲を /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 の最大数。
コンソール
Google Cloud コンソールで Google Kubernetes Engine のページに移動します。
クラスタのリストで、変更するクラスタの名前をクリックします。
add_box [ノードプールを追加] をクリックします。
ナビゲーション パネルで [ノード] をクリックします。
[ネットワーキング] で、[ノードあたりの最大 Pod 数] フィールドに値を入力します。GKE はこの値を使用して、ノードに割り当てられている IP アドレス範囲のサイズを調整します。
ノードあたりのデフォルトの最大 Pod 数について
デフォルトでは、GKE は Standard クラスタでノードあたり最大 110 の Pod が可能ですが、Standard クラスタはノードあたり最大 256 の Pod が可能になるように構成できます。Autopilot クラスタは、予想されるワークロード Pod の密度に基づいて、ノードあたりの最大 Pod 数を 8~256 の範囲から選択します。Kubernetes は、各 Pod に一意の IP アドレスが指定されるように、各ノードに IP アドレスの範囲(CIDR ブロック)を割り当てます。CIDR ブロックのサイズは、ノードあたりの最大 Pod 数に対応します。
Standard クラスタの Pod の CIDR 範囲
Standard クラスタで、デフォルトの 1 ノードあたり最大 110 個の Pod の場合、Kubernetes は各ノードに /24 CIDR ブロック(256 アドレス)を割り当てます。ノードで作成できる Pod の最大数の 2 倍以上の利用可能な IP アドレスを指定することで、ノードの Pod が追加 / 削除される際、Kubernetes による IP アドレスの再利用を抑制できます。
ノードあたりの Pod 数は 256 がハードリミットですが、ノードの Pod 数は減らすことができます。ノードに割り当てられる CIDR ブロックのサイズは、ノードあたりの最大 Pod 数によって異なります。ブロックには、ノードあたりの最大 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~128 | /24 | 256 |
129~256 | /23 | 512 |
Autopilot クラスタの Pod の CIDR 範囲
Autopilot クラスタの CIDR サイズのデフォルト設定は次のとおりです。
- サブネットワークの範囲: /23
- Pod のセカンダリ IP アドレスの範囲: /17
- サービスのセカンダリ IP アドレスの範囲: /22
Autopilot は、ノードあたりの最大 Pod 数が 32 になります。GKE Standard の場合と同様に、ノードごとに /26
範囲がプロビジョニングされます(つまり 64 個の IP)。Pod アドレスの範囲が /17
の場合、クラスタは最大で 511 ノードまでサポートされます(ノードあたり 32,766 の IP / 64 の IP アドレス)。
指定する Pod のセカンダリ IP アドレス範囲が、予想される最大クラスタサイズをサポートするのに十分な大きさであることを確認します。クラスタの最大拡張をサポートするために、範囲 /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 IP アドレスをクラスタに追加する方法を確認する。
- GKE への移行時の IP アドレス管理戦略を確認する。
- GKE IP アドレスの使用率の分析情報を確認する。