Kuberneteses reserveerimine: see eksisteerib

Minu nimi on Sergei, olen ITSumma ettevĂ”ttest ja tahan rÀÀkida, kuidas me lĂ€heneme Kuberneteses varukoopiate tegemisele. Viimasel ajal olen palju tegelenud konsultatsioonitegevusega erinevate DevOps lahenduste juurutamisel erinevatele meeskondadele ning eriti olen töötanud K8s projektidega. Uptime pĂ€eva 4. konverentsil, mis oli pĂŒhendatud keeruliste arhitektuuride varukoopiatele, esitasin ettekande varukohtade kohta "kuubikus", ja siin on selle vabalt koostatud kokkuvĂ”te. Kuid enne mainin, et see ei ole otsene tegevusjuhend, vaid pigem ĂŒlevaade mĂ”tetest antud teema kohta.

Kuberneteses reserveerimine: see eksisteerib

PĂ”himĂ”tteliselt on monitorimine ja reserveerimine kaks peamist tööriista, et suurendada iga projekti talitlushĂ€irekindlust. Aga te ĂŒtlete, et Kubernetesis toimub kĂ”ik tasakaalustamine automaatselt, kĂ”ik skaleerub iseseisvalt ja kui midagi juhtub, tĂ”useb see iseenesest... Esimese, pinnapealse teema uurimise kĂ€igus vastas internet kĂŒsimusele, kuidas keegi lĂ€heneb K8s-i reserveerimisele, et "miks?" Paljud arvavad, et Kubernetes on maagiline lahendus, mis vabastab kĂ”ikidest infrastruktuursetest probleemidest ja tagab, et projekt ei kuku kunagi kokku. Aga... maailm ei ole see, mida see nĂ€ib.

Kuidas me lĂ€henesime reserveerimise protsessile varem? Meil olid identsed platvormid, kas virtuaalmasinad vĂ”i fĂŒĂŒsilised serverid, serverid, millele me rakendasime kolme pĂ”hipraktikat:

  1. koodi ja staatika sĂŒnkroonimine
  2. konfiguratsioonide sĂŒnkroonimine
  3. andmebaasi replikeerimine

Ja voilà: igal hetkel saame vahetada varuplaatvormile, kÔik on Ônnelikud, tÔusime ja lahkume.

Kuberneteses reserveerimine: see eksisteerib

Mida pakutakse meie Kubernetes rakenduse pideva kĂ€ttesaadavuse suurendamiseks? Esimene asi, millest ĂŒtleb mitteformaalse dokumentatsiooni jĂ€rgi — on paigutada palju masinaid, luua palju mastereid — nende arv peab vastama kvoorumi nĂ”uetele klastris, ja igal masteril peab olema ĂŒles tĂ”stetud etcd, api, MC, scheduler
 Ja nagu kĂ”ik oleks suurepĂ€rane: kui mitu töönode vĂ”i masterit ebaĂ”nnestub, siis meie klaster tasakaalustub ĂŒmber ja rakendus jĂ€tkab tööd. See kĂ”ik tundub nagu vĂ”lu! Kuid sageli asub meie klaster ĂŒhes andmekeskuses, mis vĂ”ib tekitada teatud kĂŒsimusi. Mis juhtub, kui ekshaator tuleb ja kaevab kaabli ĂŒles, kui lööb vĂ€lk, vĂ”i toimub universaalne tulv? KĂ”ik on lĂ”ppenud, meie klastrit enam pole. Kuidas lĂ€heneda varundamisele, arvestades selle probleemi kĂŒlge?

Esmalt, teil peab olema veel ĂŒks klaster kuumaks varuks, st klaster, millele saate igal hetkel ĂŒle minna. Sel juhul peavad infrastruktuurid Kubernetes'i seisukohalt olema tĂ€ielikult identsed. See tĂ€hendab, et kui teie failisĂŒsteemil on mingeid ebatavalisi pluginaid, kohandatud lahendusi ingressi jaoks, siis peavad need olema tĂ€ielikult identsed teie kahel (vĂ”i kolmel, vĂ”i kĂŒmnel, sĂ”ltuvalt sellest, kui palju raha ja adminnide jĂ”udu on) klastril. Tuleb selgelt mÀÀratleda kaks rakenduste (deploymentide, statefulsetide, daemonsetide, cronjobide jne) komplekti: millised neist vĂ”ivad pidevalt töötada varuklastris, ja milliseid ei tasuks ĂŒldse kĂ€ivitada enne ĂŒleminekut.

Kas meie varuklaster peab olema tÀielikult identne meie tootmisklastriga? Ei. Kui varem monoliitsete projektide ning rauainfrastruktuuri töö kÀigus hoidsime praktiliselt tÀielikult identses keskkonnas, siis Kubernetes'i kontekstis ei peaks seda olema. Vaatame, miks.

NĂ€iteks alustame Kubernetes'i pĂ”hielementidest — deployments — need peavad olema identsed. Peavad olema kĂ€ivitatud rakendused, mis vĂ”ivad igal hetkel ĂŒle vĂ”tta liikluse töötlemise ja vĂ”imaldada meie projektil jĂ€tkata elu. Kui me rÀÀgime konfiguratsioonifailidest, siis peame vaatama, kas need peavad olema identsed vĂ”i mitte. See tĂ€hendab, et kui me, targad inimesed, ei tarbi mingeid keelatud aineid ja ei hoia andmebaasi K8s, siis peavad meie configmap'id sisaldama juurdepÀÀsu seadeid tootmisandmebaasi (mille varundusprotsess on ĂŒles ehitatud eraldi). SeetĂ”ttu juurdepÀÀsu tagamiseks varundatud andmebaasi peame meil olema eraldi konfiguratsioonifail (configmap). TĂ€pselt nii töötame ka secret'itega: andmebaasi juurdepÀÀsuks paroolidega, API vĂ”tmetega; igal hetkel vĂ”ib meil olla töötav kas tootmissecret vĂ”i varundussecret. Seega on meil juba kaks Kubernetes'e elementi, mille varukoopiad ei tohi olla identsed tootmisversioonidega. JĂ€rgmiseks elemendiks, millele tasub keskenduda, on cronjob. Cronjob'id varukoopias ei tohi mingil juhul olla identsed tootmiscluster'i cronjob'ide kogumiga! Kui tĂ”stame ĂŒles varuaklastri ja aktiveerime selle koos kĂ”ikide cronjob'idega — nĂ€iteks saavad inimesed teilt ĂŒhe asemel kaks e-kirja samal ajal. VĂ”i mĂ”ni andmete sĂŒnkroonimine vĂ€liste allikatega toimub kaks korda, seega hakkame haiget saama, nutma, karjuma ja sĂ”imama.

Kuberneteses reserveerimine: see eksisteerib

Aga kuidas soovitavad inimesed internetis varundusklastri korraldada? Teine populaarne vastus peale „miks?” on Kubernetes Federation'i kasutamine.

Mis see on? See on, ĂŒtleme nii, suur meta-klaster. Kui me kujutame ette Kuberneetside arhitektuuri — kus meil on juht ja mitmed sĂ”lmed — siis föderatsiooni vaates on meil samuti juht ja mitmed sĂ”lmed, ainult et iga sĂ”lm on eraldi klaster. See tĂ€hendab, et me töötame nende samade elementide ja primitiividega nagu ĂŒksiku Kuberneetsi puhul, ainult et pöörame ja keerame mitte meie fĂŒĂŒsilisi masinaid, vaid terveid klastreid. Föderatsiooni raames toimub meil tĂ€ielik föderatiivsete ressursside sĂŒnkroniseerimine vanematelt jĂ€rglastele. NĂ€iteks, kui me kĂ€ivitame mĂ”ne juurutamise lĂ€bi föderatsiooni — see juurutatakse meie iga tĂŒtarklastrisse. Kui me vĂ”tame mingi configmap’i, salajase info, ja levitame selle föderatsiooni kaudu — see laieneb kĂ”igisse meie tĂŒtarklastreisse; samas vĂ”imaldab föderatsioon meie ressursside kohandamist lastes. See tĂ€hendab, et me vĂ”tsime mingi configmap'i, juurutame selle lĂ€bi föderatsiooni ja seejĂ€rel, kui me peame midagi spetsiifilist tĂŒkkide jĂ€rgi kohandama, lĂ€heme ja muudame seda ĂŒksikusse klastrisse, ja see muudatus ei sĂŒnkroniseeru enam kuskile.

Kubernetesi föderatsioon — suhteliselt uus tööriist, ja see ei toeta kaugelki kogu ressursikomplekti, mida pakub K8s: dokumentatsiooni esimese versiooni avaldamise ajal rÀÀgiti toimetusartikkelide, replikasete juurutamisest ja ingressist. Saladused ei olnud toetatud, samuti ei olnud vĂ”imalik töötada vaba ruumiga. Liialt piiratud komplekt. Eriti kui me armastame eksperimentida, — nĂ€iteks, kasutada custom resource definition, et edastada oma ressursse Kubernetesesse, — föderatsiooniga me neid enam ei suru. Nii et nagu
 vĂ€ga tĂ”elise lahenduse sarnane, kuid sunnib meid perioodiliselt endale jalga tulistama. Teiselt poolt vĂ”imaldab föderatsioon paindlikult hallata meie replicaset'i. NĂ€iteks, me tahame, et meie rakendus töötaks 10 koopiat, siis jagab föderatsioon selle numbri automaatselt proportsionaalselt klastrite arvu vahel. Ja seda kĂ”ike saab veel ka konfigureerida! See tĂ€hendab, et saame mÀÀrata, et tootmisklastris peab olema 6 koopiat meie rakendusest, ja varukoopiat klasstri jaoks, ressursikasutuse kokkuhoiu vĂ”i omaenda lĂ”bustamiseks — ainult 4 koopiat meie rakendusest. Mis on samuti piisavalt mugav. Kuid föderatsiooniga peame kasutama uusi lahendusi, midagi kulutama jooksvalt, sundima end rohkem mĂ”tlema


Kas saaksime kĂŒberprotsessi lihtsamalt lĂ€heneda? Millised tööriistad meil ĂŒldse olemas on?

Esiteks on meil alati mingi CI/CD sĂŒsteem, seega me ei lĂ€he kĂ€sitsi, ei kirjuta serverites create/apply. SĂŒsteem genereerib YAML-failid meie konteinerite jaoks.

Teiseks on meil mitu klastrit, meil on kas ĂŒks vĂ”i mitu (kui oleme nutikad) registrit, mille me samuti broneerisime. Ja on suurepĂ€rane utiliit kubectl, mis suudab samaaegselt töötada mitme klassiga.

Kuberneteses reserveerimine: see eksisteerib

Nii et: minu arvates on kĂ”ige lihtsam ja tĂ”husam lahendus varukoopia klastrite loomine primitiivne paralleelne juurutamine. On olemas mingi CI/CD sĂŒsteem, mille kaudu ehitame meie konteinerid, testime neid ja juurutame rakendusi lĂ€bi kubectl mitmesse sĂ”ltumatusse klastrisse. Me saame samal ajal luua vĂ€ljaandeid mitmesse klastrisse. Vastavalt sellele lahendame ka konfigureerimise kohaletoimetamise sellel etapil. Saab ette mÀÀrata konfigureerimise kogumi meie tootmistgehĂŒsteemile, konfigureerimise komplekti varuklastrile ja CI/CD sĂŒsteemi tasandil juurutada tootmisĂŒmbruse tootmisklastri, varuooperi varuklastrisse. Erinevalt föderatsioonist ei pea pĂ€rast föderatiivse ressursi mÀÀramist minema iga tĂŒtarklastri juurde ja midagi ĂŒmber mÀÀrama. Oleme selle eelnevalt valmis teinud. Kuidas me oleme kenad.

Aga... on... ma kirjutasin, et on "kĂ”igi kurjade juur", kuid neid on tegelikult kaks. Esiteks, failisĂŒsteem. On mingi PV, vĂ”i kasutame me vĂ€list salvestust. Kui me salvestame faile klastrisse, siis tuleb jĂ€rgida vanu praktikaid, mis on pĂ€rit rauainfrastruktuuri ajast: nĂ€iteks sĂŒnkroniseerida lsync’iga. VĂ”i mĂ”ne muu isiklikult eelistaud leidlikkusega. Rullime kĂ”ik ĂŒle teistele masinatele ja elame edasi.

Teiseks, ja tegelikult isegi olulisem takistuspunkt — andmebaas. Kui me oleme intelligentsed inimesed ja ei hoia andmebaasi kuber-networkis, siis andmete varundamine sama vana skeemi jĂ€rgi — master-slave replikatsioon, siis vahetame ja rebime repliika jĂ€rele ning elame hĂ€sti. Kuid kui me hoiame oma DB-d klastris, siis on tegelikult palju valmis lahendusi sama master-slave repliika korraldamiseks, palju lahendusi DB kĂ€ivitamiseks kuber-networkis.
Andmebaaside varundamise teemal on juba miljard ettekannet peetud, miljard artiklit kirjutatud — siin pole midagi uut. ÜhesĂ”naga, jĂ€rgige oma unistusi, elage nagu soovite, leiutage endale ka keerulisi lahendusi, kuid mĂ”elge kindlasti, kuidas kĂ”ike seda varundada.

NĂŒĂŒd rÀÀgime sellest, kuidas meie hankeprotsess töökeskkonda edaspidi seekord toimub, juhul kui peaks tulekahju. Esiteks turgutame me paralleelselt staatuseid rakendusi. Need ei mĂ”juta meie rakenduste Ă€riloogikat ega projekti, saame pidevalt hoida kahte komplekti töötavaid rakendusi, kusjuures mĂ”lemad saavad hakata liiklust vastu vĂ”tma. Üks oluline aspekt, millest tuleb tĂ€helepanu pöörata, on see, et vahetusprotsessis peaksite kindlasti vaatama, kas on vaja konfigureerimist uuesti mÀÀrata. NĂ€iteks meil on tootmiscluster Kubernetes, varuregister Kubernetes, vĂ€lised andmebaasid master ja varuregister master. Meil on neli erinevat vĂ”imalust, kuidas need rakendused tootes omavahel koostööd saavad alustada. VĂ”ib-olla vahetame andmebaasi ning selgub, et tuleb tootmisclusteris liiklus suunata uuele andmebaasile; vĂ”i vĂ”ib olla cluster katki — ja me oleme lĂ€inud varurakendusse, kuid jĂ€tkame töötamist tootmisandmebaasiga; ning kolmas variant on, et meil on katki see ja katki too, ning me vahetame mĂ”lemad rakendused, mÀÀrame meie seadistuse ĂŒmber, et uued rakendused töötaksid juba uue andmebaasi pĂ”hjal.

Nii, millised jÀreldused saab kÔigest sellest teha?

Kuberneteses reserveerimine: see eksisteerib

Esimene jĂ€reldus: varuga on hea elada. Aga see on kallis. Ideaalis ei tohiks elada ainult ĂŒhe varuga. Ideaalis peaks olema mitu varu. Esiteks peab varu olema vĂ€hemalt mitte ĂŒhes andmekeskuses ja teiseks, vĂ€hemalt teiselt teenusepakkujalt. Olen korduvalt selliseid olukordi kogenud. Kahjuks ei saa ma projekte nimetada, kui just siis, kui andmekeskuses tulekahju juhtus... Oli mul selline olukord: lĂŒlitame ĂŒle varule! Ja varu serverid olid just selles samas rack'is.

VĂ”i kujutage ette, et Amazon on Venemaal keelatud (ja nii on juhtunud). Ja kĂ”ik: mis kasu on sellest, et meie varu on teises amazon'is? See on samuti kĂ€ttesaamatu. Nii et kordangi: hoidke varu vĂ€hemalt teises andmekeskuses ja eelistatavalt — teisel teenusepakkujal.

Teise tĂ€helepanek: kui teie Kubernetesis rakendus suhtleb vĂ€liste allikatega (see vĂ”ib olla kas andmebaas vĂ”i mĂ”ni vĂ€line API), mÀÀrake see kindlasti teenusena koos vĂ€lise Endpoint'iga, et ĂŒleminekul ei peaks te uuesti ĂŒles seadma 15 teie rakendust, mis pÀÀsevad samasse andmebaasi. MÀÀrake andmebaas eraldi teenusena ja pÀÀseda sellele, nagu oleks see teie klusteris: kui andmebaas tĂ”rkub, muudate IP-d ĂŒhes kohas ja jĂ€tkate muretult elu.

Ja lĂ”petuseks: mulle meeldib 'kuubik', samuti katsetused sellega. Samuti meeldib mulle jagada nende katsete tulemusi ja ĂŒldiselt oma isiklikke kogemusi. SeepĂ€rast olen salvestanud seriaali veebinaridest K8s kohta, tere tulemast meie YouTube kanalile lisainfot saama.

Allikas: habr.com

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