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. Vederehttp://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
- Regolare il database PDB per abilitare lo svuotamento dei pod. In genere, l'interruzione consentita è controllata dal
Min Available / Max unavailable
parametro oRunning pods / Replicas
. È possibile modificare ilMin Available / Max unavailable
parametro a livello di PDB o aumentare il numero di per eseguire il push delRunning pods / Replicas
valore Allowed Disruption su 1 o superiore. - 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
- Eseguire un backup del PDB
kubectl get pdb <pdb-name> -n <pdb-namespace> -o yaml > pdb_backup.yaml
e quindi eliminare il database PDBkubectl delete pdb <pdb-name> -n /<pdb-namespace>
. Al termine dell'aggiornamento, è possibile ridistribuire il database PDBkubectl apply -f pdb_backup.yaml
. - 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
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
.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.