Solución de problemas de errores de UpgradeFailed debidos a errores de expulsión causados por PDB

En este artículo se describe cómo identificar y resolver errores UpgradeFailed debidos a errores de expulsión causados por presupuestos de interrupción de pods (PDB) que se producen al intentar actualizar un clúster de Azure Kubernetes Service (AKS).

Requisitos previos

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 Instalación de la CLI de Azure.

Para obtener información más detallada sobre el proceso de actualización, consulte la sección "Actualizar un clúster de AKS" en Actualización de un clúster de Azure Kubernetes Service (AKS).

Síntomas

Se produce un error en una operación de actualización del clúster de AKS con el siguiente mensaje de error:

Código: UpgradeFailed
Mensaje: No se pudo purgar <node-name> al expulsar pod-name<>. Error de expulsión con demasiados errores de solicitudes. Esto suele deberse a una directiva restrictiva del presupuesto de interrupción de pods (PDB). Consulte http://aka.ms/aks/debugdrainfailures. Error original: error en la llamada de API al servidor de API de Kubernetes.

Causa

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

Para probar esta situación, ejecute kubectl 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, consulte Planear la disponibilidad mediante presupuestos de interrupción de pods.

Si el valor de Interrupción permitida es 0, se producirá un error en la purga del nodo durante el proceso de actualización.

Para resolver este problema, use una de las siguientes soluciones.

Solución 1: Habilitar pods para purgar

  1. Ajuste el PDB para habilitar el drenaje de pods. Por lo general, la interrupción permitida se controla mediante el Min Available / Max unavailable parámetro o Running pods / Replicas . Puede modificar el Min Available / Max unavailable parámetro en el nivel de PDB o aumentar el número de Running pods / Replicas para insertar el valor de Interrupción permitida en 1 o superior.
  2. Vuelva a intentarlo para actualizar el clúster de AKS a la misma versión a la que intentó actualizar anteriormente. Este proceso desencadenará una conciliación.

Solución 2: Copia de seguridad, eliminación y reimplementación de PDB

  1. Realice una copia de seguridad de la 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 finalizada la actualización, puede volver a implementar PDB kubectl apply -f pdb_backup.yaml.
  2. Vuelva a intentarlo para actualizar el clúster de AKS a la misma versión a la que intentó actualizar anteriormente. Este proceso desencadenará una conciliación.

Solución 3: Eliminar los pods que no se pueden purgar

  1. Elimine los pods que no se pueden purgar.

    Nota:

    Si los pods se crearon mediante una implementación o StatefulSet, se controlarán mediante un ReplicaSet. Si ese es el caso, 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.

  2. Vuelva a intentarlo para actualizar el clúster de AKS a la misma versión a la que intentó actualizar anteriormente. Este proceso desencadenará una conciliación.

Ponte en contacto con nosotros para obtener ayuda

Si tiene preguntas o necesita ayuda, cree una solicitud de soporte o busque consejo en la comunidad de Azure. También puede enviar comentarios sobre el producto con los comentarios de la comunidad de Azure.