Dela via


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

Om du vill testa den här situationen kör du kubectl get pdb -Aoch 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

  1. Justera PDB för att aktivera podddränering. 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 Tillåten avbrott till 1 eller högre.
  2. 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

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

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

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