Solución de problemas de errores upgradeFailed debido a errores de expulsión causados por PDB
En este artículo se describe cómo identificar y resolver errores upgradeFailed debido a errores de expulsión causados por presupuestos de interrupciones de pods (PDB) que se producen al intentar actualizar un clúster de Azure Kubernetes Service (AKS).
Requisitos previos
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 tiene que instalar o actualizar la CLI de Azure, consulte Instalación de la 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 una operación de actualización del clúster de AKS con el siguiente mensaje de error:
Código: UpgradeFailed
Mensaje: Error al expulsar el nombre> del nodo del nodo <al expulsar el nombre> del pod del pod<. Error de expulsión con demasiados errores de solicitudes. Esto suele deberse a una directiva restrictiva de presupuesto de interrupción del pod (PDB). Veahttp://aka.ms/aks/debugdrainfailures
. Error original: error al llamar api al servidor de API de Kubernetes.
Causa
Este error puede producirse si un pod está protegido por la directiva de presupuesto de interrupciones de pods (PDB). En esta situación, el pod resiste a ser purgado.
Para probar esta situación, ejecute kubectl get pdb -A
y, a continuación, compruebe el valor Interrupción permitida. El valor debe ser 1 o superior. Para obtener más información, consulte Planear la disponibilidad mediante presupuestos de interrupciones de pod.
Si el valor Interrupción permitida es 0, se producirá un error en la purga del nodo durante el proceso de actualización.
Para resolver el problema, utilice una de las siguientes soluciones.
Solución 1: Habilitar pods para purgar
- Ajuste la PDB para habilitar la purga de pods. Por lo general, la interrupción permitida se controla mediante el
Min Available / Max unavailable
parámetro oRunning pods / Replicas
. Puede modificar elMin Available / Max unavailable
parámetro en el nivel de PDB o aumentar el número deRunning pods / Replicas
para insertar el valor de Interrupción permitida en 1 o superior. - Inténtelo de nuevo para actualizar el clúster de AKS a la misma versión a la que intentó actualizar previamente. Este proceso desencadenará una conciliación.
Solución 2: Copia de seguridad, eliminación y reimplementación de PDB
- Realice una copia de seguridad de PDB
kubectl get pdb <pdb-name> -n <pdb-namespace> -o yaml > pdb_backup.yaml
y, a continuación, elimine el archivo PDBkubectl delete pdb <pdb-name> -n /<pdb-namespace>
. Una vez finalizada la actualización, puede volver a implementar la PDBkubectl apply -f pdb_backup.yaml
. - Inténtelo de nuevo para actualizar el clúster de AKS a la misma versión a la que intentó actualizar previamente. Este proceso desencadenará una conciliación.
Solución 3: Eliminación de los pods que no se pueden purgar
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 es así, 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
.Inténtelo de nuevo para actualizar el clúster de AKS a la misma versión a la que intentó actualizar previamente. 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.