Dela via


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

  1. Justera PDB för att aktivera poddtömning. I allmänhet styrs Den tillåtna störningen av parametern Min Available / Max unavailable eller Running pods / Replicas . Du kan ändra parametern Min Available / Max unavailable på PDB-nivå eller öka antalet Running pods / Replicas för att push-överföra värdet för Tillåtna avbrott till 1 eller högre.
  2. 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

  1. Ta en säkerhetskopia av PDB kubectl get pdb <pdb-name> -n <pdb-namespace> -o yaml > pdb_backup.yamloch ta sedan bort PDB kubectl delete pdb <pdb-name> -n /<pdb-namespace>. När uppgraderingen är klar kan du distribuera om PDB kubectl apply -f pdb_backup.yaml.
  2. 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

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

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