GKE IP アドレス使用率の分析情報

このページでは、Google Kubernetes Engine(GKE)IP アドレス使用率に関するネットワーク アナライザの分析情報について説明します。すべての分析情報の種類の詳細については、分析情報のグループと種類をご覧ください。

Recommender API で分析情報を表示する

これらの分析情報を gcloud CLI または Recommender API で表示するには、次の分析情報の種類を使用します。

  • google.networkanalyzer.container.ipAddressInsight

次の権限が必要です。

  • recommender.networkAnalyzerGkeIpAddressInsights.list
  • recommender.networkAnalyzerGkeIpAddressInsights.get

ネットワーク アナライザの分析情報に Recommender API を使用する方法の詳細については、Recommender CLI と API の使用をご覧ください。

GKE Pod の範囲の割り振りが多い

この分析情報は、GKE クラスタの Pod アドレス範囲の IP アドレス使用率が 80% を超えていることを示しています。GKE Pod の IP アドレス割り振りポリシーは、クラスタが VPC ネイティブ クラスタとして作成されたか、ルートベース クラスタとして作成されたかによって異なります。

ルートベース クラスタ

GKE では、Pod 間でトラフィックを転送する方法によってクラスタを区別できます。Google Cloud のルートを使用するクラスタは、ルートベース クラスタと呼ばれています。詳細については、ルートベース クラスタの作成をご覧ください。

ルートベース クラスタには、Pod と Service のために使用される IP アドレスの範囲が存在します。この範囲は Pod と Service の両方に使用されますが、Pod アドレス範囲と呼ばれています。

Pod アドレス範囲の最後の /20 がサービスに使用されます。/20 の範囲の場合は、212 = 4096 個のアドレスが存在します。そのため、4096 個のアドレスがサービスに使用され、残りの範囲は Pod に使用されます。

Pod のアドレス範囲の各ノードには、Pod 用の /24 範囲の IP アドレスがあります。/24 の範囲の場合は、28 = 256 個のアドレスが存在します。Pod アドレス範囲内の 4096 個のアドレスがサービスに使用されていることを思い出してください。Pod アドレス範囲の残りの部分は Pod 用に使用され、ノード数 x 256 個のアドレスを保持するのに十分な大きさでなければなりません。

Pod のアドレス範囲の割り振り率は次のように計算されます。

$\frac{\text {GKE ノード数} \times {256}}{\text {Pod アドレス範囲のサイズ}-{4096}}$

たとえば、900 ノードクラスタを作成するとします。この場合、Pod 用の 900 x 256 = 230,400 個のアドレスが必要になります。今度は /14 の Pod アドレス範囲があるとします。/14 の範囲の場合は、218 = 262,144 個のアドレスが存在します。サービスに使用される 4096 個のアドレスを引くと、258,048 になります。これは 900 個のノードに対して十分です。

VPC ネイティブ クラスタ

GKE では、Pod 間でトラフィックを転送する方法によってクラスタを区別できます。エイリアス IP アドレス範囲を使用するクラスタは、VPC ネイティブ クラスタと呼ばれます。詳細については、VPC ネイティブ クラスタをご覧ください。

VPC ネイティブ クラスタでノードプールを作成するときに、GKE Pod の IP を割り振るセカンダリ IP アドレス範囲を選択します。ノードプールごとに異なるセカンダリ範囲を使用して、Pod の IP アドレスを割り振ることができます。詳細については、マルチ Pod CIDR をご覧ください。ネットワーク アナライザは、特定のクラスタの Pod IP アドレスの割り振りに使用されるセカンダリ IP アドレス範囲ごとに割り振り率を計算します。全体的な割り振り率が 80% を超えると、高使用率に関する分析情報が提供されます。

単一のセカンダリ IP アドレス範囲の割り振り率は次のように計算されます。

$\frac{\text {ノードに割り振られるセカンダリ範囲の IP アドレス}}{\text {セカンダリ範囲のサイズ}}$

たとえば、/24 セカンダリ Pod 範囲は 256 Pod を保持できます。デフォルトの max_pods_per_node11016 の Pod を実行しているノードが 1 個のみ存在する場合、240 個の Pod IP アドレスが使用されていなくても、それらはまだこのノードに属しているため、比率は 6.25%(16/256)ではなく 100%(256/256)として表示されます。未使用の Pod IP アドレスが 256 個ある場合のみ、別の新しいノードを正常に作成できます。

全体の割り振り率は次のように計算されます。

$\frac{\text {Pod IP アドレスの割り振りに使用されるすべてのセカンダリ IP アドレス範囲に割り振られた IP の合計}}{\text {Pod IP アドレスの割り振りに使用されるセカンダリ IP アドレス範囲のサイズの合計}}$

たとえば、デフォルトの Pod IP アドレスと追加の Pod IPv4 アドレス範囲が /22 に設定されており、ノードプールが 2 つある場合、1 つのノードプールではデフォルトの Pod IP アドレス範囲を使用して 3 個のノードを持ち、2 つ目のノードプールでは追加の Pod IP アドレス範囲を使用して同じく 3 個のノードを持ちます。ノードのデフォルト最大数は 110 に設定されます。Kubernetes は、クラスタ上のノードに /24 CIDR 範囲を割り当てます。6 個のノードと /24 CIDR 範囲が割り当てられると、合計 256 * 6 = 1536 個の IP アドレスが使用されます。これは、2 つの Pod IP アドレス範囲(1024 * 2 = 2048)で使用可能な IP アドレスの総数の 75% です。

留意すべき重要な点として、セカンダリ IP アドレスが別のクラスタ間で共有されている場合、分析情報ではすべてのクラスタの集約された合計値が表示されます。単一のクラスタ IP 範囲の使用率を表示するには、gcloud container cluster describe CLUSTER_NAME を実行して各セカンダリ IP アドレスの使用率のステータスを確認します。CLUSTER_NAME はクラスタの名前に置き換えます。

推奨事項

GKE Pod の範囲を割り振ると自動スケーリングが制限される

この分析情報は、クラスタの Pod IP アドレス範囲に十分なアドレスがないため、すべてのノードプールで最大数のノードを作成できません。分析情報の詳細ページには、現在使用されている Pod IP アドレスの数を示すテーブルと、GKE クラスタの各 Pod IP アドレス範囲内の Pod IP アドレスの最大数を示すテーブルが表示されます。

完全に自動スケーリングされた IP アドレス使用率の値が 100% を超えると、ネットワーク アナライザはこの分析情報を生成します。

クラスタ内の最大ノード数をサポートするために必要な Pod IP アドレスの数が、クラスタの Pod IP アドレス範囲の IP アドレスの数を超えると、完全に自動スケーリングされた IP アドレスの使用率の値が 100% を超えます。クラスタ内の最大ノード数は、クラスタ内の各ノードプールの最大ノード数の合計です(maxNodeCount)。

完全に自動スケーリングされた IP アドレスの使用率の値は、GKE Pod の範囲の割り振りが多いにある式を使用して計算されます。

ルートベース クラスタ

この分析情報は、Pod アドレス範囲の割り振り率が 100% を超え、すべてのノードプールが完全に自動スケーリングされたときに生成されます。IP アドレス空間が不足しているため、GKE ノードは作成されません。

VPC ネイティブ クラスタ

この分析情報は、Pod IP アドレスの割り振りに使用されるセカンダリ IP アドレス範囲で、未割り振りの IP アドレス空間が不足している場合に生成されます。IP アドレス空間が不足すると、すべてのノードプールが完全に自動スケーリングされたときに処理ができなくなります。

詳細については、GKE ネットワーキングのベスト プラクティスクラスタ オートスケーラーの制限をご覧ください。

推奨事項

  • ルートベース クラスタの場合は、より大きな Pod アドレス範囲を持つクラスタを再作成します。このクラスタは、推奨のネットワーク モードであるため、VPC ネイティブ クラスタとして作成します。VPC ネイティブ クラスタとルートベース クラスタをご覧ください。
  • VPC ネイティブ クラスタの場合は、マルチ Pod CIDR を使用してクラスタレベルに Pod 範囲を追加し、ノードの自動プロビジョニングを有効にして、Pod IP アドレスの割り振りによるノードのスケーリングを自動化します。どのノードプールにどの Pod IP アドレスが使用されるかをより細かく制御するには、マルチ Pod CIDR を使用して、特定のセカンダリ IP アドレス範囲を使用するノードプールを作成します。ただし、これは Standard クラスタにのみ適用されます。