Kubernetes arbetarnoder: mÄnga smÄ noder eller nÄgra fÄ stora noder?

Kubernetes arbetarnoder: mÄnga smÄ noder eller nÄgra fÄ stora noder?
NÀr man skapar ett Kubernetes-kluster kan frÄgor uppstÄ: hur mÄnga arbetsnoder ska jag konfigurera och vilken typ? Vad Àr bÀttre för ett lokalt kluster: att köpa flera kraftfulla servrar eller att anvÀnda ett dussin gamla maskiner i ditt datacenter? Och i molnet, Àr det bÀttre att ta Ätta enkÀrniga eller tvÄ fyrkÀrniga instanser?

Svaren pÄ dessa frÄgor finns i artikeln Daniel Weibel, mjukvaruingenjör och lÀrare pÄ utbildningsprojektet Learnk8s i lagets översÀttning Kubernetes aaS frÄn Mail.ru.

Klusterkapacitet

I allmÀnhet kan ett Kubernetes-kluster betraktas som en stor "supernod". Dess totala berÀkningskraft Àr summan av kraften hos alla dess ingÄende noder.

Det finns flera sÀtt att uppnÄ den önskade mÄlkapaciteten för ett kluster. Till exempel behöver vi ett kluster med en total kapacitet pÄ 8 processorkÀrnor och 32 GB RAM eftersom uppsÀttningen applikationer krÀver den mÀngden resurser. Sedan kan du installera tvÄ noder med 16 GB minne eller fyra noder med 8 GB minne, tvÄ fyrkÀrniga processorer eller fyra dubbelkÀrniga processorer.

HÀr Àr bara tvÄ möjliga sÀtt att skapa ett kluster:

Kubernetes arbetarnoder: mÄnga smÄ noder eller nÄgra fÄ stora noder?
BÄda alternativen ger ett kluster med samma kapacitet, men den nedre konfigurationen har fyra mindre noder, medan den övre konfigurationen har tvÄ större noder.

Vilket alternativ Àr bÀttre?

För att besvara denna frÄga, lÄt oss titta pÄ fördelarna med bÄda alternativen. Vi har sammanfattat dem i en tabell.

Flera stora noder

Massor av smÄ knutar

Enklare klusterhantering (om det sker lokalt)

Smidig autoskalning

Billigare (om det sker pÄ plats)

Priset Àr inte mycket annorlunda (i molnet)

Du kan köra resurskrÀvande applikationer

FullstÀndig replikering

Resurser anvÀnds mer effektivt (mindre omkostnader för systemdaemoner)
Högre feltolerans i klustret

Observera att vi bara talar om fungerande noder. Att vÀlja antal och storlek pÄ masternoder Àr en helt annan frÄga.

SÄ, lÄt oss diskutera varje punkt frÄn tabellen mer i detalj.

Alternativ 1: Flera stora noder

Det mest extrema alternativet Àr en arbetsnod för hela klusterkapaciteten. I exemplet ovan skulle detta vara en arbetsnod med 16 CPU-kÀrnor och 16 GB RAM.

Fördelar

Plusnummer 1. LĂ€ttare att kontrollera
Det Àr lÀttare att hantera ett fÄtal bilar Àn en hel flotta. Lansera uppdateringar och korrigeringar snabbare, synkronisera enklare. Antalet misslyckanden i absoluta tal Àr ocksÄ lÀgre.

Observera att allt ovanstÄende gÀller din egen hÄrdvara, dina egna servrar och inte molninstanser.

I molnet Àr situationen annorlunda. DÀr hanteras hanteringen av en molntjÀnstleverantör. Att hantera tio noder i molnet skiljer sig sÄledes inte mycket frÄn att hantera en nod.

Trafikdirigering och lastbalansering mellan poddar i molnet utförs automatiskttrafik som kommer frÄn internet dirigeras till den huvudsakliga lastbalanseraren, som dirigerar trafiken till porten för en av noderna (NodePort-tjÀnsten anger en port i intervallet 30000-32767 pÄ varje klusternod). Reglerna som anges av kube-proxy omdirigerar trafik frÄn noden till poden. SÄ hÀr ser det ut för tio poddar pÄ tvÄ noder:

Kubernetes arbetarnoder: mÄnga smÄ noder eller nÄgra fÄ stora noder?
Plus #2: LĂ€gre kostnad per nod
En kraftfull bil Àr dyrare, men prisökningen Àr inte nödvÀndigtvis linjÀr. Med andra ord Àr en tiokÀrnig server med 10 GB minne vanligtvis billigare Àn tio enkÀrniga servrar med samma mÀngd minne.

Men observera att den hÀr regeln vanligtvis inte fungerar i molntjÀnster. I de nuvarande prissÀttningssystemen hos alla större molnleverantörer ökar priserna linjÀrt med kapaciteten.

SÄ i molnet kan man oftast inte spara pengar pÄ kraftfullare servrar.

Fördel #3: Du kan köra resurskrÀvande applikationer
Vissa applikationer krÀver kraftfulla servrar i ett kluster. Om till exempel ett maskininlÀrningssystem krÀver 8 GB minne kommer du inte att kunna köra det pÄ 1 GB noder om du inte har minst en stor arbetsnod.

Nackdelar

Nackdelar #1: För mÄnga poddar per nod
Om samma uppgift utförs pÄ fÀrre noder, kommer var och en av dem naturligtvis att ha fler poddar.

Detta kan vara ett problem.

Anledningen Àr att varje pod introducerar en viss overhead för containerkörningen (t.ex. Docker) samt kubelet och cAdvisor.

Till exempel undersöker kubelet regelbundet alla containrar pÄ en nod för överlevnad - ju fler containrar, desto mer arbete mÄste kubelet göra.

CAdvisor samlar in statistik om resursanvĂ€ndning frĂ„n alla containrar pĂ„ en nod, och kubelet frĂ„gar regelbundet efter denna information och tillhandahĂ„ller den via ett API. Återigen, ju fler containrar, desto mer arbete för bĂ„de cAdvisor och kubelet.

Om antalet moduler ökar kan det göra systemet lÄngsammare och till och med undergrÀva dess tillförlitlighet.

Kubernetes arbetarnoder: mÄnga smÄ noder eller nÄgra fÄ stora noder?
Det finns nÄgra i Kubernetes-förvaret klagade, att noder hoppar mellan statusarna Klar/Inte klar eftersom vanliga kubelet-kontroller av alla containrar pÄ noden tar för lÄng tid.
Av denna anledning, Kubernetes rekommenderar att man placerar högst 110 poddar per nod. Beroende pÄ nodens prestanda kan du köra fler poddar per nod, men det Àr svÄrt att förutsÀga om det kommer att bli problem eller om allt kommer att fungera bra. Det Àr vÀrt att testa arbetet i förvÀg.

Minus #2. ReplikeringsbegrÀnsning
För fÄ noder begrÀnsar den effektiva graden av applikationsreplikering. Om du till exempel har ett program med hög tillgÀnglighet med fem repliker men bara tvÄ noder, reduceras programmets effektiva replikeringsgrad till tvÄ.

Fem repliker kan bara distribueras över tvÄ noder, och om en av dem misslyckas tas flera repliker omedelbart bort.

Om du har fem eller fler noder kommer varje replik att köras pÄ en separat nod, och ett enskilt nodfel tar bort högst en replik.

SÄledes kan höga tillgÀnglighetskrav krÀva ett visst minsta antal noder i ett kluster.

Minus #3. VĂ€rre konsekvenser av misslyckande
Med ett litet antal noder fÄr varje fel allvarligare konsekvenser. Om du till exempel bara har tvÄ noder och en av dem misslyckas, försvinner hÀlften av dina moduler pÄ en gÄng.

SjÀlvklart kommer Kubernetes att migrera arbetsbelastningen frÄn den felaktiga noden till andra. Men om det finns fÄ av dem, kanske det inte finns tillrÀckligt med ledig kapacitet. Som ett resultat kommer vissa av dina applikationer att vara otillgÀngliga tills du ÄterstÀller den felaktiga noden.

SÄledes, ju fler noder, desto mindre pÄverkan har hÄrdvarufel.

Minus #4. Fler steg för autoskalning
Kubernetes tillhandahÄller ett system för autoskalning av kluster för molninfrastruktur, vilket gör att noder kan lÀggas till eller tas bort automatiskt baserat pÄ aktuella behov. Med större noder blir autoskalning mer ryckig och klumpig. Till exempel, pÄ tvÄ noder, kommer att lÀgga till ytterligare en nod att öka klusterkapaciteten med 50 % samtidigt. Och du kommer att behöva betala för dessa resurser, Àven om du inte behöver dem.

SÄ om du planerar att anvÀnda klusterautomatisk skalning, ju mindre noderna Àr, desto mer flexibel och kostnadseffektiv blir skalningen.

Nu ska vi titta pÄ fördelarna och nackdelarna med att ha ett stort antal smÄ noder.

Alternativ 2: MÄnga smÄ noder

Fördelarna med denna metod följer i huvudsak av nackdelarna med det motsatta alternativet med flera stora noder.

Fördelar

Fördel #1: Mindre pÄverkan av misslyckanden
Ju fler noder, desto fÀrre poddar pÄ varje nod. Om du till exempel har hundra moduler pÄ tio noder, kommer varje nod att ha i genomsnitt tio moduler.

SÄ om en nod gÄr sönder förlorar du bara 10 % av din arbetsbelastning. Det Àr troligt att endast ett litet antal repliker pÄverkas och att applikationerna som helhet kommer att förbli fungerande.

Dessutom kommer de ÄterstÄende noderna sannolikt att ha tillrÀckligt med reservkapacitet för att hantera den felaktiga nodens arbetsbelastning, sÄ Kubernetes kan fritt omschemalÀgga poddar och dina applikationer kommer att vara igÄng igen relativt snabbt.

Plus #2: Bra replikering
Om det finns tillrÀckligt med noder kan Kubernetes-schemalÀggaren tilldela olika noder till alla repliker. PÄ sÄ sÀtt, om en nod misslyckas, pÄverkas endast en replik och programmet förblir tillgÀngligt.

Nackdelar

Minus #1: SvÄrare att kontrollera
Ett stort antal noder Àr svÄrare att hantera. Till exempel mÄste varje Kubernetes-nod kommunicera med alla andra, vilket innebÀr att antalet anslutningar vÀxer kvadratiskt, och alla dessa anslutningar mÄste spÄras.

Nodkontrollanten i Kubernetes Controller Manager gĂ„r regelbundet igenom alla noder i klustret för att kontrollera deras hĂ€lsa – ju fler noder, desto mer belastning pĂ„ kontrollanten.

Belastningen pÄ etcd-databasen ökar ocksÄ - varje kubelet- och kube-proxy-anrop bevakare för etcd (via API:et) till vilken etcd ska sÀnda objektuppdateringar.

I allmÀnhet lÀgger varje arbetsnod en extra belastning pÄ systemkomponenterna i huvudnoderna.

Kubernetes arbetarnoder: mÄnga smÄ noder eller nÄgra fÄ stora noder?
Kubernetes stöder officiellt kluster med antal noder upp till 5000. I praktiken finns det dock redan 500 noder kan orsaka icke-triviala problem.

För att hantera ett stort antal arbetsnoder bör effektivare huvudnoder vÀljas. Till exempel, kube-up installeras automatiskt rÀtt VM-storlek för huvudnoden beroende pÄ antalet arbetsnoder. Det vill sÀga, ju fler fungerande noder, desto mer produktiva mÄste huvudnoderna vara.

För att lösa dessa specifika problem finns det sÀrskilda utvecklingar, som t.ex. Virtuell Kubelet. Det hÀr systemet lÄter dig kringgÄ begrÀnsningar och bygga kluster med ett stort antal fungerande noder.

Nackdelar #2: Mer omkostnader
PĂ„ varje arbetsnod kör Kubernetes en uppsĂ€ttning systemdaemoner – dessa inkluderar containerkörningen (t.ex. Docker), kube-proxy och kubelet, inklusive cAdvisor. Tillsammans förbrukar de en viss, fast mĂ€ngd resurser.

Om du har mĂ„nga smĂ„ noder Ă€r andelen av denna overhead pĂ„ varje nod större. TĂ€nk dig till exempel att alla systemdaemoner pĂ„ en enda nod tillsammans anvĂ€nder 0,1 CPU-kĂ€rnor och 0,1 GB minne. Om du har en nod med 10 kĂ€rnor och 1 GB minne förbrukar daemoner 1 % av klusterkapaciteten. Å andra sidan, pĂ„ tio noder med en enda kĂ€rna och 10 GB minne, kommer daemonerna att ta upp XNUMX % av klusterkapaciteten.

SÄledes, ju fÀrre noder, desto effektivare anvÀnds infrastrukturen.

Minus #3: Ineffektiv resursanvÀndning
PÄ smÄ noder kan det vara sÄ att de ÄterstÄende resursfragmenten Àr för smÄ för att tilldela nÄgon arbetsbelastning, sÄ de förblir oanvÀnda.

Till exempel krÀver varje pod 0,75 GB minne. Om du har tio noder, var och en med 1 GB minne, kan du köra tio poddar, vilket lÀmnar varje nod med 0,25 GB oanvÀnt minne.

Det betyder att 25 % av hela klustrets minne Àr slösat bort.

PÄ en stor nod med 10 GB minne kan du köra 13 av dessa moduler och fortfarande bara ha en oanvÀnd bit pÄ 0,25 GB kvar.

I det hÀr fallet gÄr endast 2,5 % av minnet till spillo.

SÄledes anvÀnds resurser mer optimalt pÄ stora noder.

NÄgra fÄ stora noder eller mÄnga smÄ?

SÄ, vilket Àr bÀttre: nÄgra stora noder i ett kluster eller mÄnga smÄ? Som alltid finns det inget tydligt svar. Mycket beror pÄ typen av applikation.

Om till exempel en applikation krĂ€ver 10 GB minne Ă€r större noder det sjĂ€lvklara valet. Och om en applikation krĂ€ver tiofaldig replikering för hög tillgĂ€nglighet Ă€r det knappast vĂ€rt risken att placera repliker pĂ„ bara tvĂ„ noder – klustret bör ha minst tio noder.

I mellanliggande situationer, gör ett val baserat pÄ fördelarna och nackdelarna med varje alternativ. Kanske Àr vissa argument mer relevanta för din situation Àn andra.

Och det Àr inte alls nödvÀndigt att göra alla knutar lika stora. Det finns inget som hindrar dig frÄn att först experimentera med noder av en storlek, sedan lÀgga till noder av en annan storlek till dem och kombinera dem i ett kluster. Arbetarnoder i ett Kubernetes-kluster kan vara helt heterogena. SÄ du kan försöka kombinera fördelarna med bÄda metoderna.

Det finns inget enda recept, och varje situation har sina egna nyanser, och endast produktionen kommer att visa sanningen.

ÖversĂ€ttning utarbetad av molnplattformsteamet Mail.ru molnlösningar.

Mer om Kubernetes: 25 anvÀndbara verktyg för att hantera och distribuera kluster.

KĂ€lla: will.com

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