Problembehandlung für den SubnetIsFull-Fehlercode

In diesem Artikel wird erläutert, wie Sie den Fehler identifizieren und beheben, der SubnetIsFull auftritt, wenn Sie versuchen, einen Microsoft Azure Kubernetes Service (AKS)-Cluster zu erstellen und bereitzustellen.

Voraussetzungen

  • Azure CLI (Version 2.0.59 oder eine höhere Version)

Problembeschreibung

Wenn Sie versuchen, einen AKS-Cluster bereitzustellen, wird die folgende Fehlermeldung angezeigt:

"code": "SubnetIsFull"

"message": "Subnet /subscriptions/<subscription-id>/resourceGroups/vnettest/providers/Microsoft.Network/virtualNetworks/cvnet/subnets/ses-vnet2 with address prefix 10.59.248.128/25 is already full."

Ursache

Der Cluster wurde mithilfe erweiterter Netzwerke eingerichtet. Die Azure Container Networking Interface (CNI) ordnet eine IP-Adresse für jeden Pod im Cluster voran. Die spezifische Anzahl von IP-Adressen, die pro Knoten reserviert sind, kann variieren, je nach der maximalen Anzahl von Pods pro Knoten (maxPod), die während der Clustererstellung angegeben wird. Weitere Informationen zu dieser Einstellung finden Sie unter Konfigurieren des Azure CNI-Netzwerks in AKS.

Jeder Knoten weist die maximale Anzahl von IP-Adressen pro angegebenen Pod zu. Der Standardwert ist 30 Adressen aus dem angegebenen Subnetz.

Hinweis

Azure reserviert fünf IP-Adressen pro Subnetz. Die erste Adresse im Subnetz ist für die Netzwerk-ID, gefolgt von drei Adressen, die von Azure intern verwendet werden. Die letzte Adresse im Subnetz ist für Übertragungspakete reserviert. Weitere Informationen finden Sie unter Gibt es Einschränkungen bei der Verwendung von IP-Adressen innerhalb dieser Subnetze? .

Wenn ip address exhaustion aufgetreten ist, überprüfen Sie, ob Sie VM-Skalierungsgruppen (Virtual Machine) oder Verfügbarkeitsgruppen in Ihrem Cluster verwenden. Überprüfen Sie außerdem die folgenden Einschränkungen und Funktionen. Diese Informationen können die Art und Weise ändern, in der Sie dieses Problem beheben:

  • Sie können ein Subnetz nicht ändern, wenn es über Ressourcen verfügt, die das Subnetz verwenden.

  • Sie können den Cluster nicht herunterskalieren, wenn bei einem Upgrade der Cluster in einem fehlerhaften Zustand ist.

  • Sie können das Subnetz eines vorhandenen Clusters nicht ändern.

  • Sie können das Subnetz eines Knotens ändern.

  • Sie können Ihre Knoten in ein anderes Subnetz im selben virtuellen Netzwerk verschieben und dabei die Konnektivität aufrechterhalten.

  • Sie können einen Knoten löschen und sich nicht auf die ausgeführten Pods auswirken, wenn genügend Speicherplatz für die Pods auf den knoten vorhanden ist, die übrig bleiben.

Lösung 1: Löschen des Clusters und erneutes Bereitstellen in einem Subnetz mit mehr Kapazität

Die einfachste Möglichkeit, dieses Problem zu lösen, ist das Löschen des Clusters und das erneute Bereitstellen in einem Subnetz, das über genügend Kapazität für Ihre Workload verfügt. In vielen Fällen ist diese Lösung jedoch nicht machbar. Daher müssen Sie möglicherweise andere Lösungen in Betracht ziehen.

Lösung 2: Freigeben von IP-Adressen in der Verfügbarkeitsgruppe Ihres Clusters

Um das Problem zu beheben, geben Sie einige IP-Adressen für Ihren Verfügbarkeitsgruppencluster frei. Führen Sie die folgenden allgemeinen Schritte aus:

  1. Erstellen Sie ein neues Subnetz im gleichen virtuellen Netzwerk, in dem sich der Cluster derzeit befindet.

  2. Verschieben Sie einen oder zwei der Knoten in das neue Subnetz.

  3. Führen Sie das Upgrade in Azure CLI mithilfe des az aks-Upgradebefehls erneut aus.

  4. Stellen Sie die Knoten im ursprünglichen Subnetz wieder her.

    Warnung

    Durch verschieben der Knoten in ein neues Subnetz werden die Systeme neu gestartet, die verschoben werden.

Hinweis

Diese Lösung ist eigentlich eine kurzfristige Problemumgehung.

Lösung 3: Verkleinern der VM-Skalierungsgruppe Ihres Clusters

Führen Sie die folgenden Schritte aus, um ihre VM-Skalierungsgruppe zu skalieren:

  1. Suchen Sie im Azure-Portal nach Vmskalierungsgruppen und wählen Sie diese aus.

  2. Wählen Sie in der Liste der VM-Skalierungsgruppen Ihren Skalierungssatz aus.

  3. Wählen Sie "Skalierung" aus.

  4. Skalieren Sie die VM-Skalierungsgruppe um mindestens eine Instanz nach unten.

Diese Änderung aktualisiert die Knotenanzahl im Knotenpool. Außerdem wird die Anzahl der verwendeten IP-Adressen reduziert, damit das Upgrade abgeschlossen werden kann.

Hinweis

Diese Methode ist eigentlich eine kurzfristige Problemumgehung.

Lösung 4: Erweitern des Subnetzes in Ihrer Verfügbarkeitsgruppe

Vergrößern Sie das Subnetz in Ihrem Verfügbarkeitssatz, um mehr Kapazität für zusätzliche Knoten zu schaffen. Maximieren Sie jedoch kein erweitertes Subnetz, da diese Strategie zu einem erneuten Auftreten dieses Problems führen kann. Führen Sie die folgenden allgemeinen Schritte aus:

  1. Geben Sie Speicherplatz im Subnetz frei, indem Sie alle Knoten und internen Lastenausgleichsmodule in ein temporäres Subnetz migrieren.

  2. Nachdem das Subnetz leer ist, ändern Sie es, um weitere IP-Adressen zuzulassen.

  3. Stellen Sie die Knoten im vergrößerten Subnetz wieder her.

Lösung 5: Erweitern des Subnetzes in Ihrer VM-Skalierungsgruppe

Führen Sie die folgenden allgemeinen Schritte aus, um das Subnetz in Ihrer VM-Skalierungsgruppe zu vergrößern:

  1. Geben Sie Speicherplatz im Subnetz frei, indem Sie die VM-Skalierungsgruppe löschen und alle internen Lastenausgleichsmodule entfernen.

  2. Erweitern Sie das Subnetz.

  3. Ändern Sie das Subnetz, und stimmen Sie den Cluster ab, um die gelöschten Ressourcen erneut zu erstellen, indem Sie den Az-Ressourcenaktualisierungsbefehl ausführen:

    az resource update --resource-group <resource-group-name> \
        --name <cluster-name> \
        --namespace Microsoft.ContainerService \
        --resource-type ManagedClusters
    

Lösung 6: Erstellen eines größeren Subnetzes und eines neuen Knotenpools in Ihrer VM-Skalierungsgruppe

Anstatt das Subnetz in Ihrer VM-Skalierungsgruppe zu erweitern, können Sie ein neues, größeres Subnetz und einen neuen Knotenpool erstellen. Führen Sie die folgenden allgemeinen Schritte aus:

  1. Erstellen Sie ein neues Subnetz im selben virtuellen Netzwerk, aber geben Sie ihm eine größere Kapazität als das aktuelle Subnetz.

  2. Erstellen Sie einen neuen Knotenpool mithilfe des Befehls "az aks nodepool add ". Geben Sie den --vnet-subnet-id Parameter an, und legen Sie den --mode Parameter auf System. (Weitere Informationen zu Systemknotenpools finden Sie unter Verwalten von Systemknotenpools in AKS.)

  3. Löschen Sie den ursprünglichen Knotenpool.

Weitere Informationen