Problemen met de SubnetIsFull-foutcode oplossen tijdens een upgrade van een AKS-cluster

Overzicht

In dit artikel wordt uitgelegd hoe u de SubnetIsFull-fout kunt identificeren en oplossen die optreedt wanneer u een upgrade uitvoert van een Azure Kubernetes Service (AKS)-cluster. Hiermee kunt u de upgrade voltooien.

Hier volgt een voorbeeld van het foutbericht:

Niet gelukt om knooppuntgroep <AGENT POOL NAME> te schalen in Kubernetes-service '<NAME>'. Fout: Het opnieuw proberen van VMSSAgentPoolReconciler is mislukt: Code='SubnetIsFull' Message='<SUBNET NAME> met adresvoorvoegsel <PREFIX> heeft onvoldoende capaciteit voor IP-adressen.' Details=[]

Vereiste voorwaarden

Voor dit artikel is Azure CLI versie 2.0.65 of een nieuwere versie vereist. Voer het versienummer uit az --versionom het versienummer te vinden. Als u Azure CLI wilt installeren of upgraden, raadpleegt u Het installeren van de Azure CLI.

Zie de sectie "Upgrade een AKS-cluster" in Upgrade een Azure Kubernetes Service (AKS) cluster voor meer gedetailleerde informatie over het upgradeproces.

Symptomen

Een upgrade van een AKS-cluster mislukt en u ontvangt het foutbericht 'SubnetIsFull'.

Oorzaak

Deze fout treedt op als uw cluster niet voldoende IP-adressen heeft om een nieuw knooppunt te maken.

Wanneer u een upgrade- of schaalbewerking plant, moet u rekening houden met het aantal vereiste IP-adressen. Als het IP-adresbereik dat u in het cluster hebt geconfigureerd, slechts een vast aantal knooppunten ondersteunt, mislukt de upgrade- of schaalbewerking. Zie IP-adresplanning voor uw AKS-clusters (Azure Kubernetes Service) voor meer informatie.

Controleer de beschikbare IP-adressen in het subnet

Voordat u corrigerende maatregelen neemt, controleert u hoeveel IP-adressen er beschikbaar zijn in het subnet dat is gekoppeld aan uw AKS-cluster.

Om de beschikbare IP-adressen te controleren in de Azure portal:

  1. Ga naar de service Virtuele netwerken .
  2. Selecteer het virtuele netwerk dat is gekoppeld aan uw AKS-cluster.
  3. Selecteer Subnetten in het menu.
  4. Controleer de kolom Beschikbare IP-adressen voor het subnet dat door uw cluster wordt gebruikt.

U kunt ook de volgende Azure CLI opdrachten uitvoeren om beschikbare IP-adressen te controleren:

# Get the subnet resource ID for the node pool.
# For clusters that use a custom VNet, the subnet ID is stored in the agent pool profile:
SUBNET_ID=$(az aks show \
    --resource-group <RESOURCE_GROUP> \
    --name <CLUSTER_NAME> \
    --query "agentPoolProfiles[0].vnetSubnetId" \
    --output tsv)

# If the cluster uses a managed VNet (SUBNET_ID is empty),
# retrieve the subnet from the node resource group instead:
if [[ -z "$SUBNET_ID" ]]; then
    NODE_RESOURCE_GROUP=$(az aks show \
        --resource-group <RESOURCE_GROUP> \
        --name <CLUSTER_NAME> \
        --query "nodeResourceGroup" \
        --output tsv)

    SUBNET_ID=$(az network vnet list \
        --resource-group "$NODE_RESOURCE_GROUP" \
        --query "[0].subnets[0].id" \
        --output tsv)
fi

# Display the subnet details and calculate available IPs
az network vnet subnet show \
    --ids "$SUBNET_ID" \
    --query "{SubnetName:name, AddressPrefix:addressPrefix, UsedIPs:length(ipConfigurations || \`[]\`)}" \
    --output json | jq -r '
    .AddressPrefix as $prefix |
    ($prefix | split("/")[1] | tonumber) as $prefixLen |
    pow(2; 32 - $prefixLen) as $totalIPs |
    5 as $reserved |
    (.UsedIPs // 0) as $used |
    ($totalIPs - $reserved - $used) as $available |
    ["SubnetName", "AddressPrefix", "TotalIPs", "UsedIPs", "AzureReserved", "AvailableIPs"],
    [.SubnetName, $prefix, ($totalIPs | tostring), ($used | tostring), ($reserved | tostring), ($available | tostring)]
    | @tsv' | column -t

De uitvoer lijkt op het volgende voorbeeld:

SubnetName  AddressPrefix  TotalIPs  UsedIPs  AzureReserved  AvailableIPs
aks-subnet  xx.xxx.x.x/16  65536     327      5              65204

Opmerking

Dit script vereist dat jq is geïnstalleerd. Azure reserveert vijf (5) IP-adressen in elk subnet. Zie Zijn er beperkingen voor het gebruik van IP-adressen binnen deze subnetten? voor meer informatie.

Als het aantal beschikbare IP-adressen laag is (bijvoorbeeld minder dan het aantal knooppunten dat u tijdens de upgrade toevoegt), gaat u verder met de oplossing in de volgende sectie.

Oplossing

Verminder de clusterknooppunten om IP-adressen voor de upgrade te reserveren.

Als omlaag schalen geen optie is en uw VIRTUELE netwerk-CIDR voldoende IP-adressen heeft, probeert u een knooppuntgroep met een uniek subnet toe te voegen:

  1. Voeg een nieuwe gebruikersknooppuntgroep toe aan het virtuele netwerk in een groter subnet.
  2. Schakel de oorspronkelijke knooppuntgroep over naar een type systeemknooppuntgroep.
  3. Schaal de gebruikersknooppuntgroep omhoog.
  4. Schaal de oorspronkelijke knooppuntgroep omlaag.

Resources