Rozwiązywanie problemów z błędami UpgradeFailed spowodowanymi błędami eksmisji spowodowanymi przez bazy danych PDB
W tym artykule omówiono sposób identyfikowania i rozwiązywania błędów uaktualniania Zakończonych niepowodzeniem z powodu niepowodzeń eksmisji spowodowanych przez budżety zakłóceń zasobników (PDB), które występują podczas próby uaktualnienia klastra Azure Kubernetes Service (AKS).
Wymagania wstępne
Ten artykuł wymaga interfejsu wiersza polecenia platformy Azure w wersji 2.0.65 lub nowszej. Aby znaleźć numer wersji, uruchom polecenie az --version
. Jeśli musisz zainstalować lub uaktualnić interfejs wiersza polecenia platformy Azure, zobacz Jak zainstalować interfejs wiersza polecenia platformy Azure.
Aby uzyskać bardziej szczegółowe informacje na temat procesu uaktualniania, zobacz sekcję "Uaktualnianie klastra usługi AKS" w temacie Uaktualnianie klastra Azure Kubernetes Service (AKS).
Symptomy
Operacja uaktualniania klastra usługi AKS kończy się niepowodzeniem z następującym komunikatem o błędzie:
Kod: Uaktualnienie nie powiodło się
Komunikat: Nazwa węzła opróżniania <nie powiodła się podczas wykluczania nazwy> zasobnika<.> Eksmisja nie powiodła się z powodu błędu Zbyt wiele żądań. Jest to często spowodowane przez restrykcyjne zasady budżetu zakłóceń zasobnika (PDB). Zobaczhttp://aka.ms/aks/debugdrainfailures
. Oryginalny błąd: wywołanie interfejsu API do serwera interfejsu API Kubernetes nie powiodło się.
Przyczyna
Ten błąd może wystąpić, jeśli zasobnik jest chroniony przez zasady budżetu zakłóceń zasobnika (PDB). W tej sytuacji zasobnik opiera się opróżnianiu.
Aby przetestować tę sytuację, uruchom polecenie kubectl get pdb -A
, a następnie sprawdź wartość Dozwolone zakłócenia . Wartość powinna wynosić 1 lub większą. Aby uzyskać więcej informacji, zobacz Planowanie dostępności przy użyciu budżetów zakłóceń zasobnika.
Jeśli wartość Dozwolone zakłócenia wynosi 0, opróżnianie węzła zakończy się niepowodzeniem podczas procesu uaktualniania.
Aby rozwiązać ten problem, użyj jednego z następujących rozwiązań.
Rozwiązanie 1. Włączanie opróżniania zasobników
- Dostosuj bazę danych PDB, aby umożliwić opróżnianie zasobników. Ogólnie rzecz biorąc dozwolone zakłócenia są kontrolowane przez
Min Available / Max unavailable
parametr lubRunning pods / Replicas
. Możesz zmodyfikowaćMin Available / Max unavailable
parametr na poziomie PDB lub zwiększyć liczbę, aby wypchnąćRunning pods / Replicas
wartość Dozwolone zakłócenia do 1 lub nowszej. - Spróbuj ponownie uaktualnić klaster usługi AKS do tej samej wersji, do której próbowano wcześniej przeprowadzić uaktualnienie. Ten proces spowoduje wyzwolenie uzgodnień.
Rozwiązanie 2: Tworzenie kopii zapasowej, usuwanie i ponowne wdrażanie bazy danych PDB
- Wykonaj kopię zapasową bazy danych PDB
kubectl get pdb <pdb-name> -n <pdb-namespace> -o yaml > pdb_backup.yaml
, a następnie usuń plik PDBkubectl delete pdb <pdb-name> -n /<pdb-namespace>
. Po zakończeniu uaktualnienia można ponownie wdrożyć bazę danych PDBkubectl apply -f pdb_backup.yaml
. - Spróbuj ponownie uaktualnić klaster usługi AKS do tej samej wersji, do której próbowano wcześniej przeprowadzić uaktualnienie. Ten proces spowoduje wyzwolenie uzgodnień.
Rozwiązanie 3. Usuwanie zasobników, których nie można opróżnić
Usuń zasobniki, których nie można opróżnić.
Uwaga
Jeśli zasobniki zostały utworzone przez wdrożenie lub Zestaw stanowy, będą kontrolowane przez zestaw replik. W takim przypadku może być konieczne usunięcie wdrożenia lub zestawu stanowego. Przed wykonaniem tej czynności zalecamy utworzenie kopii zapasowej:
kubectl get <kubernetes-object> <name> -n <namespace> -o yaml > backup.yaml
.Spróbuj ponownie uaktualnić klaster usługi AKS do tej samej wersji, do której próbowano wcześniej przeprowadzić uaktualnienie. Ten proces spowoduje wyzwolenie uzgodnień.
Skontaktuj się z nami, aby uzyskać pomoc
Jeśli masz pytania lub potrzebujesz pomocy, utwórz wniosek o pomoc techniczną lub zadaj pytanie w społeczności wsparcia dla platformy Azure. Możesz również przesłać opinię o produkcie do społeczności opinii platformy Azure.