MĂ€rkus tĂ”lke kohta.: see materjal haridusprojektist â 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.

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'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:

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:

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:

Ăks suur klaster
Selle lĂ€henemise kohaselt kasutatakse klastrit universaalse infrastruktuuri platvormina â kĂ”ik vajalik on lihtsalt olemasolevas Kubernetes klastris.
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 vĂ”i , 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, ).
+ 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 â 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 ja . 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 vt ka artiklit «» â tĂ”lkija mĂ€rkus), ja . 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 vt artiklit «» â 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 .
Kuid reaalses elus vÔivad probleemid alata palju varem - nÀiteks vaid .
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 â».
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:

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:

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:

Ă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
