Tre nivÄer av automatiserad skalning i Kubernetes: hur man effektivt anvÀnder dem

Tre nivÄer av automatiserad skalning i Kubernetes: hur man effektivt anvÀnder dem
För att helt förstÄ Kubernetes mÄste man kÀnna till olika sÀtt att skala klusterresurser: enligt utvecklarna av systemet, Àr detta en av de viktigaste uppgifterna för Kubernetes. Vi har förberett en översikt av mekanismerna för horisontell och vertikal autoskalering samt storleksÀndring av kluster, tillsammans med rekommendationer om hur man effektivt anvÀnder dem.

Artikeln Kubernetes Autoscaling 101: Cluster Autoscaler, Horizontal Autoscaler, and Vertical Pod Autoscaler översattes av teamet som implementerade autoskalering i Kubernetes aaS frÄn Mail.ru.

Varför det Àr viktigt att tÀnka pÄ skalning

Kubernetes — ett verktyg för att hantera resurser och orkestrering. Naturligtvis Ă€r det bra att arbeta med fantastiska funktioner för distribution, övervakning och hantering av pods (pod-modulen Ă€r en grupp containrar som körs som svar pĂ„ en begĂ€ran).

Men man bör ocksÄ tÀnka pÄ följande frÄgor:

  1. Hur skalar man moduler och applikationer?
  2. Hur hÄller man containrarna i drift och effektiva?
  3. Hur reagerar man pÄ stÀndiga förÀndringar i koden och anvÀndarbelastningen?

Att konfigurera Kubernetes-kluster för resurs- och prestandabalans kan vara en komplex uppgift, det krÀver expertkunskap om hur Kubernetes fungerar. Arbetsbelastningen pÄ din applikation eller tjÀnster kan variera under dagen eller till och med under en timme, sÄ balans bör ses som en kontinuerlig process.

NivÄerna av Kubernetes-autoskisering

Effektiv autoskalering krÀver samordning mellan tvÄ nivÄer:

  1. Pod-nivÄn, som inkluderar horisontell (Horizontal Pod Autoscaler, HPA) och vertikal autoskalering (Vertical Pod Autoscaler, VPA). Detta Àr skalning av befintliga resurser för dina containrar.
  2. KlusternivÄn, som hanteras av cluster autoscalersystemet (Cluster Autoscaler, CA), vilket ökar eller minskar antalet noder inom klustret.

Modulen för horisontell autoskalering (HPA)

Som namnet antyder, skalar HPA antalet repliker av pods. Som triggere för att Àndra antalet repliker anvÀnder de flesta DevOps-belastning pÄ processor och minne. Men man kan Àven skala systemet baserat pÄ anpassade metrikar, deras kombination eller till och med externa metrikar.

Översikt över hur HPA fungerar:

  1. HPA övervakar kontinuerligt de metrikvÀrden som angavs vid installationen, med ett standardintervall pÄ 30 sekunder.
  2. HPA försöker öka antalet moduler om det angivna tröskelvÀrdet har nÄtts.
  3. HPA uppdaterar antalet replikor inom distributions-/replikatorns kontroller.
  4. Distributions-/replikatorns kontroller distribuerar sedan alla nödvÀndiga ytterligare moduler.

Tre nivÄer av automatiserad skalning i Kubernetes: hur man effektivt anvÀnder dem
HPA initierar distributionsprocessen av moduler nÀr tröskelvÀrdet för metrikvÀrdena nÄs.

Vid anvÀndning av HPA bör följande beaktas:

  • Standardintervall för HPA:s kontroll Ă€r 30 sekunder. Det stĂ€lls in med flaggan horizontal-pod-autoscaler-sync-period i kontrolleraren.
  • Den relativa felmarginalen Ă€r som standard 10%.
  • Efter den senaste ökningen av antalet moduler vĂ€ntar HPA pĂ„ att metrikvĂ€rdena ska stabiliseras under tre minuter. Detta intervall stĂ€lls in med flaggan horizontal-pod-autoscaler-upscale-delay.
  • Efter den senaste minskningen av antalet moduler vĂ€ntar HPA pĂ„ stabilisering under fem minuter. Detta intervall stĂ€lls in med flaggan horizontal-pod-autoscaler-downscale-delay.
  • HPA fungerar bĂ€st med distributionsobjekt, inte med replikatorer. Horisontell autoskalning Ă€r inkompatibel med rullande uppdatering (rolling update), som direkt manipulerar med replikatorer. Vid distribution beror antalet replikor direkt pĂ„ distributionsobjekten.

Vertikal autoskalning av pods

Vertikal autoskalning (VPA) tilldelar mer (eller mindre) CPU-tid eller minneskapacitet till befintliga pods. Det passar för bÄde stateful- och stateless-pods, men Àr frÀmst avsett för stateful-tjÀnster. Som tur Àr kan du ocksÄ tillÀmpa VPA pÄ moduler utan bevarande av tillstÄnd om det behövs för att automatiskt justera mÀngden ursprungligt tilldelade resurser.

VPA reagerar ocksÄ pÄ OOM-hÀndelser (out of memory, otillrÀckligt med minne). För att Àndra CPU-tiden och minnesmÀngden krÀvs en omstart av pods. Vid omstart följer VPA fördelningsbudgeten (pods distribution budget, PDB) för att sÀkerstÀlla det minimalt nödvÀndiga antalet moduler.

Du kan stÀlla in minimala och maximala resurser för varje modul. SÄ kan du begrÀnsa den maximala tilldelningen av minne till 8 GB. Detta Àr anvÀndbart om de aktuella noderna inte kan tilldela mer Àn 8 GB minne till containern. Detaljerade specifikationer och hur det fungerar beskrivs i den officiella VPA-wikin.

Dessutom har VPA en intressant rekommendationsfunktion (VPA Recommender). Den spÄrar resursanvÀndning och OOM-hÀndelser för alla moduler för att föreslÄ nya vÀrden för minne och CPU-tid baserat pÄ en intelligent algoritm med historiska mÀtvÀrden i Ätanke. Det finns ocksÄ ett API-grÀnssnitt som tar emot en pod-descriptor och returnerar föreslagna resursvÀrden.

Det Àr vÀrt att notera att VPA Recommender inte spÄrar "grÀnsen" för resurser. Detta kan leda till att modulen monopoliserar resurserna inom noderna. Det Àr bÀttre att stÀlla in ett grÀnsvÀrde pÄ namnutrymmet för att undvika enorm minnes- eller CPU-tidsförbrukning.

Översiktlig arbetsstruktur för VPA:

  1. VPA övervakar kontinuerligt de metrikvÀrden som anges vid installationen med en standardintervall pÄ 10 sekunder.
  2. Om den angivna tröskeln nÄs försöker VPA att Àndra den tilldelade mÀngden resurser.
  3. VPA uppdaterar mÀngden resurser inom distributions-/replikationskontrollern.
  4. Vid omstart av moduler tillÀmpas alla nya resurser pÄ de skapade instanserna.

Tre nivÄer av automatiserad skalning i Kubernetes: hur man effektivt anvÀnder dem
VPA lÀgger till det nödvÀndiga antalet resurser

TÀnk pÄ följande punkter vid anvÀndning av VPA:

  • Skalning krĂ€ver att podden mĂ„ste startas om. Detta behövs för att undvika instabilitet efter Ă€ndringar. För tillförlitlighet omstartar modulerna och fördelar dem över noder baserat pĂ„ de nya tilldelade resurserna.
  • VPA och HPA Ă€r för nĂ€rvarande inkompatibla med varandra och kan inte fungera pĂ„ samma poddar. Om du anvĂ€nder bĂ„da skalningsmekanismerna i samma kluster, se till att instĂ€llningarna inte tillĂ„ter dem att aktiveras pĂ„ samma objekt.
  • VPA justerar containerförfrĂ„gningar pĂ„ resurser baserat endast pĂ„ tidigare och nuvarande anvĂ€ndning. Den sĂ€tter inga resursanvĂ€ndningsgrĂ€nser. Problem kan uppstĂ„ med appar som börjar ta mer och mer resurser, vilket kan leda till att Kubernetes stĂ€nger av denna pod.
  • VPA Ă€r fortfarande i ett tidigt utvecklingsskede. Var beredd pĂ„ att systemet kan genomgĂ„ vissa förĂ€ndringar inom kort. Du kan lĂ€sa om kĂ€nda begrĂ€nsningar och utvecklingsplaner. SĂ„, bland planerna Ă€r att implementera samarbete mellan VPA och HPA, samt att distribuera moduler med en vertikal autoskaleringpolicy för dem (t.ex. en speciell etikett 'requires VPA').

Automatisk skalning av Kubernetes-klustret

Cluster Autoscaler (CA) Ă€ndrar antalet noder baserat pĂ„ antalet vĂ€ntande pod-moduler. Systemet kontrollerar periodiskt om det finns vĂ€ntande moduler — och ökar klusterstorleken om mer resurser behövs och om klustret inte överskrider satta grĂ€nser. CA interagerar med molnleverantören för att begĂ€ra ytterligare noder eller frigöra inaktiva. Den första offentliga versionen av CA introducerades i Kubernetes 1.8.

Hög nivÄ översikt av CA:s funktion:

  1. CA kontrollerar vÀntande moduler med en standardintervall pÄ 10 sekunder.
  2. Om en eller flera moduler vÀntar pÄ grund av att klustret har otillrÀckliga tillgÀngliga resurser för att distribuera dem, försöker den förbereda en eller flera extra noder.
  3. NÀr molnleverantören tilldelar den nödvÀndiga noden ansluts den till klustret och Àr redo att betjÀna pod-moduler.
  4. Kubernetes-schemalĂ€ggaren distribuerar vĂ€ntande moduler till den nya noden. Om vissa moduler fortfarande förblir i vĂ€ntande status upprepas processen — och nya noder lĂ€ggs till i klustret.

Tre nivÄer av automatiserad skalning i Kubernetes: hur man effektivt anvÀnder dem
Automatisk tilldelning av klusternoder i molnet

TÀnk pÄ följande nÀr du anvÀnder CA:

  • CA garanterar att alla moduler i klustret har plats att köras, oavsett CPU-belastning. Dessutom försöker den sĂ€kerstĂ€lla att det inte finns nĂ„gra onödiga noder i klustret.
  • CA registrerar behovet av att skala upp efter ungefĂ€r 30 sekunder.
  • NĂ€r en nod inte lĂ€ngre behövs vĂ€ntar CA som standard i 10 minuter innan den skalar ner systemet.
  • I det automatiska skalningssystemet finns begreppet expanderare. Dessa Ă€r olika strategier för att vĂ€lja en grupp noder dĂ€r nya noder ska lĂ€ggas till.
  • AnvĂ€nd alternativet ansvarsfullt cluster-autoscaler.kubernetes.io/safe-to-evict (true). Om du har för mĂ„nga pods eller om mĂ„nga av dem Ă€r spridda över noderna, kommer du i stor utstrĂ€ckning att förlora möjligheten att skala ner klustret.
  • AnvĂ€nd PodDisruptionBudgets, för att förhindra att pods tas bort, vilket kan leda till att delar av din applikation helt slutar fungera.

Hur Kubernetes automatiska skalningssystem samverkar

För perfekt harmoni bör bÄde pod skalning (HPA/VPA) och kluster skalning tillÀmpas. De kan relativt enkelt samverka:

  1. HPA eller VPA uppdaterar antalet replicerade pods eller resurser tilldelade befintliga pods.
  2. Om det saknas noder för planerad skalning upptÀcker CA pods som Àr i vÀntande tillstÄnd.
  3. CA tilldelar nya noder.
  4. Moduler distribueras över de nya noderna.

Tre nivÄer av automatiserad skalning i Kubernetes: hur man effektivt anvÀnder dem
Gemensamt Kubernetes skalningssystem

Typiska fel vid Kubernetes automatisk skalning

Det finns flera typiska problem som devops-team stÄr inför nÀr de försöker implementera automatisk skalning.

HPA och VPA Àr beroende av mÀtvÀrden och viss historik. Om det inte tilldelas tillrÀckliga resurser kommer modulerna att minskas och inte kunna generera mÀtvÀrden. I sÄ fall kommer automatisk skalning aldrig att Àga rum.

SjĂ€lva skalningsoperationen Ă€r tidskĂ€nslig. Vi vill att moduler och kluster ska skalas snabbt – innan anvĂ€ndarna mĂ€rker nĂ„gra problem eller avbrott. DĂ€rför ska genomsnittlig tid för skalning av pods och kluster beaktas.

Det perfekta scenariot – 4 minuter:

  1. 30 sekunder. Uppdatering av mÄl-mÀtvÀrden: 30-60 sekunder.
  2. 30 sekunder. HPA kontrollerar mÀtvÀrden: 30 sekunder.
  3. Mindre Àn 2 sekunder. Pods skapas och gÄr in i vÀntande tillstÄnd: 1 sekund.
  4. Mindre Àn 2 sekunder. CA ser vÀntande moduler och skickar anrop för att förbereda noder: 1 sekund.
  5. 3 minuter. Molnleverantören tilldelar noder. K8s vÀntar tills de Àr redo: upp till 10 minuter (beroende pÄ flera faktorer).

Den sÀmsta (mer realistiska) scenariot Àr 12 minuter:

  1. 30 sekunder. Uppdaterar mÄtt.
  2. 30 sekunder. HPA kontrollerar mÀtvÀrden.
  3. Mindre Àn 2 sekunder. Podmoduler skapas och gÄr i vÀntande tillstÄnd.
  4. Mindre Àn 2 sekunder. CA ser de vÀntande modulerna och skickar begÀrningar för att förbereda noder.
  5. 10 minuter. Molnleverantören tilldelar noder. K8s vÀntar tills de Àr redo. VÀntetiden beror pÄ flera faktorer, sÄsom leverantörens fördröjning, OS-fördröjning och drift av hjÀlpsystem.

Blanda inte molnleverantörernas skalningsmekanismer med vÄr CA. Den senare arbetar inom Kubernetes-klustret, medan molnleverantörens mekanism fungerar utifrÄn noddistribution. Den vet inte vad som hÀnder med dina poddar eller applikationen. Dessa system arbetar parallellt.

Hur man hanterar skalning i Kubernetes

  1. Kubernetes Àr ett verktyg för resursstyrning och orkestrering. Hantering av poddar och klustrets resurser Àr en nyckelpunkt i att bemÀstra Kubernetes.
  2. FörstÄ logiken för poddars skalbarhet med hÀnsyn till HPA och VPA.
  3. CA bör anvÀndas endast om du har en god förstÄelse för dina poddar och containrers behov.
  4. För optimal konfiguration av klustret mÄste du förstÄ hur olika skalningssystem fungerar tillsammans.
  5. Vid bedömning av skalningstid, ha i Ätanke det sÀmsta och bÀsta scenariot.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster