MĂ€rk. tĂ”lge.: see this material from the educational project â the answer to a popular question when designing infrastructure based on Kubernetes. We hope that the sufficiently detailed descriptions of the pros and cons of each option will help you make the best choice for your project.

TL;DR: the same set of workloads can be run on several large clusters (with a large number of workloads per cluster) or on many smaller ones (with a small number of workloads in each cluster).
Below is a table evaluating the pros and cons of each approach:

When using Kubernetes as a platform for application operations, several fundamental questions about cluster configuration often arise:
- How many clusters to use?
- How large should they be?
- What should each cluster include?
In this article, I will try to answer all these questions by analyzing the pros and cons of each approach.
The question posed
As a software creator, you are likely developing and operating multiple applications simultaneously.
Lisaks sellele töötab kindlasti palju nende rakenduste koopiaid erinevates keskkondades â nĂ€iteks vĂ”ivad need olla dev, test ja prod.
Tulemusena saame terviku rakenduste ja keskkondade maatriksi:

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 komponente, nagu frontend, backend, andmebaas jne. Mikroteenuste rakenduse korral sisaldab eksemplar kÔiki mikroteenuseid.
SeetĂ”ttu tĂ”statavad Kubernetes'e kasutajad mitmeid kĂŒsimusi:
- Kas tuleks kĂ”ik rakenduse eksemplarid paigutada ĂŒhte klastrisse?
- Kas tuleks iga rakenduse eksemplari jaoks luua eraldi klaster?
- VÔi vÔib-olla tuleks kasutada kombinatsiooni eespool mainitud lÀhenemistest?
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Ôimalused:
- ĂŒks suur ĂŒhine klastri;
- mitu vÀikest kitsalt spetsialiseerunud klastrit;
- ĂŒks klaster iga rakenduse jaoks;
- ĂŒks klaster iga keskkonna jaoks.
Nagu allpool nÀidatud, on kaks esimest lÀhenemist skaalal vastassuunal:

MÔnest suurest klastrist (vasakul) kuni paljude vÀikesteni (paremal)
Ăldiselt loetakse, et ĂŒks klaster on "suurem" kui teine, kui tal on rohkem sĂ”lmi ja pod'e. NĂ€iteks kluster, kus on 10 sĂ”lme ja 100 pod'i, on suurem kui kluster, kus on 1 sĂ”lm ja 10 pod'i.
Nojah, alustame!
1. Ăks suur ĂŒhine klaster
Esimene variant on paigutada kĂ”ik töökoormused ĂŒhte klastrisse:

Ăks suur klaster
Selle lĂ€henemise raames kasutatakse klastrit universaalse infrastruktuuri platvormina â kĂ”ik, mis vajalik, on lihtsalt olemasolevas Kubernetes klastris paigutatud.
Kubernetes vĂ”imaldab klastris osi ĂŒksteisest loogiliselt eraldada, mistĂ”ttu iga rakenduse eksemplarile saab kasutada oma nimeala.
Vaatame selle lÀhenemise plusse ja miinuseid.
+ TÔhus resursside kasutamine
Ainult ĂŒhe klastriga on vajalik ainult ĂŒks koopia kĂ”ikidest ressurssidest, mis on vajalikud Kubernetesi klastri kĂ€ivitamiseks ja haldamiseks.
NĂ€iteks kehtib see master-sĂ”lmede kohta. Ăhe Kubernetesi klastri kohta on tavaliselt 3 master-sĂ”lme, seega jÀÀb nende arv ĂŒhele klastrile samaks (vĂ”rdluseks, 10 klastrile on vaja 30 master-sĂ”lme).
Ălaltoodud nĂŒanss kehtib ka teiste teenuste kohta, mis toimivad klastris laiemalt, nagu koormuse tasakaalustajad, Ingressi kontrollerid, autentimise, logimise ja jĂ€lgimise sĂŒsteemid.
Ăhes klastri kĂ”ik neid teenuseid saab kasutada kohe kĂ”igi töökoormuste jaoks (pole vaja luua nende koopiaid, nagu mitme klastriga).
+ Odavus
SeetĂ”ttu maksab vĂ€iksem arv klastreid tavaliselt vĂ€hem, kuna puuduvad kulutused ĂŒleliigsetele ressurssidele.
See kehtib eriti master-sÔlmede kohta, millel vÔivad olla mÀrkimisvÀÀrsed kulud, sÔltumata majutamisviisist (kas kohapeal vÔi pilves).
MĂ”ned hallatud Kubernetes teenused, nagu vĂ”i , pakuvad tasuta haldustaseme. Sellisel juhul on kulukĂŒsimus vĂ€hem terav.
Samuti on olemas hallatud teenused, mis kĂŒsivad fikseeritud tasu iga Kubernetes'i klastrite töö eest (nĂ€iteks, ).
+ TÔhus haldus
Ăht klastrit on lihtsam hallata kui mitut.
Haldus vĂ”ib hĂ”lmata jĂ€rgmisi ĂŒlesandeid:
- Kubernetes'e versiooni vÀrskendamine;
- CI/CD torujuhtme seadistamine;
- CNI pistiku installimine;
- Kasutaja autentimissĂŒsteemi seadistamine;
- Luba kontrolleri installimine;
ja palju muudâŠ
Ăhe klastriga on vaja seda kĂ”ike teha ainult ĂŒks kord.
Mitme klastri puhul tuleb operatsioone korduvalt korrata, mis tĂ”enĂ€oliselt vajab protsesside ja tööriistade automatiseerimist, et tagada jĂ€rjepidevus ja ĂŒhtsus.
Ja nĂŒĂŒd paar sĂ”na puudustest.
â Ăksik rikkepunkt
Ăksiku klastri rikke korral lakka vahetult töötama kĂ”ik koormused!
On tohutult vÔimalusi, kus midagi vÔiks valesti minna:
- Kubernetes'e vÀrskendamine toob ootamatud kÔrvaltoimed;
- ĂŒldklastrikomponent (nĂ€iteks CNI pistikprogramm) kĂ€ivitub ootamatult;
- ĂŒks grupi komponentidest on valesti seadistatud;
- aluseks oleva infrastruktuuri rike.
Ăks selline juhtum vĂ”ib tĂ”siselt kahjustada kĂ”iki töökoormusi, mis on paigutatud ĂŒldklastrisse.
â Rangete isoleerimise puudumine
Töötamine ĂŒldklastris tĂ€hendab, et rakendused jagavad riistvara, vĂ”rguvĂ”imalusi ja operatsioonisĂŒsteemi klastrisĂ”lmede vahel.
MĂ”nes mĂ”ttes on kaks konteinerit, kus töötab kaks erinevat rakendust samas sĂ”lmes, sarnased kahele protsessile, mis töötavad ĂŒhel ja samal masinal sama operatsioonisĂŒsteemi tuuma all.
Linuxi konteinerid pakuvad mingit vormi isoleerimisest, kuid see ei ole sugugi nii tugev, kui nĂ€iteks virtuaalmasinate korral. PĂ”himĂ”tteliselt on konteineris olev protsess sama protsess, mis kĂ€ivitatakse hostoperatsioonisĂŒsteemis.
See vĂ”ib olla turvalisuse seisukohalt probleem: selline korraldus vĂ”imaldab teoreetiliselt omavahel seotud rakendustel ĂŒksteisega suhelda (kas teadlikult vĂ”i kogemata).
Lisaks kasutavad kĂ”ik Kubernetes klastri töökoormused ĂŒhiselt mĂ”ningaid klastriteenuseid, nagu â see vĂ”imaldab rakendustel leida teiste rakenduste teenuseid klastris.
KĂ”igil ĂŒlaltoodud punktidel vĂ”ib olla erinev tĂ€hendus sĂ”ltuvalt rakenduste turvanĂ”uetest.
Kubernetes pakub erinevaid tööriistu turvaprobleemide vÀltimiseks, nagu ja . Kuid nende Ôige seadistamine nÔuab teatud kogemust, pealegi ei ole nad vÔimelised sulgema absoluutselt kÔiki turvaauke.
Oluline on alati meeles pidada, et Kubernetes on algselt loodud koostööks, mitte isolatsiooni ja turvalisuse.
â JĂ”hkralt puudub multi-tenancy.
Arvestades Kubernetes klastri hulka ĂŒhiseid ressursse, on palju viise, kuidas erinevad rakendused vĂ”ivad ĂŒksteisele âpeale astudaâ.
NĂ€iteks vĂ”ib rakendus monopoliseerida mĂ”ne ĂŒhise ressursi (nagu protsessor vĂ”i mĂ€lu) ja jĂ€tta teised rakendused, mis töötavad samas sĂ”lmes, sellest ilma.
Kubernetes tagab erinevad mehhanismid sellise kĂ€itumise kontrollimiseks, nagu vt ka artiklit «» â tĂ”lk. mĂ€rkus), ja . Siiski, nagu ka turvalisuse puhul, on nende seadistamine piisavalt keeruline ja need ei suuda vĂ€ltida kĂ”iki ettenĂ€gematuid kĂ”rvalmĂ”jusid.
â Suur hulk kasutajaid
Ăhe klastriga peab juurdepÀÀsu avama paljudele inimestele. Ja mida rohkem neid on, seda suurem on risk, et nad midagi "katkestavad".
Klastri sees saab hallata, kes ja mida teha saab, kasutades vt artiklit «» â tĂ”lk. mĂ€rkus). Siiski ei takista see kasutajaid "katkestamast" midagi oma vastutusala piires.
â Klastrid ei saa kasvama kuni lĂ”pmatuseni
Klastrid, mida kasutatakse kĂ”igi töökoormuste jaoks, on tĂ”enĂ€oliselt ĂŒsna suured (node'ide ja pod'ide arvult).
Kuid siin tekib teine probleem: Kuberneteses ei saa klastrid kasvada lÔpmatuseni.
Klastri suuruse teoreetiline piir on olemas. Kuberneteses on see ligikaudu .
Kuid tegelikus elus vĂ”ivad probleemid alata palju varem â nĂ€iteks juba 500 node'iga. .
Seda probleemi uuritakse vastavas artiklis algses pÀevas, pealkirjaga «
Architecting Kubernetes clusters â choosing a worker node size».
2. Palju vÀikeseid, spetsialiseeritud klastreid.
Selle lÀhenemise korral kasutate iga paigaldatava elemendi jaoks eraldi klastrit:
Palju vÀikeseid klustreid.

KÀesoleva artikli eesmÀrkidel peame
paigaldatavaks elemendiks juurutatud element rakendusinstance mÔistetakse - nÀiteks, arenduse versioon eraldiseisvast rakendusest.
Selles strateegias kasutatakse Kubernetes't kui spetsialiseeritud kÀituskeskkonda erakordsete rakenduste jaoks.
Vaatame selle lÀhenemise plusse ja miinuseid.
+ Piiratud "plahvatuse ring"
Klaster "purunemise" korral piirdub negatiivne mÔju vaid nende töökoormustega, mis olid selles klastris juurutatud. KÔik teised töökoormused jÀÀvad puutumatuks.
+ Isolatsioon
Eraldatud klastrites paigutatud töökoormustel ei ole ĂŒhiseid ressursse, nagu protsessor, mĂ€lu, opsĂŒsteem, vĂ”rk vĂ”i muud teenused.
Tulemuseks on range isolatsioon omavahel seotud rakenduste vahel, mis vÔib soodsalt mÔjutada nende turvalisust.
+ VĂ€ike kasutajate arv
Kuna igas klastris on vaid piiratud arv töökoormusi, vÀheneb sellele juurdepÀÀsu saavate kasutajate arv.
Mida vÀhem inimesi pÀÀseb klastrile ligi, seda madalam on risk, et midagi "katki lÀheb".
Vaatame miinuseid.
â Ressursside ebaefektiivne kasutamine
Nagu varem mainitud, vajab iga Kubernetes'i klaster teatud haldusressursse: master-sÔlmed, kontrollitasandi komponendid, jÀlgimis- ja logimislahendused.
Kui on palju vÀikse vÀikseid klastreid, tuleb rohkem ressursse eraldada halduseks.
â Kulukus
EbatÔhus ressursikasutus toob automaatselt kaasa kÔrged kulud.
NÀiteks 30 master-sÔlme hoidmine kolme asemel sama arvutusvÔimsuse juures mÔjutab kindlasti kulusid.
â Halduse keerukus
Paljude Kubernetes'i klastrite haldamine on palju keerulisem kui ĂŒhega töötamine.
NĂ€iteks tuleb iga klastrite jaoks seadistada autentimine ja autoriseerimine. Kubernetes'i versiooniuuendust tuleb samuti teha mitu korda.
TĂ”enĂ€oliselt tuleb rakendada automatiseerimist, et suurendada nende ĂŒlesannete tĂ”husust.
NĂŒĂŒd vaatame vĂ€hem ÀÀrmuslikke stsenaariume.
3. Ăks klaster iga rakenduse jaoks
Selle lÀhenemise raames loote eraldi klastri kÔigi konkreetse rakenduse eksemplaride jaoks:

Rakenduse klaster
Seda teed vĂ”ib pidada pĂ”himĂ”tte «erinev klaster meeskonna jaoks» ĂŒldistamiseks, kuna tavaliselt tegeleb inseneride meeskond ĂŒhe vĂ”i mitme rakenduse arendamisega.
Vaatame selle lÀhenemise plusse ja miinuseid.
+ Klastrit saab rakendusele kohandada
Kui rakendusel on erilised vajadused, saab neid klastri sees ellu viia, mÔjutamata teisi klastreid.
Sellised vajadused vĂ”ivad hĂ”lmata GPU-dega workerâite, teatud CNI pluginate, teenuse vĂ”rgu vĂ”i mĂ”ne muu teenuse kasutamist.
Iga klaster saab kohandada töötavale rakendusele, et see sisaldaks ainult vajalikke elemente.
â Erinevad keskkonnad ĂŒhes klastris
Selle lĂ€henemise miinuseks on see, et erinevate keskkondade rakenduse eksemplarid eksisteerivad ĂŒhes klastris.
NÀiteks töötab rakenduse prod-version samas klastris nagu dev-version. See tÀhendab ka, et arendajad tegutsevad samas klastris, kus toodang on rakenduse versioon.
Kui arendajate tegevuse vĂ”i dev-versiooni vead pĂ”hjustavad klastris rikke, vĂ”ib potentsiaalselt kannatada ka prod-version â selle lĂ€henemise suur puudus.
Ja lÔpuks, viimane stsenaarium meie nimekirjas.
4. Ăks klaster igas keskkonnas
See stsenaarium nÀeb ette igas keskkonnas eraldi klastri eraldamist:

Ăks klaster iga keskkonna jaoks
NÀiteks vÔivad teil olla klastrid, dev, test ja prod, kus kÀitate kÔiki rakenduse eksemplare, mis on mÔeldud kindlale keskkonnale.
Siin on selle lÀhenemise plussid ja miinused.
+ Produktiivsete keskkondade isoleerimine
Selle lÀhenemise raames on kÔik keskkonnad teineteisest isoleeritud. Kuid praktikas on see eriti oluline tootmiskeskkonna jaoks.
Rakenduse tootmisversioonid ei sÔltu enam muudest klastritest ja keskkondadest.
Nii et kui dev-klastris tekib Àkki probleem, jÀtkavad tootmisversioonid töötamist nagu midagi ei juhtunud.
+ Klastrit saab kohandada keskkonna jÀrgi
Iga klastrit saab kohandada oma keskkonna jaoks. NÀiteks vÔib:
- paigaldada dev-klastrisse arendamise ja tÔrkeotsingu tööriistad;
- paigaldada testimisraamistikke ja tööriistu klastrisse test;
- kasutada klastris vĂ”imsamat riistvara ja vĂ”rguĂŒhendusi. prod.
See aitab suurendada nii arenduse kui ka rakenduste haldamise tÔhusust.
+ Juhtimise piiramine production-klastrisse
Otsene töötamine prod-klastriga on haruldane, seega on vÔimalik oluliselt piirata neid, kellel on sellele juurdepÀÀs.
Saame minna veelgi kaugemale ja tÀiesti keelata inimeste juurdepÀÀsu sellele klastrile, tehes kÔik juurutamised automatiseeritud CI/CD tööriista abil. Selline lÀhenemine vÀhendab inimlike vigade riski just seal, kus see on kÔige olulisem.
Ja nĂŒĂŒd paar sĂ”na puudustest.
â Aparaadi ja ressursside isolatsiooni puudumine rakenduste vahel
Peamine puudus on see, et rakenduste vahel puudub riistvara ja ressursside isolatsioon.
Ăksikud rakendused kasutavad koos klastrite ressursside sĂŒsteemi, protsessorit, mĂ€lu ja mĂ”ningaid teisi teenuseid.
Nagu juba mainitud, vÔib see osutuda potentsiaalselt ohtlikuks.
â Rakenduste sĂ”ltuvuste lokaliseerimise vĂ”imatus
Kui rakendusel on erilised nÔudmised, tuleb neid tÀita kÔigis klastrites.
NĂ€iteks, kui rakendus vajab GPU-d, peab iga klaster sisaldama vĂ€hemalt ĂŒhte GPU-ga töötlusĂŒksust (isegi kui seda kasutatakse ainult selle rakenduse poolt).
Tulemuseks on suuremad kulud ja ebaefektiivne ressursside kasutamine.
KokkuvÔte
Kuna on olemas teatud rakenduste komplekt, saab need paigutada paarisse suurtesse klastritesse vÔi paljudesse vÀikestesse.
Artiklis kĂ€sitletakse erinevate lĂ€henemisviiside plusse ja miinuseid, alates ĂŒhest globaalsest klastrist kuni paljude vĂ€ikeste ja kitsaste:
- ĂŒks suur ĂŒhisklaster;
- mitu vÀikest kitsalt spetsialiseerunud klastrit;
- ĂŒks klaster iga rakenduse jaoks;
- ĂŒks klaster iga keskkonna jaoks.
Niisiis, millist lÀhenemist valida?
Nagu tavaliselt, sÔltub vastus kasutusstsenaariumist: tuleb kaaluda erinevate lÀhenemisviiside plusse ja miinuseid ning valida kÔige optimaalsem variant.
Kuid valik ei piirdu ainult eespool toodud nĂ€idetega â vĂ”ib rakendada igasugust kombinatsiooni!
NÀiteks vÔib korraldada igale meeskonnale paar klastrit: arenduse klaster (kus on keskkonnad dev ja test) ja klaster tootmisse (kus asub tootmiskeskkond).
Tuginedes sellele artiklile, saate vastavalt optimeerida iga variandi plussid ja miinused konkreetse stsenaariumi jaoks. Edu!
P.S.
Lugege ka meie blogist:
- «»;
- «»;
- «»;
- «».
Allikas: habr.com
