VPC クラスター: Kubernetes LoadBalancer サービスが IP がないために失敗するのはなぜですか?

仮想プライベートクラウド

VPCクラスター内に Kubernetes LoadBalancer サービスを作成してアプリを公開しましたが、サブネットに利用可能なIPアドレスがないため、サービスのプロビジョニングに失敗しています。

VPC クラスター内に Kubernetes LoadBalancer サービスを作成して、アプリを公開しました。

oc describe svc <kubernetes_lb_service_name> を実行すると、以下のような警告メッセージがイベントセクションに表示されます:

The subnet with ID(s) '<subnet_id>' has insufficient available ipv4 addresses.

クラスターに Kubernetes LoadBalancer サービスを作成すると、VPC に VPC ロード・バランサーが自動的に作成されます。

VPC ロード・バランサーは、アプリへのアクセスに使用できるホスト名に Kubernetes LoadBalancer サービスの浮動 IP アドレスを紐付けます。

VPC クラスターでは、ワーカー・ノードとサービスの両方に同じサブネットの IP アドレスが割り当てられます。 サブネット間のトラフィック・ルーティングが有効であるため、あるゾーンのサブネットのすべての IP アドレスがワーカー・ノードやサービスに使用されていても、そのゾーンで新規のワーカー・ゾーンやサービスを作成できます。新規のものには他のゾーンのサブネットの IP アドレスが使用されるからです。 ただし、すべてのサブネット上のすべての IP アドレスが使用中の場合、新しい Kubernetes LoadBalancer サービスを正常にプロビジョンすることはできません。

VPC サブネットを作成した後は、そのサイズを変更したり、その IP 範囲を変更したりすることはできません。

代わりに、ワーカー・ノードが存在する 1 つ以上のゾーンに、より大きな VPC サブネットを作成する必要があります。 次に、より大きなサブネットを使用して新しいワーカープールを作成します。

  1. 同じVPC内で、かつクラスターのワーカーノードが存在する1つ以上のゾーンに、 新しいVPCサブネットを作成します。 クラスター内に作成するワーカー・ノードとサービスの両方の数をサポートできるサブネットを必ず作成してください。 各 VPC サブネットのデフォルトの CIDR サイズは /24 であるため、最大 253 個のワーカー・ノードおよびサービスをサポートできます。 クラスターのVPCとゾーンを確認するには、 ibmcloud oc cluster get --cluster <cluster_name_or_ID> を実行してください。

  2. クラスターに新しいワーカー・プールを作成します。

    ibmcloud oc worker-pool create vpc-gen2 --name <name> --cluster <cluster_name_or_ID> --flavor <flavor> --size-per-zone <number_of_worker_nodes> --label <key>=<value>
    
  3. 前の手順で作成した新しいサブネットのIDを使用して、ゾーンをワーカープールに追加します。 各ゾーンおよびサブネットについて、このコマンドを繰り返してください。

    ibmcloud oc zone add vpc-gen2 --zone <zone> --subnet-id <subnet_id> --cluster <cluster_name_or_ID> --worker-pool <worker_pool_name>
    
  4. 数分経ったら、LoadBalancer サービスが新規サブネットのいずれかに正常にプロビジョンされたことを確認します。 サービスのプロビジョニングが正常に完了した場合、「 イベント 」セクションには「 Warning 」や「 Error 」といったイベントは表示されません。

    oc describe svc <kubernetes_lb_service_name>