Kubernetes-klastrite projekteerimine: kui palju neid peaks olema?

MĂ€rkus tĂ”lke kohta.: see materjal haridusprojektist learnk8s — vastus populaarsele kĂŒsimusele Kubernetesiga pĂ”hineva infrastruktuuri projekteerimisel. Loodame, et piisavalt pĂ”hjalikud iga variandi plusse ja miinuseid kĂ€sitlevad kirjeldused aitavad teil teha teie projekti jaoks optimaalse valiku.

Kubernetes-klastrite projekteerimine: kui palju neid peaks olema?

TL;DR: sama töökoormuse kogumit saab kÀivitada mitmetes suurtes klastrites (iga kluster vÔtab enda alla suure hulga töökoormusi) vÔi paljusid vÀikseid (iga klester sisaldab vÀhe töökoormust).

Allpool on tabel, milles hinnatakse iga lÀhenemise plusse ja miinuseid:

Kubernetes-klastrite projekteerimine: kui palju neid peaks olema?

Kubernetes'e kasutamisel rakenduste haldamise platvormina tekivad sageli mĂ”ned pĂ”hikĂŒsimused klastrite seadistamise nĂŒansside kohta:

  • Kui palju klastreid kasutada?
  • Kui suured need peaksid olema?
  • Mida peaks iga kluster sisaldama?

Selles artiklis proovin vastata kĂ”ikidele nendele kĂŒsimustele, analĂŒĂŒsides iga lĂ€henemise plusse ja miinuseid.

KĂŒsimuse pĂŒstitamine

Tarkvara looja, arvatavasti arendate ja hallate mitmeid rakendusi samal ajal.

Lisaks kĂ€ivitatakse tĂ”enĂ€oliselt nende rakenduste mitmed eksemplarid erinevates keskkondades — nĂ€iteks vĂ”ivad need olla dev, test ja prod.

Tulemusena tekib terve rakenduste ja keskkondade maatriks:

Kubernetes-klastrite projekteerimine: kui palju neid peaks olema?
Rakendused ja keskkonnad

Ülaltoodud nĂ€ites on esitatud 3 rakendust ja 3 keskkonda, mis kokku annab 9 vĂ”imalikku varianti.

Iga rakenduse eksemplar on iseseisev deployment-ĂŒksus, millega saab töötada sĂ”ltumatult teistest.

Pange tÀhele, et rakenduse eksemplar vÔib koosneda paljusid komponendid, nagu frontend, backend, andmebaas jne. Mikroteenuse rakenduse puhul sisaldab eksemplar kÔiki mikroteenuseid.

Tulemuseks tekivad Kubernetes'e kasutajatel mitmed kĂŒsimused:

  • Kas kĂ”iki rakenduse eksemplare peaks olema ĂŒhes klastris?
  • Kas peaks töötama eraldi kluster iga rakenduse eksemplari jaoks?
  • VĂ”i vĂ”ib-olla tuleks kasutada ĂŒlaltoodud lĂ€henemiste kombinatsiooni?

KĂ”ik need variandid on tĂ€iesti elujĂ”ulised, kuna Kubernetes on paindlik sĂŒsteem, mis ei piira kasutaja vĂ”imalusi.

Siin on mÔned vÔimalikud teed:

  • ĂŒks suur ĂŒhine klaster;
  • palju vĂ€ikeseid kitsalt spetsialiseeritud klastri;
  • ĂŒks klaster iga rakenduse jaoks;
  • ĂŒks klaster iga keskkonna jaoks.

Nagu allpool nÀidatud, on kaks esimest lÀhenemist skaala variantide vastupidistes otsades:

Kubernetes-klastrite projekteerimine: kui palju neid peaks olema?
Mitmest suurest klastrist (vasakul) kuni paljude vÀikesteni (paremal)

Üldiselt peetakse ĂŒht klastrit "suuremaks" kui teist, kui sellel on rohkem sĂ”lmedes ja pod'id. NĂ€iteks on klaster, millel on 10 sĂ”lme ja 100 pod'i, suurem klastrist, millel on 1 sĂ”lm ja 10 pod'i.

Nojah, alustagem!

1. Üks suur ĂŒhine klaster

Esimene valik on paigutada kĂ”ik töökoormused ĂŒhte klastrisse:

Kubernetes-klastrite projekteerimine: kui palju neid peaks olema?
Üks suur klaster

Selle lĂ€henemise kohaselt kasutatakse klastrit universaalse infrastruktuuri platvormina — kĂ”ik vajalik on lihtsalt olemasolevas Kubernetes klastris.

Namespace'id Kubernetes vĂ”imaldab loogiliselt eraldada klastriosa ĂŒksteisest, nii et iga rakenduse eksemplari jaoks saab kasutada oma ruumi.

Vaadakem selle lÀhenemise plusse ja miinuseid.

+ TÔhus ressursside kasutamine

Ainus klaster nĂ”uab vaid ĂŒhte koopiat kĂ”igist ressurssidest, mis on vajalikud Kubernetes klastrite kĂ€itamiseks ja haldamiseks.

NĂ€iteks kehtib see master-sĂ”lmede kohta. Tavaliselt on igal Kubernetes klastril 3 master-sĂ”lme, nii et ĂŒhes ainsas klastris jÀÀb nende arv selleks (vĂ”rdluseks, 10 klastrisse vajatakse 30 master-sĂ”lme).

Ülaltoodud nĂŒanss kehtib ka teiste teenuste suhtes, mis toimivad kogu klastris, nagu koormuse tasakaalustajad, Ingress'i kontrollerid, autentimissĂŒsteemid, logimise ja jĂ€lgimise sĂŒsteemid.

Ühes klastris saab kasutada kĂ”iki neid teenuseid kĂ”igi töökoormuste jaoks (ei ole vaja luua nende koopiaid, nagu mitme klastriga).

+ Odavus

Nagu eelnevalt mainitud, on vÀiksem arv klastreid tavaliselt odavam, kuna puuduvad kulud liigsetele ressurssidele.

See kehtib eriti master-sÔlmede kohta, mis vÔivad maksma minna, olenemata paigutusviisist (on-premises vÔi pilves).

MĂ”ned hallatud Kubernetes teenused, nagu Google Kubernetes Engine (GKE) vĂ”i Azure Kubernetes Service (AKS), pakuvad tasuta haldustasandi. Sel juhul on kulude kĂŒsimus vĂ€hem terav.

Samuti on olemas hallatud teenused, mis kĂŒsivad fikseeritud tasu iga Kubernetesi klastrite töö eest (nĂ€iteks, Amazon Elastic Kubernetes Service, EKS).

+ TÔhus haldamine

Ühe klasteri haldamine on lihtsam kui mitme.

Haldamine vĂ”ib hĂ”lmata jĂ€rgmisi ĂŒlesandeid:

  • Kubernetes'i versiooni uuendamine;
  • CI/CD kanali seadistamine;
  • CNI pistikprogrammi installimine;
  • Kasutajate autentimissĂŒsteemi seadistamine;
  • Juhtimise kontrolleri installimine;

ja palju teisi


Ühe klasteri korral tuleb sellega tegeleda ainult ĂŒks kord.

Mitmete klastrite puhul tuleb operatsioone korduvalt lĂ€bi viia, mis vĂ”ib vajada mingit automatiseerimist ja tööriistu, et tagada protsessi sĂŒsteemsus ja ĂŒhtsus.

NĂŒĂŒd on mĂ”ned sĂ”nad miinustest.

− Üksik ebaĂ”nnestumise punt

Kui ainus klaster ebaÔnnestub, lÔpetavad koheselt kÔik töötavad koormused töö!

On palju olukordi, kus midagi vÔib valesti minna:

  • Kubernetes'i uuendamine toob ootamatuid kĂ”rvalmĂ”jusid;
  • ĂŒldklastri komponent (nt CNI pistikprogramm) hakkab toimima mitte ootuspĂ€raselt;
  • ĂŒks klastrikomponent on vale seadistusega;
  • rikke alumises infrastruktuuris.

Üks selline juhtum vĂ”ib pĂ”hjustada tĂ”sist kahju kĂ”igile töötavatele koormustele, mis asuvad ĂŒldklastri sees.

− Rangete isolatsiooni puudumine

Töötamine ĂŒldklastri sees tĂ€hendab, et rakendused jagavad sama riistvara, vĂ”rgu vĂ”imekuse ja operatsioonisĂŒsteemi klastris asuvatel sĂ”lmedel.

Teatud mĂ”ttes on kaks konteinerit, millel töötab kaks erinevat rakendust ĂŒhe ja sama sĂ”lme peal, sarnased kahele protsessile, mis töötavad ĂŒhe masina alla ĂŒhe ja sama OS tuuma all.

Linuxi konteinerid pakuvad mingit vormi isolatsiooni, kuid see ei ole nii tugev nagu virtuaalmasinate pakutud. Sisuliselt on konteineris töötav protsess sama, mis töötasu host-operatsioonisĂŒsteemi alla.

See vĂ”ib olla probleemiks turvalisuse seisukohalt: selline ĂŒlesehitus vĂ”imaldab teoreetiliselt erinevatel rakendustel ĂŒksteisega suhelda (kas tahtlikult vĂ”i juhuslikult).

Lisaks kasutavad kĂ”ik Kubernetes klusteris olevad töökohustused ĂŒhiselt mĂ”ningaid klusteri teenuseid, nagu DNS — see vĂ”imaldab rakendustel leida teiste rakenduste teenuseid klusteris.

KÔik eeltoodud punktid vÔivad omada erinevat tÀhendust sÔltuvalt rakenduste turvanÔuetest.

Kubernetes pakub erinevaid tööriistu turvaprobleemide vÀltimiseks, nagu PodSecurityPolicies ja NetworkPolicies. Kuid nende korrektseks seadistamiseks on vajalik teatav kogemus, lisaks ei suuda need suletud kÔik turvavigu.

Oluline on alati meeles pidada, et Kubernetes loomulikult on loodud koostööks, mitte isoleerimiseks ja turvalisuseks.

− Puudub range multi-tenancy

Arvestades Kubernetes klustrite rohkust, on olemas palju viise, kuidas erinevad rakendused vĂ”ivad ĂŒksteisele 'jalgu astuda'.

NĂ€iteks vĂ”ib rakendus monopoliseerida mingi ĂŒhise ressursi (nt CPU vĂ”i mĂ€lu) ja jĂ€tta teised samal sĂ”lmel töötavad rakendused sellelt pÀÀsemata.

Kubernetes tagab erinevaid mehhanisme sellise kĂ€itumise kontrollimiseks, nagu ressursside pĂ€ringud ja piirangud vt ka artiklit « CPU-limiidid ja agressiivne throttling Kubernetes'is » — tĂ”lkija mĂ€rkus), ResourceQuotas ja LimitRanges. Kuid nagu turvalisuse korral, on nende seadistamine ĂŒsna keeruline ja nad ei suuda vĂ€ltida kĂ”iki ettenĂ€gematuid kĂ”rvalmĂ”jusid.

− Suur hulk kasutajaid

Üksiku klustri puhul tuleb sellele anda juurdepÀÀs paljudele inimestele. Mida rohkem inimesi, seda suurem on oht, et nad midagi "katkestavad".

Klastri sees saab kontrollida, kes ja mida teha saab rollipĂ”hise ligipÀÀsu haldusingi (RBAC) kaudu vt artiklit « Kasutajad ja RBAC autoriseerimine Kuberneteses » — tĂ”lkija mĂ€rkus). Siiski ei takista see kasutajaid "midagi katki tegema" oma vastutusalas.

− Klastrid ei saa lĂ”pmatult kasvada

Klastri, mida kasutatakse kÔikide töökohustuste jaoks, on tÔenÀoliselt vÀga suur (sÔlmede ja pod'ide arvu poolest).

Kuid sellega tekib teine probleem: Kubernetes'e klastrid ei saa lÔpmatult kasvada.

Klastri suurusele on teoreetiline piir. Kuberneteses on see umbes 5000 sÔlme, 150 000 pod'i ja 300 000 konteinerit.

Kuid reaalses elus vÔivad probleemid alata palju varem - nÀiteks vaid 500 sÔlmel.

Asi on selles, et suured klastrid koormavad Kubernetes'e juhtimistaset. TeisisÔnu, et hoida klastrit töökorras ja ressursse tÔhusalt kasutada, on vajalik hoolikas hÀÀlestamine.

Seda probleemi kĂ€sitletakse vastavas artiklis originaalblogis pealkirjaga „Kubernetes klastrite arhitektuur — töötlussĂ”lme suuruse valimine».

Kuid vaatame vastupidist lÀhenemist: palju vÀikeseid klastreid.

2. Palju vÀikeseid, spetsialiseeritud klastreid

Selle lÀhenemise korral kasutate iga juurutatava elemendi jaoks eraldi klastrit:

Kubernetes-klastrite projekteerimine: kui palju neid peaks olema?
Palju vÀikeseid klastreid

Selle artikli kontekstis mĂ”istetakse juurutatavana rakenduse eksemplari - nĂ€iteks ĂŒhe rakenduse dev-versiooni.

Selles strateegias kasutatakse Kubernetes't kui spetsialiseeritud tÀitmisvÔimet erinevate rakenduse eksemplaride jaoks.

Vaadakem selle lÀhenemise plusse ja miinuseid.

+ Piiratud „plahvatuse raadius“

Klastri „purunemise“ korral piirduvad negatiivsed tagajĂ€rjed vaid nende töökoormustega, mis olid juurutatud selles klastri. KĂ”ik teised töökoormused jÀÀvad puutumatuks.

+ Isolatsioon

Iseseisvates klastrites paigutatud töökoormustel puuduvad ĂŒhised ressursid, nagu protsessor, mĂ€lu, operatsioonisĂŒsteem, vĂ”rk vĂ”i muud teenused.

Tulemuseks on range isolatsioon omavahel seotud rakenduste vahel, mis vÔib positiivselt mÔjutada nende turvalisust.

+ VĂ€ike kasutajate arv

Kuna igas klastris on vaid piiratud arv töökoormusi, vÀheneb sellele pÀÀsupunktide arv.

Mida vĂ€hem inimesi pÀÀseb klastrisse, seda madalam on risk, et midagi „katkeb”.

Vaatame puudusi.

− TĂ”hususe puudumine ressursside kasutuses

Nagu varem mainitud, vajab iga Kubernetes'e klaster teatud hulga juhtimisresources'e: master-sÔlmed, juhtimistaseme komponendid, jÀlgimise ja logimise lahendused.

Paljude vÀikeste klastrite korral tuleb juhtimisele suunata suurem osa ressursse.

− Kulukus

Ebaefektiivne ressursside kasutamine toob automaatselt kaasa kÔrged kulud.

NÀiteks 30 master-sÔlme sisu asemel kolme sama arvutustehnika puhul kajastub see kindlasti kuludes.

− Halduse keerukus

Kubeclustere haldamine on oluliselt keerulisem kui ĂŒhega töötamine.

NĂ€iteks tuleb iga klastrile seadistada autentimine ja autoriseerimine. Kubernetesi versiooniuuendust tuleb samuti teha mitu korda.

TĂ”enĂ€oliselt tuleb rakendada automatiseerimist, et saavutada nende ĂŒlesannete tĂ”husus.

NĂŒĂŒd vaatame vĂ€hem ÀÀrmuslikke stsenaariume.

3. Üks klaster igale rakendusele

Selle lÀhenemise kohaselt loote iga konkreetse rakenduse kÔikide instantside jaoks eraldi klastrite:

Kubernetes-klastrite projekteerimine: kui palju neid peaks olema?
Klaster rakendusele

Seda teed vĂ”ib pidada „eraldiseisva klastri igale meeskonnale”, kuna tavaliselt tegeleb inseneride meeskond ĂŒhe vĂ”i mitme rakenduse arendamisega.

Vaadakem selle lÀhenemise plusse ja miinuseid.

+ Klaster saab rakendusele kohandada

Kui rakendusel on erilisi vajadusi, saab need klastris ellu viia, mÔjutamata teisi klastreid.

Need vajadused vÔivad hÔlmata GPU-d töötavaid töötajaid, teatud CNI pluginaid, teenuse sissihaardumist vÔi mÔnd muud teenust.

Iga klaster saab kohandada nii, et see sisaldab ainult seda, mis on vajalik töötavas rakenduses.

− Erinevad keskkonnad ĂŒhes klastris

Selle lĂ€henemise puuduseks on see, et erinevate keskkondade rakenduste instantsid elavad ĂŒhes klastris koos.

NÀiteks prod-versioon rakendusest töötab samas klastris kui dev-versioon. See tÀhendab ka seda, et arendajad töötavad samas klastris, kus toimib rakenduse tootmisversioon.

Kui arendajate tegevuse vĂ”i dev-versiooni vead pĂ”hjustavad klastris tĂ”rke, vĂ”ivad potentsiaalselt kannatada ka prod-versioon — see on tohutu puudus sellise lĂ€henemise puhul.

Ja lÔpuks, meie nimekirjas viimane stsenaarium.

4. Üks klaster igale keskkonnale

See stsenaarium eeldab igale keskkonnale eraldi klastri eraldamist:

Kubernetes-klastrite projekteerimine: kui palju neid peaks olema?
Üks klaster keskkonna jaoks

NÀiteks vÔivad teil olla klastrid dev, test ja prod, kus kÀitate kÔiki rakenduse instantside, mis on mÔeldud teatud keskkonna jaoks.

Siin on sellise lÀhenemise plussid ja miinused.

+ Prod keskkonna isolatsioon

Selle lÀhenemise raames on kÔik keskkonnad teineteisest isoleeritud. Praktiliselt on see eriti oluline prod-keskkonna jaoks.

Rakenduse tootmisversioon ei sĂ”ltu nĂŒĂŒd teiste klastrite ja keskkondade tegevusest.

Seega, kui dev-klastris tekib ĂŒllatuslik probleem, jĂ€tkavad tootmisversioonid tööd nagu poleks midagi juhtunud.

+ Klastri saab kohandada keskkonna jÀrgi

Iga klastrit saab kohandada selle keskkonna jÀrgi. NÀiteks saab:

  • paigaldada dev-klastrisse arendus- ja tĂ”rkeotsingu tööriistad;
  • paigaldada testimisraamistikke ja tööriistu klastrisse test;
  • kasutada vĂ”imsamat riistvara ja vĂ”rguĂŒhendusi klastris prod.

See suurendab nii arenduse kui ka rakenduste kasutamise efektiivsust.

+ JuurdepÀÀsu piiramine tootmis-klastrile

Vajadus töötada otse prod-klastriga tekib harva, seetÔttu saab oluliselt piirata isikute ringi, kellel on sellele juurdepÀÀs.

Saame minna veelgi kaugemale ja vÔtta inimestelt tÀielikult juurdepÀÀs sellele klastrile, ning kÔik juurutamised teha automatiseeritud CI/CD tööriista abil. Selline lÀhenemine vÀhendab oluliselt inimlike vigade riski seal, kus see on kÔige kriitilisem.

NĂŒĂŒd on mĂ”ned sĂ”nad miinustest.

− Erinevuste puudumine rakenduste vahel

Peamine puudus on rakenduste vahelise riist- ja ressursi eraldatuse puudumine.

Sidumata rakendused kasutavad koos klastrite ressursse: sĂŒsteemi kerneli, protsessorit, mĂ€lu ja mĂ”ned muud teenused.

Nagu juba mainitud, vÔib see potentsiaalselt olla ohtlik.

− Rakenduste sĂ”ltuvuste lokaliseerimise vĂ”imatus

Kui rakendusel on erilised nÔuded, tuleb neid rahuldada kÔigis klastrites.

NĂ€iteks, kui rakendus vajab GPU-d, peab igas klastris olema vĂ€hemalt ĂŒks töötleja GPU-ga (isegi kui seda kasutatakse ainult selle rakenduse poolt).

Tulemuseks on kÔrgemad kulud ja ebaefektiivne ressursside kasutamine.

KokkuvÔte

Teatud rakenduste komplekti korral saab neid paigutada mitmesse suuresse klastrisse vÔi paljusid pisikesi.

Artiklis kĂ€sitletakse erinevate lĂ€henemisviiside plusse ja miinuseid, alates ĂŒhest globaalsest klastrist kuni mitme vĂ€ikese ja kitsalt spetsialiseeritud klastrini:

  • ĂŒks suur ĂŒhine klaster;
  • palju vĂ€ikeseid kitsalt spetsialiseeritud klastri;
  • ĂŒks klaster iga rakenduse jaoks;
  • ĂŒks klaster iga keskkonna jaoks.

Nii et, millist lÀhenemist valida?

Kuidas tavaliselt, sÔltub vastus kasutusstsenaariumist: peate kaaluma erinevate lÀhenemisviiside plusse ja miinuseid ning valima optimaalse variandi.

Kuid valik ei piirdu ainult eelpooltoodud nÀidetega - vÔite kasutada mis tahes nende kombinatsiooni!

NÀiteks, vÔite korraldada paar klastrit iga tiimi jaoks: klaster arendamiseks (kus on keskkonnad dev ja test) ja klaster production (kus asub tootmis keskkond).

Tuginedes sellele artiklile, suudate vastavalt optimeerida plussid ja miinused konkreetse stsenaariumi jaoks. Edu!

P.S.

Lugege ka meie blogist:

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster