Kubernetes vinnuhnútar: margir litlir eða nokkrir stórir?

Kubernetes vinnuhnútar: margir litlir eða nokkrir stórir?
Þegar þú býrð til Kubernetes klasa geta spurningar vaknað: hversu marga vinnuhnúta á að stilla og hvaða tegund? Hvað er betra fyrir þyrping á staðnum: keyptu nokkra öfluga netþjóna eða notaðu tugi gamalla véla í gagnaverinu þínu? Er betra að taka átta einkjarna eða tvö fjögurra kjarna tilvik í skýinu?

Svörin við þessum spurningum eru í greininni. Daniel Weibel, hugbúnaðarverkfræðingur og kennari Learnk8s fræðsluverkefnisins í þýðingu skipunarinnar Kubernetes aaS frá Mail.ru.

Getu klasa

Almennt má líta á Kubernetes-þyrpinguna sem stóran „ofurhnút“. Heildartölvunarkraftur þess er summan af valdi allra hnúta sem eru í honum.

Það eru nokkrar leiðir til að ná æskilegu þyrpingargetumarkmiði þínu. Til dæmis þurfum við þyrping með samtals 8 örgjörvakjarna og 32 GB af vinnsluminni vegna þess að sett af forritum krefst svo mikils fjármagns. Þá er hægt að setja upp tvo hnúta með 16 GB minni eða fjóra hnúta með 8 GB minni, tvo fjórkjarna örgjörva eða fjóra tvíkjarna.

Hér eru aðeins tvær mögulegar leiðir til að búa til klasa:

Kubernetes vinnuhnútar: margir litlir eða nokkrir stórir?
Báðir valkostir framleiða þyrping með sömu getu, en neðri stillingin hefur fjóra smærri hnúta og efsta stillingin hefur tvo stærri hnúta.

Hvaða valkostur er betri?

Til að svara þessari spurningu skulum við skoða kosti beggja kostanna. Við höfum dregið þær saman í töflu.

Nokkrir stórir hnútar

Margir litlir hnútar

Auðveldari klasastjórnun (ef hún er á staðnum)

Slétt sjálfvirk stærð

Ódýrara (ef á staðnum)

Verðið er lítið öðruvísi (í skýinu)

Getur keyrt auðlindafrek forrit

Full afritun

Tilföng eru notuð á skilvirkari hátt (minni kostnaður á kerfispúkum
Hærra klasabilunarþol

Vinsamlegast athugaðu að við erum aðeins að tala um hnúta starfsmanna. Að velja fjölda og stærð aðalhnúta er allt annað efni.

Svo skulum við ræða hvert atriði úr töflunni nánar.

Fyrsti valkosturinn: nokkrir stórir hnútar

Öfgafyllsti valkosturinn er einn starfshnút fyrir alla klasagetuna. Í dæminu hér að ofan væri þetta einn starfsmaður hnút með 16 CPU kjarna og 16 GB af vinnsluminni.

Kostir

Plús nr. 1. Auðveldari stjórnun
Það er auðveldara að stjórna nokkrum vélum en heilum flota. Það er fljótlegra að setja upp uppfærslur og lagfæringar og það er auðveldara að samstilla. Fjöldi bilana í algildum tölum er líka færri.

Vinsamlegast athugaðu að allt ofangreint á við um vélbúnaðinn þinn, netþjóna þína og ekki skýjatilvik.

Staðan er önnur í skýinu. Þar annast stjórnun skýjaþjónustunnar. Þannig að stjórna tíu hnútum í skýinu er ekki mikið frábrugðið því að stjórna einum hnút.

Umferðarleið og álagsdreifing milli belg í skýinu framkvæmt sjálfkrafa: umferð sem kemur frá internetinu er send til aðalálagsjafnarans, sem beinir umferð að höfn eins af hnútunum (NodePort þjónustan setur höfnina á bilinu 30000-32767 í hverjum klasahnút). Reglurnar sem settar eru af kube-proxy beina umferð frá hnútnum til belgsins. Svona lítur það út fyrir tíu belg á tveimur hnútum:

Kubernetes vinnuhnútar: margir litlir eða nokkrir stórir?
Pro #2: Minni kostnaður á hvern hnút
Öflugur bíll er dýrari en verðhækkunin er ekki endilega línuleg. Með öðrum orðum, einn tíu kjarna netþjónn með 10 GB minni er venjulega ódýrari en tíu einskjarna netþjónar með sama minni.

En athugaðu að þessi regla virkar venjulega ekki í skýjaþjónustu. Í núverandi verðlagningarkerfum allra helstu skýjaveitenda hækkar verð línulega með getu.

Þannig geturðu venjulega ekki vistað á öflugri netþjónum í skýinu.

Atvinnumaður #3: Þú getur keyrt auðlindafrek forrit
Sum forrit þurfa öfluga netþjóna í klasa. Til dæmis, ef vélnámskerfi krefst 8 GB af minni, muntu ekki geta keyrt það á 1 GB hnútum, heldur aðeins með að minnsta kosti einum stórum vinnuhnút.

Gallar

Ókostur nr. 1. Margir fræbelgir á hnút
Ef sama verkefni er framkvæmt á færri hnútum, þá mun hver þeirra náttúrulega hafa fleiri belg.

Þetta gæti verið vandamál.

Ástæðan er sú að hver eining kynnir nokkurn kostnað við gámakeyrslutímann (t.d. Docker), sem og kubelet og cAdvisor.

Til dæmis rannsakar kúbelet reglulega alla ílát á hnút til að komast af – því fleiri ílát, því meiri vinnu þarf kúbelet að vinna.

CAdvisor safnar tölfræði um auðlindanotkun fyrir alla gáma á hnút og kubelet leitar reglulega í þessar upplýsingar og gefur þær í gegnum API. Aftur, fleiri gámar þýða meiri vinnu fyrir bæði cAdvisor og kubelet.

Ef einingum fjölgar getur það hægt á kerfinu og jafnvel grafið undan áreiðanleika þess.

Kubernetes vinnuhnútar: margir litlir eða nokkrir stórir?
Í Kubernetes geymslunni sumir kvartaðiað hnútar hoppa á milli Ready/NotReady stöðuna vegna þess að reglulegar kúbelet athuganir á öllum gámum á hnút taka of langan tíma.
Af þessum sökum Kubernetes mælir með að setja ekki fleiri en 110 fræbelg á hvern hnút. Það fer eftir frammistöðu hnútsins, þú getur keyrt fleiri belg á hvern hnút, en það er erfitt að spá fyrir um hvort það verði vandamál eða allt muni virka vel. Það er þess virði að prófa verkið fyrirfram.

Ókostur nr. 2. Takmörkun á afritun
Of fáir hnútar takmarka skilvirkt umfang afritunar forrita. Til dæmis, ef þú ert með forrit sem er mjög tiltækt með fimm eftirmyndum en aðeins tveimur hnútum, þá minnkar árangursríkt afritunarstig forritsins niður í tvo.

Aðeins er hægt að dreifa fimm eftirlíkingum á tvo hnúta og ef annar þeirra mistekst mun hann taka niður margar eftirmyndir í einu.

Ef þú ert með fimm hnúta eða fleiri mun hver eftirmynd keyra á sérstökum hnút og bilun á einum hnút mun að hámarki fjarlægja eina eftirmynd.

Þannig geta miklar kröfur um framboð krafist ákveðins lágmarksfjölda hnúta í þyrpingunni.

Ókostur nr. 3. Verri afleiðingar bilunar
Með fáum hnútum hefur hver bilun alvarlegri afleiðingar. Til dæmis, ef þú ert aðeins með tvo hnúta og einn þeirra mistekst, hverfur helmingur eininganna þinna strax.

Auðvitað mun Kubernetes flytja vinnuálagið frá misheppnuðum hnút til annarra. En ef þeir eru fáir, þá gæti verið að það sé ekki nóg laust rými. Fyrir vikið verða sum forritin þín ekki tiltæk fyrr en þú kemur með misheppnaða hnútinn.

Þannig, því fleiri hnútar, því minni áhrif vélbúnaðarbilana.

Ókostur #4: Fleiri sjálfvirk stigstærð
Kubernetes er með sjálfvirkt þyrpingarkerfi fyrir skýjainnviði, sem gerir þér kleift að bæta við eða fjarlægja hnúta sjálfkrafa eftir núverandi þörfum þínum. Með stærri hnútum verður sjálfvirk skalning skyndilega og klunnalegri. Til dæmis, á tveimur hnútum, mun það að bæta við viðbótarhnút strax auka afkastagetu klasans um 50%. Og þú þarft að borga fyrir þessi úrræði, jafnvel þótt þú þurfir ekki á þeim að halda.

Þannig að ef þú ætlar að nota sjálfvirka þyrpingastærð, því minni sem hnútarnir eru, því sveigjanlegri og hagkvæmari mælikvarða færðu.

Nú skulum við skoða kosti og galla fjölda lítilla hnúta.

Annar valkostur: margir litlir hnútar

Kostir þessarar aðferðar stafa í meginatriðum af ókostum hins gagnstæða valkosts með nokkrum stórum hnútum.

Kostir

Pro #1: Minni áhrif bilunar
Því fleiri hnútar, því færri belg á hverjum hnút. Til dæmis, ef þú ert með hundrað einingar fyrir hverja tíu hnúta, þá mun hver hnút hafa að meðaltali tíu einingar.

Á þennan hátt, ef einn af hnútunum bilar, taparðu aðeins 10% af vinnuálaginu. Líkur eru á að aðeins lítill fjöldi eftirmynda verði fyrir áhrifum og heildarforritið verði áfram starfrækt.

Að auki munu hnútarnir sem eftir eru líklega hafa nægt ókeypis fjármagn til að takast á við vinnuálag hins bilaða hnút, þannig að Kubernetes getur frjálslega endurskipulagt hólfið og forritin þín munu fara aftur í virkt ástand tiltölulega fljótt.

Pro #2: Góð afritun
Ef það eru nógu margir hnútar getur Kubernetes tímaáætlunin úthlutað mismunandi hnútum á allar eftirmyndir. Á þennan hátt, ef hnút mistekst, verður aðeins ein eftirmynd fyrir áhrifum og forritið verður áfram tiltækt.

Gallar

Ókostur nr. 1. Erfitt að stjórna
Erfiðara er að stjórna miklum fjölda hnúta. Til dæmis þarf hver Kubernetes hnútur að eiga samskipti við alla hina, það er að segja að fjöldi tenginga vex fjórðungslega og það þarf að rekja allar þessar tengingar.

Hnútastýringin í Kubernetes Controller Manager fer reglulega í gegnum alla hnúta í þyrpingunni til að athuga heilsuna - því fleiri hnútar, því meira álag á stjórnandann.

Álagið á etcd gagnagrunninum eykst líka - hver kubelet og kube-proxy hringir áhorfandi fyrir etcd (í gegnum API), sem etcd ætti að senda hlutuppfærslur til.

Almennt séð leggur hver starfshnútur aukið álag á kerfishluta aðalhnúta.

Kubernetes vinnuhnútar: margir litlir eða nokkrir stórir?
Kubernetes styður opinberlega klasa með fjöldi hnúta allt að 5000. Hins vegar eru nú þegar 500 hnútar í reynd getur valdið óléttum vandamálum.

Til að stjórna miklum fjölda starfsmannahnúta ættir þú að velja öflugri aðalhnúta. Til dæmis, kube-up setur sjálfkrafa upp rétta VM stærð fyrir aðalhnútinn eftir fjölda starfsmannahnúta. Það er, því fleiri vinnuhnútar, því afkastameiri ættu aðalhnútarnir að vera.

Til að leysa þessi sérstöku vandamál eru sérstök þróun, ss Sýndar Kubelet. Þetta kerfi gerir þér kleift að komast framhjá takmörkunum og byggja klasa með miklum fjölda starfsmannahnúta.

Ókostur #2: Meiri kostnaður.
Á hverjum starfshnút keyrir Kubernetes sett af kerfispúkum - þar á meðal eru gámakeyrslur (eins og Docker), kube-proxy og kubelet, þar á meðal cAdvisor. Saman neyta þeir ákveðins fasts magns af auðlindum.

Ef þú ert með marga litla hnúta er hlutfall þessa kostnaðar á hverjum hnút stærra. Ímyndaðu þér til dæmis að allir kerfispúkar á einum hnút noti saman 0,1 CPU kjarna og 0,1 GB af minni. Ef þú ert með einn tíu kjarna hnút með 10 GB af minni, þá neyta púkar 1% af þyrpingargetu. Á hinn bóginn, á tíu einkjarna hnútum með 1 GB af minni, munu púkarnir taka 10% af þyrpingargetunni.

Þannig, því færri hnútar, því skilvirkari eru innviðirnir notaðir.

Ókostur nr. 3. Óhagkvæm nýting auðlinda
Á litlum hnútum getur verið að auðlindabitarnir sem eftir eru séu of litlir til að úthluta vinnuálagi á, þannig að þeir eru ónotaðir.

Til dæmis þarf hver fræbelgur 0,75 GB af minni. Ef þú ert með tíu hnúta, hver með 1GB af minni, geturðu keyrt tíu belg og skilur hver hnút eftir með 0,25GB af ónotuðu minni.

Þetta þýðir að 25% af öllu minni klasans er sóað.

Á stórum hnút með 10 GB minni geturðu keyrt 13 af þessum einingum - og það verður aðeins eitt ónotað brot upp á 0,25 GB.

Í þessu tilviki er aðeins 2,5% af minninu sóað.

Þannig eru auðlindir notaðar betur á stærri hnútum.

Nokkrir stórir hnútar eða margir litlir?

Svo, hvað er betra: nokkrir stórir hnútar í þyrpingu eða margir litlir? Eins og alltaf er ekkert skýrt svar. Mikið veltur á tegund umsóknar.

Til dæmis, ef forrit krefst 10 GB af minni, eru stærri hnútar augljóst val. Og ef forritið krefst tífaldrar afritunar fyrir mikið framboð er varla áhættunnar virði að setja eftirlíkingar á aðeins tvo hnúta - það verða að vera að lágmarki tíu hnútar í þyrpingunni.

Í millitilvikum skaltu velja út frá kostum og göllum hvers valkosts. Kannski eiga sum rök betur við aðstæður þínar en önnur.

Og það er alls ekki nauðsynlegt að gera alla hnúta í sömu stærð. Ekkert kemur í veg fyrir að þú gerir tilraunir fyrst með hnúta af sömu stærð og bætir síðan hnútum af annarri stærð við þá og sameinar þá í þyrping. Starfsmannahnútar í Kubernetes klasa geta verið algjörlega ólíkir. Svo þú getur reynt að sameina kosti beggja aðferða.

Það er engin ein uppskrift og hver staða hefur sín blæbrigði og aðeins framleiðslan mun sýna sannleikann.

Þýðing unnin af skýjavettvangsteyminu Mail.ru skýjalausnir.

Meira um Kubernetes: 25 Gagnleg verkfæri til að stjórna og dreifa klasa.

Heimild: www.habr.com

Bæta við athugasemd