Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.
- Ustaw parametr pdB
maxUnavailablena1lub większą wartość. Aby uzyskać więcej informacji, zobacz Specyfikacja PodDisruptionBudget. - 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.
Wykonaj kopię zapasową pliku PDB przy użyciu następującego polecenia:
$ kubectl get pdb <pdb-name> -n <pdb-namespace> -o yaml > pdb_backup.yamlUsuń plik PDB przy użyciu następującego polecenia:
$ kubectl delete pdb <pdb-name> -n <pdb-namespace>Ponów operację aktualizacji klastra AKS.
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