Udostępnij przez


Błąd "UnsatisfiablePDB" podczas aktualizowania klastra usługi AKS

W tym artykule omówiono sposób identyfikowania i rozwiązywania błędu "UnsatisablePDB", który może wystąpić podczas próby uaktualnienia klastra usługi Azure Kubernetes Service (AKS).

Wymagania wstępne

Ten artykuł wymaga interfejsu wiersza polecenia platformy Azure w wersji 2.53.0 lub nowszej. Uruchom polecenie az --version , aby znaleźć zainstalowaną wersję. Jeśli musisz zainstalować lub uaktualnić interfejs wiersza polecenia platformy Azure, zobacz Jak zainstalować interfejs wiersza polecenia platformy Azure.

Objawy

Operacja uaktualniania klastra usługi AKS kończy się niepowodzeniem z następującym komunikatem o błędzie:

Kod: NiespełnialnyPDB
Komunikat: Wystąpił błąd 1:
* PdB <pdb-namespace>/<pdb-name> ma maxniedostępne == 0, nie można kontynuować operacji umieszczania

Przyczyna

Przed rozpoczęciem aktualizacji usługa AKS sprawdza klaster w poszukiwaniu istniejących budżetów zakłóceń zasobników (PDB), dla których parametr maxUnavailable jest ustawiony na 0. Takie pliki PDB mogą blokować operacje opróżniania węzłów. Jeśli operacje opróżniania węzła są zablokowane, operacja uaktualniania klastra nie może zakończyć się pomyślnie. Może to potencjalnie spowodować, że klaster będzie w stanie niepowodzenia.

Po otrzymaniu błędu "UnsatisfiablePDB" można potwierdzić status PDB, uruchamiając następującą komendę:

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

Dane wyjściowe tego polecenia powinny być podobne do następujących:

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

Jeśli wartość to 0, opróżnianie węzła MAX UNAVAILABLE kończy się niepowodzeniem podczas procesu uaktualniania.

Aby rozwiązać ten problem, użyj jednego z następujących rozwiązań.

Rozwiązanie 1: Dostosuj parametr "maxUnavailable" PDB

Uwaga / Notatka

Użyj tego rozwiązania, jeśli możesz edytować zasób PDB bezpośrednio.

  1. Ustaw parametr pdB maxUnavailable na 1 lub większą wartość. Aby uzyskać więcej informacji, zobacz Specyfikacja PodDisruptionBudget.
  2. Ponów operację aktualizacji klastra AKS.

Rozwiązanie 2. Tworzenie kopii zapasowej, usuwanie i ponowne wdrażanie pliku PDB

Uwaga / Notatka

Użyj tego rozwiązania, jeśli bezpośrednie edytowanie zasobu PDB nie jest możliwe.

  1. Wykonaj kopię zapasową pliku PDB przy użyciu następującego polecenia:

    $ kubectl get pdb <pdb-name> -n <pdb-namespace> -o yaml > pdb_backup.yaml
    
  2. Usuń plik PDB przy użyciu następującego polecenia:

    $ kubectl delete pdb <pdb-name> -n <pdb-namespace>
    
  3. Ponów operację aktualizacji klastra AKS.

  4. Jeśli operacja uaktualniania klastra usługi AKS powiedzie się, ponownie wdróż plik PDB przy użyciu następującego polecenia:

    $ kubectl apply -f pdb_backup.yaml