Översikt över kluster autoskalning i Azure Kubernetes Service (AKS)

För att hänga med i programkraven i Azure Kubernetes Service (AKS) kan du behöva justera antalet noder som kör dina arbetsbelastningar. Komponenten autoskalning av kluster söker efter poddar i klustret som inte kan schemaläggas på grund av resursbegränsningar. När autoskalning av kluster identifierar problem skalar den upp antalet noder i nodpoolen för att uppfylla programbehovet. Den kontrollerar också regelbundet noder på grund av brist på poddar som körs och skalar ned antalet noder efter behov.

Den här artikeln hjälper dig att förstå hur autoskalning av kluster fungerar i AKS. Den innehåller också vägledning, metodtips och överväganden när du konfigurerar autoskalning av kluster för dina AKS-arbetsbelastningar. Om du vill aktivera, inaktivera eller uppdatera klustrets autoskalning för dina AKS-arbetsbelastningar läser du Använda autoskalning av kluster i AKS.

Om autoskalning av kluster

Kluster behöver ofta ett sätt att skala automatiskt för att anpassa sig till ändrade programkrav, till exempel mellan arbetsdagar och kvällar eller helger. AKS-kluster kan skalas på följande sätt:

  • Autoskalning av kluster söker regelbundet efter poddar som inte kan schemaläggas på noder på grund av resursbegränsningar. Klustret ökar sedan automatiskt antalet noder. Manuell skalning inaktiveras när du använder autoskalning av kluster. Mer information finns i How does scale up work?.
  • Den vågräta autoskalningen av poddar använder måttservern i ett Kubernetes-kluster för att övervaka resursefterfrågan för poddar. Om ett program behöver fler resurser ökar antalet poddar automatiskt för att möta efterfrågan.
  • Autoskalning av lodrät podd anger automatiskt resursbegäranden och begränsningar för containrar per arbetsbelastning baserat på tidigare användning för att säkerställa att poddar schemaläggs till noder som har de processor- och minnesresurser som krävs.

Skärmbild av hur autoskalning av kluster och horisontell autoskalning av poddar ofta fungerar tillsammans för att stödja de programkrav som krävs.

Det är vanligt att aktivera autoskalning av kluster för noder och antingen autoskalning av lodrät podd eller horisontell podd autoskalning för poddar. När du aktiverar autoskalning av kluster tillämpas de angivna skalningsreglerna när nodpoolens storlek är lägre än minimivärdet eller större än maxvärdet. Autoskalning av kluster väntar tills en ny nod behövs i nodpoolen eller tills en nod kan tas bort från den aktuella nodpoolen på ett säkert sätt. Mer information finns i Hur fungerar nedskalning?

Metodtips och överväganden

  • När du implementerar tillgänglighetszoner med autoskalning av kluster rekommenderar vi att du använder en enda nodpool för varje zon. Du kan ange parametern --balance-similar-node-groups till True för att upprätthålla en balanserad fördelning av noder mellan zoner för dina arbetsbelastningar under uppskalningsåtgärder. När den här metoden inte implementeras kan nedskalningsåtgärder störa balansen mellan noder mellan zoner.
  • För kluster med fler än 400 noder rekommenderar vi att du använder Azure CNI eller Azure CNI Overlay.
  • Om du vill köra arbetsbelastningar samtidigt på både spot- och fast nodpooler bör du överväga att använda prioritetsexpanmerare. Med den här metoden kan du schemalägga poddar baserat på nodpoolens prioritet.
  • Var försiktig när du tilldelar cpu-/minnesbegäranden på poddar. Autoskalning av kluster skalas upp baserat på väntande poddar i stället för CPU-/minnesbelastning på noder.
  • För kluster som samtidigt är värdar för både långvariga arbetsbelastningar, till exempel webbappar och korta/bursty-jobbarbetsbelastningar, rekommenderar vi att du separerar dem i distinkta nodpooler med tillhörighetsregler/som expanderar eller använder PriorityClass för att förhindra onödiga nodavlopp eller nedskalningsåtgärder.
  • I en autoskalningsaktiverad nodpool skalar du ned noder genom att ta bort arbetsbelastningar i stället för att minska antalet noder manuellt. Detta kan vara problematiskt om nodpoolen redan har maximal kapacitet eller om det finns aktiva arbetsbelastningar som körs på noderna, vilket kan orsaka oväntat beteende av klustrets autoskalning
  • Noder skalas inte upp om poddar har ett PriorityClass-värde under -10. Prioritet -10 är reserverad för överetablering av poddar. Mer information finns i Använda autoskalning av kluster med poddprioritet och preemption.
  • Kombinera inte andra autoskalningsmekanismer för noder, till exempel autoskalning av vm-skalningsuppsättningar, med autoskalning av kluster.
  • Autoskalning av kluster kanske inte kan skalas ned om poddar inte kan flyttas, till exempel i följande situationer:
    • En direkt skapad podd som inte backas upp av ett kontrollantobjekt, till exempel en distribution eller replikuppsättning.
    • En budget för poddstörningar (PDB) som är för restriktiv och inte tillåter att antalet poddar hamnar under ett visst tröskelvärde.
    • En podd använder nodväljare eller antitillhörighet som inte kan respekteras om de schemaläggs på en annan nod. Mer information finns i Vilka typer av poddar kan förhindra att klustrets autoskalning tar bort en nod?.

Viktigt!

Gör inga ändringar i enskilda noder i nodpoolerna med autoskalning. Alla noder i samma nodgrupp bör ha enhetlig kapacitet, etiketter, taints och systempoddar som körs på dem.

Autoskalningsprofil för kluster

Autoskalningsprofilen för kluster är en uppsättning parametrar som styr beteendet för klustrets autoskalning. Du kan konfigurera autoskalningsprofilen för klustret när du skapar ett kluster eller uppdaterar ett befintligt kluster.

Optimera autoskalningsprofilen för kluster

Du bör finjustera profilinställningarna för autoskalning av kluster enligt dina specifika arbetsbelastningsscenarier samtidigt som du överväger kompromisser mellan prestanda och kostnad. Det här avsnittet innehåller exempel som visar dessa kompromisser.

Observera att profilinställningarna för autoskalning av kluster är klusteromfattande och tillämpas på alla autoskalningsaktiverade nodpooler. Alla skalningsåtgärder som utförs i en nodpool kan påverka autoskalningsbeteendet för andra nodpooler, vilket kan leda till oväntade resultat. Kontrollera att du använder konsekventa och synkroniserade profilkonfigurationer i alla relevanta nodpooler för att säkerställa att du får önskat resultat.

Exempel 1: Optimera prestanda

För kluster som hanterar stora och höga arbetsbelastningar med primärt fokus på prestanda rekommenderar vi att du ökar scan-interval och minskar scale-down-utilization-threshold. De här inställningarna hjälper till att batcha flera skalningsåtgärder i ett enda anrop, vilket optimerar skalningstiden och användningen av läs-/skrivkvoter för beräkning. Det bidrar också till att minska risken för snabba nedskalningsåtgärder på underutnyttjanade noder, vilket förbättrar poddschemaläggningens effektivitet. ok-total-unready-countÖka också och max-total-unready-percentage.

För kluster med daemonset-poddar rekommenderar vi inställningen ignore-daemonset-utilization till true, som effektivt ignorerar nodanvändning av daemonset-poddar och minimerar onödiga nedskalningsåtgärder. Se profil för bursty-arbetsbelastningar

Exempel 2: Optimera för kostnad

Om du vill ha en kostnadsoptimerad profil rekommenderar vi att du anger följande parameterkonfigurationer:

  • Reduce scale-down-unneeded-time, vilket är hur lång tid en nod ska behövas innan den är berättigad till nedskalning.
  • Reduce scale-down-delay-after-add, vilket är hur lång tid det tar att vänta efter att en nod har lagts till innan du överväger att skala ned den.
  • Öka scale-down-utilization-threshold, vilket är användningströskelvärdet för att ta bort noder.
  • Öka max-empty-bulk-delete, vilket är det maximala antalet noder som kan tas bort i ett enda anrop.
  • Ställ in skip-nodes-with-local-storage på false.
  • Öka ok-total-unready-countoch max-total-unready-percentage

Vanliga problem och minskningsrekommendationer

Visa skalningsfel och uppskalning av händelser som inte utlösts via CLI eller portalen.

Utlöser inte uppskalningsåtgärder

Vanliga orsaker Rekommendationer för minskning
PersistentVolume-nodtillhörighetskonflikter, som kan uppstå när du använder klustrets autoskalning med flera tillgänglighetszoner eller när en podds eller beständiga volymzon skiljer sig från nodens zon. Använd en nodpool per tillgänglighetszon och aktivera --balance-similar-node-groups. Du kan också ange fältet volumeBindingMode till WaitForFirstConsumer i poddspecifikationen för att förhindra att volymen binds till en nod tills en podd som använder volymen har skapats.
Taints- och Toleranser/Nodtillhörighetskonflikter Utvärdera de taints som tilldelats dina noder och granska de toleranser som definierats i dina poddar. Om det behövs kan du göra justeringar i taints och toleranser för att säkerställa att dina poddar kan schemaläggas effektivt på noderna.

Fel vid uppskalningsåtgärd

Vanliga orsaker Rekommendationer för minskning
IP-adressöverbelastning i undernätet Lägg till ytterligare ett undernät i samma virtuella nätverk och lägg till ytterligare en nodpool i det nya undernätet.
Överbelastning av kärnkvoter Den godkända kärnkvoten har uttömts. Begär en kvotökning. Autoskalning av kluster anger ett exponentiellt backoff-tillstånd i den specifika nodgruppen när det uppstår flera misslyckade uppskalningsförsök.
Maximal storlek på nodpoolen Öka maxnoderna i nodpoolen eller skapa en ny nodpool.
Begäranden/anrop som överskrider hastighetsgränsen Se fel med 429 för många begäranden.

Fel vid nedskalningsåtgärd

Vanliga orsaker Rekommendationer för minskning
Podd som förhindrar nodavlopp/Det går inte att ta bort podden • Visa vilka typer av poddar som kan förhindra nedskalning.
• För poddar som använder lokal lagring, till exempel hostPath och emptyDir, anger du flaggan skip-nodes-with-local-storage för autoskalningsprofil för kluster till false.
• I poddspecifikationen anger du kommentaren cluster-autoscaler.kubernetes.io/safe-to-evict till true.
• Kontrollera ditt PDB eftersom det kan vara restriktivt.
Minsta storlek på nodpool Minska nodpoolens minsta storlek.
Begäranden/anrop som överskrider hastighetsgränsen Se fel med 429 för många begäranden.
Skrivåtgärder låsta Gör inga ändringar i den fullständigt hanterade AKS-resursgruppen (se AKS-supportprinciper). Ta bort eller återställa eventuella resurslås som du tidigare tillämpade på resursgruppen.

Andra problem

Vanliga orsaker Rekommendationer för minskning
PriorityConfigMapNotMatchedGroup Se till att du lägger till alla nodgrupper som kräver automatisk skalning i expanderkonfigurationsfilen.

Nodpool i backoff

Nodpoolen i backoff introducerades i version 0.6.2 och gör att klustrets autoskalning säkerhetskopieras från skalning av en nodpool efter ett fel.

Beroende på hur länge skalningsåtgärderna har haft fel kan det ta upp till 30 minuter innan du gör ett nytt försök. Du kan återställa nodpoolens backoff-tillstånd genom att inaktivera och sedan återaktivera automatisk skalning.