Kubernetes-klastrite projekteerimine: kui palju neid peaks olema?

MĂ€rk. tĂ”lge.: see this material from the educational project learnk8s — 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.

Kubernetes-klastrite projekteerimine: kui palju neid peaks olema?

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:

Kubernetes-klastrite projekteerimine: kui palju neid peaks olema?

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:

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

Kubernetes-klastrite projekteerimine: kui palju neid peaks olema?
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:

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

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

Nimi ruumid 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 Google Kubernetes Engine (GKE) vĂ”i Azure Kubernetes Service (AKS), 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, Amazon Elastic Kubernetes Service, EKS).

+ 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 DNS — 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 PodSecurityPolicies ja NetworkPolicies. 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 ressursside pĂ€ringud ja piirangud vt ka artiklit « CPU piirangud ja agressiivne trottling Kuberneteses » — tĂ”lk. mĂ€rkus), ResourceQuotas ja LimitRanges. 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 rollipĂ”hist juurdepÀÀsu haldust (RBAC) vt artiklit « Kasutajad ja autoriseerimine RBAC Kuberneteses » — 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 5000 node'it, 150 000 pod'i ja 300 000 konteinerit..

Kuid tegelikus elus vĂ”ivad probleemid alata palju varem – nĂ€iteks juba 500 node'iga. Asi on selles, et suured klastrid koormavad Kubernetes'i juhtimistaset tugevalt. TeisisĂ”nu, et hoida klastrit töökorras ja kasutada ressursse efektiivselt, on vajalik hoolikas konfigureerimine..

Seda probleemi uuritakse vastavas artiklis algses pÀevas, pealkirjaga «

Architecting Kubernetes clusters — choosing a worker node sizeAga vaatame vastupidist lĂ€henemist: palju vĂ€ikseid klastreid.».

2. Palju vÀikeseid, spetsialiseeritud klastreid.

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

Palju vÀikeseid klustreid.

Kubernetes-klastrite projekteerimine: kui palju neid peaks olema?
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:

Kubernetes-klastrite projekteerimine: kui palju neid peaks olema?
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:

Kubernetes-klastrite projekteerimine: kui palju neid peaks olema?
Ü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

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster