
För att helt förstÄ Kubernetes mÄste man kÀnna till olika sÀtt att skala klusterresurser: enligt , À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 översattes av teamet som implementerade autoskalering i .
Varför det Àr viktigt att tÀnka pÄ skalning
â 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:
- Hur skalar man moduler och applikationer?
- Hur hÄller man containrarna i drift och effektiva?
- 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:
- 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.
- 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Ä , deras eller till och med .
Ăversikt över hur HPA fungerar:
- HPA övervakar kontinuerligt de metrikvÀrden som angavs vid installationen, med ett standardintervall pÄ 30 sekunder.
- HPA försöker öka antalet moduler om det angivna tröskelvÀrdet har nÄtts.
- HPA uppdaterar antalet replikor inom distributions-/replikatorns kontroller.
- Distributions-/replikatorns kontroller distribuerar sedan alla nödvÀndiga ytterligare moduler.

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 () 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 .
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:
- VPA övervakar kontinuerligt de metrikvÀrden som anges vid installationen med en standardintervall pÄ 10 sekunder.
- Om den angivna tröskeln nÄs försöker VPA att Àndra den tilldelade mÀngden resurser.
- VPA uppdaterar mÀngden resurser inom distributions-/replikationskontrollern.
- Vid omstart av moduler tillÀmpas alla nya resurser pÄ de skapade instanserna.

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 och . 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:
- CA kontrollerar vÀntande moduler med en standardintervall pÄ 10 sekunder.
- 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.
- NÀr molnleverantören tilldelar den nödvÀndiga noden ansluts den till klustret och Àr redo att betjÀna pod-moduler.
- 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.

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 , 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:
- HPA eller VPA uppdaterar antalet replicerade pods eller resurser tilldelade befintliga pods.
- Om det saknas noder för planerad skalning upptÀcker CA pods som Àr i vÀntande tillstÄnd.
- CA tilldelar nya noder.
- Moduler distribueras över de nya noderna.

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:
- 30 sekunder. Uppdatering av mÄl-mÀtvÀrden: 30-60 sekunder.
- 30 sekunder. HPA kontrollerar mÀtvÀrden: 30 sekunder.
- Mindre Àn 2 sekunder. Pods skapas och gÄr in i vÀntande tillstÄnd: 1 sekund.
- Mindre Àn 2 sekunder. CA ser vÀntande moduler och skickar anrop för att förbereda noder: 1 sekund.
- 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:
- 30 sekunder. Uppdaterar mÄtt.
- 30 sekunder. HPA kontrollerar mÀtvÀrden.
- Mindre Àn 2 sekunder. Podmoduler skapas och gÄr i vÀntande tillstÄnd.
- Mindre Àn 2 sekunder. CA ser de vÀntande modulerna och skickar begÀrningar för att förbereda noder.
- 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
- Kubernetes Àr ett verktyg för resursstyrning och orkestrering. Hantering av poddar och klustrets resurser Àr en nyckelpunkt i att bemÀstra Kubernetes.
- FörstÄ logiken för poddars skalbarhet med hÀnsyn till HPA och VPA.
- CA bör anvÀndas endast om du har en god förstÄelse för dina poddar och containrers behov.
- För optimal konfiguration av klustret mÄste du förstÄ hur olika skalningssystem fungerar tillsammans.
- Vid bedömning av skalningstid, ha i Ätanke det sÀmsta och bÀsta scenariot.
KĂ€lla: habr.com
