Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Resumen
En este artículo se explica cómo identificar y resolver el error SubnetIsFull que se produce al actualizar un clúster de Azure Kubernetes Service (AKS). Le ayuda a completar la actualización correctamente.
Este es un ejemplo del mensaje de error:
No se pudo escalar el grupo de nodos '<AGENT POOL NAME>' en el servicio Kubernetes '<NAME>'. Error: Error de reintento de VMSSAgentPoolReconciler fallido: Código='SubnetIsFull' Mensaje='<NOMBRE_DE_SUBRED> con el prefijo de dirección <PREFIX> no tiene suficiente capacidad para direcciones IP.' Detalles=[]
Prerrequisitos
En este artículo se requiere la versión 2.0.65 de la CLI de Azure o una versión posterior. Para buscar el número de versión, ejecute az --version. Si necesita instalar o actualizar CLI de Azure, consulte Cómo instalar el CLI de Azure.
Para más información sobre el proceso de actualización, consulte la sección "Actualización de un clúster de AKS" en Actualización de un clúster de Azure Kubernetes Service (AKS).
Síntomas
Se produce un error en la actualización de un clúster de AKS y recibe un mensaje de error "SubnetIsFull".
Causa
Este error se produce si el clúster no tiene suficientes direcciones IP para crear un nuevo nodo.
Cuando planee una operación de actualización o escalado, tenga en cuenta el número de direcciones IP necesarias. Si el intervalo de direcciones IP que configuró en el clúster solo admite un número fijo de nodos, se produce un error en la operación de actualización o escalado. Para más información, consulte Planeamiento de direcciones IP para los clústeres de Azure Kubernetes Service (AKS).
Comprobación de las direcciones IP disponibles en la subred
Antes de realizar una acción correctiva, compruebe cuántas direcciones IP están disponibles en la subred asociada al clúster de AKS.
Para comprobar las direcciones IP disponibles en el portal Azure:
- Vaya al servicio Redes virtuales .
- Seleccione la red virtual asociada al clúster de AKS.
- En el menú, seleccione Subredes.
- Revise la columna Direcciones IP disponibles de la subred que usa el clúster.
Como alternativa, puede ejecutar los siguientes comandos de CLI de Azure para comprobar las direcciones IP disponibles:
# 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
La salida se parece a la del ejemplo siguiente:
SubnetName AddressPrefix TotalIPs UsedIPs AzureReserved AvailableIPs
aks-subnet xx.xxx.x.x/16 65536 327 5 65204
Note
Este script requiere que jq esté instalado. Azure reserva cinco (5) direcciones IP en cada subred. Para obtener más información, consulte ¿Hay restricciones en el uso de direcciones IP dentro de estas subredes?.
Si el número de direcciones IP disponibles es bajo (por ejemplo, menos del número de nodos que va a agregar durante la actualización), continúe con la solución en la sección siguiente.
Solución
Reduzca los nodos del clúster para reservar direcciones IP para la actualización.
Si la reducción de escala no es una opción y el CIDR de la red virtual tiene suficientes direcciones IP, intente agregar un grupo de nodos que tenga una subred única:
- Agregue un nuevo grupo de nodos de usuario en la red virtual en una subred más grande.
- Cambie el grupo de nodos original a un tipo de grupo de nodos del sistema.
- Ampliar el grupo de nodos de usuarios.
- Reduzca el tamaño del grupo de nodos original.