Felsöka UpgradeFailed-fel på grund av avlägsningsfel som orsakas av PDB:er
Den här artikeln beskriver hur du identifierar och löser UpgradeFailed-fel på grund av avlägsningsfel som orsakas av poddavbrottsbudgetar (PDBs) som inträffar när du försöker uppgradera ett Azure Kubernetes Service -kluster (AKS).
Förutsättningar
Den här artikeln kräver Azure CLI version 2.0.65 eller en senare version. Kör för att hitta versionsnumret az --version
. Om du måste installera eller uppgradera Azure CLI kan du läsa Så här installerar du Azure CLI.
Mer detaljerad information om uppgraderingsprocessen finns i avsnittet "Uppgradera ett AKS-kluster" i Uppgradera ett Azure Kubernetes Service -kluster (AKS).
Symptom
En uppgraderingsåtgärd för AKS-kluster misslyckas med följande felmeddelande:
Kod: UpgradeFailed
Meddelande: Dräneringsnodens nodnamn <> misslyckades när poddnamnet>< 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.
Testa den här situationen genom att köra kubectl get pdb -A
och sedan kontrollera 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 för 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 poddtömning. 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 för Tillåtna avbrott till 1 eller högre. - Försök igen att 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 att 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.
Obs!
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 säkerhetskopierar:
kubectl get <kubernetes-object> <name> -n <namespace> -o yaml > backup.yaml
.Försök igen att 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.
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för