Rozwiązywanie problemów z błędami UpgradeFailed spowodowanymi błędami eksmisji spowodowanymi przez pliki PDB
W tym artykule omówiono sposób identyfikowania i rozwiązywania problemów z błędami upgradeFailed spowodowanymi błędami eksmisji spowodowanymi przez budżety zakłóceń zasobników (PDB), które występują 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.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 AKS" w temacie Uaktualnianie klastra usługi Azure Kubernetes Service (AKS).
Symptomy
Operacja uaktualniania klastra usługi AKS kończy się niepowodzeniem z następującym komunikatem o błędzie:
Kod: UpgradeFailed
Komunikat: Opróżnianie węzła o nazwie węzła <nie powiodło się podczas eksmitowania pod-name> zasobnika<.> Eksmisja nie powiodła się z powodu błędu Zbyt wiele żądań. Jest to często spowodowane restrykcyjnymi zasadami budżetu zakłóceń zasobników (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ń zasobników (PDB). W takiej sytuacji zasobnik opiera się na opróżnieniu.
Aby przetestować tę sytuację, uruchom polecenie kubectl get pdb -A
, a następnie sprawdź wartość Dozwolone zakłócenia . Wartość powinna być 1 lub większa. Aby uzyskać więcej informacji, zobacz Planowanie dostępności przy użyciu budżetów zakłóceń zasobników.
Jeśli wartość Dozwolone zakłócenia wynosi 0, opróżnienie 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 pdB, aby włączyć opróżnianie zasobnika. Ogólnie rzecz biorąc, dozwolone zakłócenia są kontrolowane przez
Min Available / Max unavailable
parametr orRunning pods / Replicas
. Możesz zmodyfikowaćMin Available / Max unavailable
parametr na poziomie pdB lub zwiększyć liczbęRunning pods / Replicas
, aby wypchnąć wartość Dozwolone zakłócenia do 1 lub większej. - 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 pliku PDB
- Utwórz kopię zapasową pliku 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 uaktualniania można ponownie wdrożyć plik 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 16.
Jeśli zasobniki zostały utworzone przez wdrożenie lub StatefulSet, będą one kontrolowane przez zestaw replik. W takim przypadku może być konieczne usunięcie wdrożenia lub elementu StatefulSet. 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 na temat platformy Azure.