Felsöka UpgradeFailed-fel på grund av borttagningsfel som orsakas av PDB:er
I den här artikeln beskrivs hur du identifierar och löser UpgradeFailed-fel på grund av borttagningsfel som orsakas av poddavbrottsbudgetar (PDB) som inträffar när du försöker uppgradera ett AKS-kluster (Azure Kubernetes Service).
Förutsättningar
Den här artikeln kräver Azure CLI version 2.0.65 eller en senare version. Om du vill hitta versionsnumret kör du az --version
. Om du måste installera eller uppgradera Azure CLI kan du läsa Installera Azure CLI.
Mer detaljerad information om uppgraderingsprocessen finns i avsnittet "Uppgradera ett AKS-kluster" i Uppgradera ett AKS-kluster (Azure Kubernetes Service).
Symptom
En uppgraderingsåtgärd för AKS-kluster misslyckas med följande felmeddelande:
Kod: UpgradeFailed
Meddelande: Det gick inte att tömma nodens nodnamn <> när poddens <poddnamn> avlägsnades. Borttagningen misslyckades med felet För många begäranden. Detta orsakas ofta av en restriktiv PDB-princip (Pod Disruption Budget). Sehttp://aka.ms/aks/debugdrainfailures
. Ursprungligt fel: API-anropet till Kubernetes API Server misslyckades.
Orsak
Det här felet kan inträffa om en podd skyddas av pdb-principen (Pod Disruption Budget). I den här situationen motstår podden att tömmas.
Om du vill testa den här situationen kör du kubectl get pdb -A
och kontrollerar sedan värdet Tillåten avbrott . Värdet ska vara 1 eller högre. Mer information finns i Planera för tillgänglighet med hjälp av poddstörningsbudgetar.
Om värdet Tillåten avbrott är 0 misslyckas nodavloppet under uppgraderingsprocessen.
Lös problemet genom att använda någon av följande lösningar.
Lösning 1: Aktivera poddar att tömma
- Justera PDB för att aktivera podddränering. I allmänhet styrs Den tillåtna störningen av parametern
Min Available / Max unavailable
ellerRunning pods / Replicas
. Du kan ändra parameternMin Available / Max unavailable
på PDB-nivå eller öka antaletRunning pods / Replicas
för att push-överföra värdet Tillåten avbrott till 1 eller högre. - Försök igen om du vill uppgradera AKS-klustret till samma version som du försökte uppgradera till tidigare. Den här processen utlöser en avstämning.
Lösning 2: Säkerhetskopiera, ta bort och distribuera om PDB
- Ta en säkerhetskopia av PDB
kubectl get pdb <pdb-name> -n <pdb-namespace> -o yaml > pdb_backup.yaml
och ta sedan bort PDBkubectl delete pdb <pdb-name> -n /<pdb-namespace>
. När uppgraderingen är klar kan du distribuera om PDBkubectl apply -f pdb_backup.yaml
. - Försök igen om du vill uppgradera AKS-klustret till samma version som du försökte uppgradera till tidigare. Den här processen utlöser en avstämning.
Lösning 3: Ta bort poddar som inte kan tömmas
Ta bort poddar som inte kan tömmas.
Kommentar
Om poddarna har skapats av en distribution eller StatefulSet styrs de av en ReplicaSet. Om så är fallet kan du behöva ta bort distributionen eller StatefulSet. Innan du gör det rekommenderar vi att du gör en säkerhetskopia:
kubectl get <kubernetes-object> <name> -n <namespace> -o yaml > backup.yaml
.Försök igen om du vill uppgradera AKS-klustret till samma version som du försökte uppgradera till tidigare. Den här processen utlöser en avstämning.
Kontakta oss för att få hjälp
Om du har frågor eller behöver hjälp skapar du en supportförfrågan eller frågar Azure community support. Du kan också skicka produktfeedback till Azure-feedbackcommunityn.