Condividi tramite


Risolvere gli errori di UpgradeFailed causati da errori di rimozione causati da PDB

Questo articolo illustra come identificare e risolvere gli errori di UpgradeFailed causati da errori di rimozione causati dai budget di interruzione dei pod che si verificano quando si tenta di aggiornare un cluster servizio Azure Kubernetes (servizio Azure Kubernetes).

Prerequisiti

Questo articolo richiede l'interfaccia della riga di comando di Azure versione 2.0.65 o successiva. Per trovare il numero di versione, eseguire az --version. Se è necessario installare o aggiornare l'interfaccia della riga di comando di Azure, vedere Come installare l'interfaccia della riga di comando di Azure.

Per informazioni più dettagliate sul processo di aggiornamento, vedere la sezione "Aggiornare un cluster del servizio Azure Kubernetes" in Aggiornare un cluster servizio Azure Kubernetes (servizio Azure Kubernetes).

Sintomi

Un'operazione di aggiornamento del cluster del servizio Azure Kubernetes non riesce con il messaggio di errore seguente:

Codice: UpgradeFailed
Messaggio: il nome del nodo <di svuotamento non è riuscito durante l'eliminazione del <nome> del> pod. Rimozione non riuscita con errore troppe richieste. Ciò è spesso causato da un criterio PDB (Pod Disruption Budget) restrittivo. Vedere http://aka.ms/aks/debugdrainfailures. Errore originale: chiamata API al server API Kubernetes non riuscita.

Causa

Questo errore può verificarsi se un pod è protetto dai criteri PDB (Pod Disruption Budget). In questa situazione, il pod resiste allo svuotamento.

Per testare questa situazione, eseguire e quindi controllare il valore Allowed Disruption .To test this situation, run kubectl get pdb -A, and then check the Allowed Disruption value. Il valore deve essere 1 o superiore. Per altre informazioni, vedere Pianificare la disponibilità usando i budget di interruzione dei pod.

Se il valore Allowed Disruption è 0, lo svuotamento del nodo avrà esito negativo durante il processo di aggiornamento.

Per risolvere questo problema, usare una delle soluzioni seguenti.

Soluzione 1: abilitare lo svuotamento dei pod

  1. Regolare il database PDB per abilitare lo svuotamento dei pod. In genere, l'interruzione consentita è controllata dal Min Available / Max unavailable parametro o Running pods / Replicas . È possibile modificare il Min Available / Max unavailable parametro a livello di PDB o aumentare il numero di per eseguire il push del Running pods / Replicas valore Allowed Disruption su 1 o superiore.
  2. Riprovare ad aggiornare il cluster del servizio Azure Kubernetes alla stessa versione a cui si è tentato di eseguire l'aggiornamento in precedenza. Questo processo attiverà una riconciliazione.

Soluzione 2: Eseguire il backup, eliminare e ridistribuire il database PDB

  1. Eseguire un backup del PDB kubectl get pdb <pdb-name> -n <pdb-namespace> -o yaml > pdb_backup.yamle quindi eliminare il database PDB kubectl delete pdb <pdb-name> -n /<pdb-namespace>. Al termine dell'aggiornamento, è possibile ridistribuire il database PDB kubectl apply -f pdb_backup.yaml.
  2. Riprovare ad aggiornare il cluster del servizio Azure Kubernetes alla stessa versione a cui si è tentato di eseguire l'aggiornamento in precedenza. Questo processo attiverà una riconciliazione.

Soluzione 3: eliminare i pod che non possono essere svuotati

  1. Eliminare i pod che non possono essere svuotati.

    Nota

    Se i pod sono stati creati da una distribuzione o StatefulSet, verranno controllati da un oggetto ReplicaSet. In questo caso, potrebbe essere necessario eliminare la distribuzione o StatefulSet. Prima di eseguire questa operazione, è consigliabile eseguire un backup: kubectl get <kubernetes-object> <name> -n <namespace> -o yaml > backup.yaml.

  2. Riprovare ad aggiornare il cluster del servizio Azure Kubernetes alla stessa versione a cui si è tentato di eseguire l'aggiornamento in precedenza. Questo processo attiverà una riconciliazione.

Contattaci per ricevere assistenza

In caso di domande o bisogno di assistenza, creare una richiesta di supporto tecnico oppure formula una domanda nel Supporto della community di Azure. È possibile anche inviare un feedback sul prodotto al feedback della community di Azure.