Condividi tramite


Errore "UnsatisfiablePDB" durante l'aggiornamento di un cluster AKS

Questo articolo illustra come identificare e risolvere l'errore "UnsatisfiablePDB" che può verificarsi quando si tenta di aggiornare un cluster del servizio Azure Kubernetes.

Prerequisiti

Questo articolo richiede l'interfaccia della riga di comando di Azure versione 2.53.0 o successiva. Eseguire az --version per trovare la versione installata. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Come installare l'interfaccia della riga di comando di Azure.

Sintomi

Un'operazione di aggiornamento del cluster AKS non riesce con il seguente messaggio di errore:

Codice: UnsatisfiablePDB
Messaggio: 1 errore:
* PDB <pdb-namespace>/<pdb-name> ha massimo non disponibile == 0, non può procedere con l'operazione di inserimento

Motivo

Prima di avviare un'operazione di aggiornamento, AKS controlla il cluster per eventuali budget di interruzione dei pod (PDB) esistenti con il maxUnavailable parametro impostato su 0. È probabile che tali PDB blocchino le operazioni di svuotamento dei nodi. Se le operazioni di svuotamento dei nodi sono bloccate, l'operazione di aggiornamento del cluster non può essere completata correttamente. Ciò potrebbe potenzialmente causare un errore del cluster.

Dopo aver ricevuto l'errore "UnsatisfiablePDB", è possibile confermare lo stato del PDB eseguendo il comando seguente:

$ kubectl get pdb <pdb-name> -n <pdb-namespace>

L'output di questo comando dovrebbe essere simile al seguente:

NAME         MIN AVAILABLE   MAX UNAVAILABLE   ALLOWED DISRUPTIONS   AGE
<pdb-name>   N/A             0                 0                     49s

Se il valore di MAX UNAVAILABLE è 0, lo svuotamento del nodo non riesce durante il processo di aggiornamento.

Per risolvere questo problema, usare una delle soluzioni seguenti.

Soluzione 1: Modificare il parametro "maxUnavailable" del database PDB

Annotazioni

Usare questa soluzione se è possibile modificare direttamente la risorsa PDB.

  1. Impostare il parametro maxUnavailable del database PDB su 1 o un valore maggiore. Per ulteriori informazioni, vedere Specificare un PodDisruptionBudget.
  2. Ripetere l'operazione di aggiornamento del cluster AKS.

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

Annotazioni

Usare questa soluzione se la modifica diretta della risorsa PDB non è fattibile.

  1. Eseguire il backup del database PDB usando il comando seguente:

    $ kubectl get pdb <pdb-name> -n <pdb-namespace> -o yaml > pdb_backup.yaml
    
  2. Eliminare il PDB usando il comando seguente:

    $ kubectl delete pdb <pdb-name> -n <pdb-namespace>
    
  3. Ripetere l'operazione di aggiornamento del cluster AKS.

  4. Se l'operazione di aggiornamento del cluster AKS ha esito positivo, ri-deploy il PDB usando il comando seguente:

    $ kubectl apply -f pdb_backup.yaml
    

Contattaci per ricevere assistenza

In caso di domande, è possibile porre domande al supporto della community di Azure. È anche possibile inviare commenti e suggerimenti sul prodotto alla community di commenti e suggerimenti di Azure.