Solución de problemas de errores de actualización del clúster del servicio Kubernetes de Azure

En este artículo se proporcionan instrucciones para solucionar los errores más comunes que se producen al actualizar un clúster de Azure Kubernetes Service (AKS).

Antes de empezar

Compruebe el mensaje de error que recibió durante el proceso de actualización y siga los pasos correspondientes en la sección "Resolución".

Este artículo 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 tiene que instalar o actualizar la CLI de Azure, consulte Install Azure CLI.

Para obtener un proceso de actualización detallado, consulte What happens during AKS cluster upgrade.

Error en la actualización debido a reglas NSG

Causa

Una regla NSG está bloqueando que el clúster descargue los recursos necesarios.

Solución

Para resolver este problema, siga estos pasos:

  1. Ejecute az network nsg list -o tabley, a continuación, busque el NSG vinculado al clúster. El NSG se agrupa en un grupo de recursos denominado MC_<RG name>_<your AKS cluster name>.

  2. Ver las reglas del NSG:

    az network nsg rule list --resource-group <Rg name> --nsg-name <nsg name> --include-default -o table
    

    El siguiente screenshpt muestra las reglas predeterminadas:

    Captura de pantalla de las reglas de NSG predeterminadas.

  3. Si tiene las reglas predeterminadas, omita este paso. De lo contrario, revise y quite las reglas que bloquean el tráfico de Internet. A continuación, intente actualizar el clúster de AKS a la misma versión a la que intentó actualizar anteriormente. Este proceso desencadenará una conciliación.

az aks upgrade --resource-group <ResourceGroupName> --name <AKSClusterName> --kubernetes-version <KUBERNETES_VERSION>

Código de error: PodDrainFailure

Causa

Este error puede producirse si un pod está protegido por la directiva de presupuesto de interrupción de pods (PDB). En esta situación, el pod se resiste a ser drenado.

Para probar esto, ejecute kubelect get pdb -Ay, a continuación, compruebe el valor De interrupción permitida. El valor debe ser 1 o superior. Para obtener más información, vea Plan for availability using pod disruption budgets.

Si el valor de Interrupción permitida es 0, el desagüe del nodo producirá un error durante el proceso de actualización.

Solución alternativa

Para resolver este problema, use uno de los métodos siguientes:

  • Ajuste el PDB para habilitar el vaciado de pods. Por lo general, la interrupción permitida es el resultado de Min Available / Max unavailable o Running pods / Replicas. Puede modificar el parámetro en Min Available / Max unavailable el nivel PDB o Running pods / Replicas aumentar el número de para insertar el valor de interrupción permitida a 1 o superior.
  • Realice una copia de seguridad de PDB kubectl get pdb <pdb-name> -n <pdb-namespace> -o yaml > pdb_backup.yamly, a continuación, elimine la PDB kubectl delete pdb <pdb-name> -n /<pdb-namespace>. Una vez completada la actualización, puede volver a implementar la PDB kubectl apply -f pdb_backup.yaml.
  • Elimine los pods que no se pueden drenar. Tenga en cuenta que si los pods se crearon mediante una implementación o StatefulSet, se controlarán mediante un ReplicaSet. Por lo tanto, es posible que tenga que eliminar la implementación o StatefulSet. Antes de hacerlo, se recomienda realizar una copia de seguridad kubectl get <kubernetes-object> <name> -n <namespace> -o yaml > backup.yaml.

Después de aplicar uno de estos métodos, vuelva a iniciar la operación de actualización del clúster de AKS a la misma versión que intentó actualizar anteriormente. Este proceso desencadenará una conciliación que intentará volver a actualizar los nodos de AKS.

Código de error: PublicIPCountLimitReached

Causa

El error se produce si alcanzó el número máximo de direcciones IP públicas permitidas para la suscripción.

Solución

Para aumentar el límite o la cuota de la suscripción, vaya a Azure Portal, file a Service and subscription limits (quotas) support ticket y establezca el tipo de cuota en Networking.

Después de que el cambio de cuota entre en vigor, intente actualizar el clúster a la misma versión a la que intentó actualizar anteriormente. Este proceso desencadenará una conciliación.

az aks upgrade --resource-group <ResourceGroupName> --name <AKSClusterName> --kubernetes-version <KUBERNETES_VERSION>

Código de error: Quotaexceeded

Causa

El problema se produce si se alcanza la cuota. La suscripción no tiene recursos disponibles necesarios para la actualización.

Solución

Para aumentar el límite o la cuota de la suscripción, vaya a Azure Portal, file a Service and subscription limits (quotas) support ticket.

A continuación se muestra un ejemplo del mensaje de error:

La operación hace que se superen los límites de cuota de Core. Máximo permitido: X, Actual en uso: X, Adicional solicitado: X

En este caso, debe enviar un vale de soporte técnico para aumentar la cotización de los núcleos de cálculo.

Código de error: Subnetisfull

Mensaje de error

Error al escalar el grupo de nodos <AGENT POOL NAME>en el servicio kubernetes '<NAME>'.' Error: Error al reintentar VMSSAgentPoolReconciler: Code='SubnetIsFull' Message='<SUBNET NAME>\ con <PREFIX>prefijo de dirección \ no tiene suficiente capacidad para las direcciones IP XXX.' Details=[]

Causa

Este error se produce si el clúster no tiene suficientes direcciones IP para crear un nuevo nodo.

Cuando planee realizar una operación de actualización o escalado, se debe tener 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 producirá un error en la operación de actualización o escalado. Para obtener más información, vea Plan IP addressing for the cluster.

Solución alternativa

Para evitar el problema, reduzca los nodos del clúster para reservar direcciones IP para la actualización.

Si el escalado vertical no es una opción y el CIDR de red virtual tiene suficientes direcciones IP, intente agregar un grupo de nodos que tenga una subred única:

  1. Agregue un nuevo grupo de nodos de usuario en la red virtual en una subred más grande.
  2. Cambie el grupo de nodos original a uno de tipo system.
  3. Escalar verticalmente el grupo de nodos de usuario.
  4. Escala hacia abajo el grupo de nodos original.