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). Zobacz http://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

  1. 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 lub Running 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.
  2. 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

  1. Wykonaj kopię zapasową bazy danych PDB kubectl get pdb <pdb-name> -n <pdb-namespace> -o yaml > pdb_backup.yaml, a następnie usuń plik PDB kubectl delete pdb <pdb-name> -n /<pdb-namespace>. Po zakończeniu uaktualnienia można ponownie wdrożyć bazę danych PDB kubectl apply -f pdb_backup.yaml.
  2. 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ć

  1. 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.

  2. 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.