Krijimi i platformës kubernetes në Pinterest

GjatĂ« viteve tĂ« saj tĂ« ekzistencĂ«s, Pinterest ka 300 milion pĂ«rdorues qĂ« kanĂ« krijuar mĂ« shumĂ« se 200 miliard pinĂ« nĂ« mĂ« shumĂ« se 4 miliard tabela. PĂ«r tĂ« shĂ«rbyer kĂ«tĂ« ushtri pĂ«rdoruesish dhe bazĂ«n e gjerĂ« tĂ« pĂ«rmbajtjeve, portali ka zhvilluar mijĂ«ra shĂ«rbime, duke filluar nga mikroshĂ«rbimet qĂ« mund tĂ« menaxhohen nga disa CPU, deri te gjigantĂ«t monolitĂ« qĂ« funksionojnĂ« nĂ« tĂ« gjithĂ« njĂ« park tĂ« makinave virtuale. Dhe ja, erdhi momenti kur kompania i hodhi sytĂ« mbi k8s. ÇfarĂ« e tĂ«rhoqi "kubin" tek "Pinterest"? KĂ«tĂ« do ta mĂ«soni nĂ« pĂ«rkthimin tonĂ« tĂ« artikullit tĂ« fundit nga blogu i inxhinierisĂ« sĂ« Pinterest.

Krijimi i platformës kubernetes në Pinterest

Pra, qindra miliona përdorues dhe qindra miliard pinë. Për të shërbyer këtë ushtri përdoruesish dhe bazën e gjerë të përmbajtjeve, ne kemi zhvilluar mijëra shërbime, duke filluar nga mikroshërbimet që mund të menaxhohen nga disa CPU, deri te gjigantët monolitë që funksionojnë në të gjithë një park të makinave virtuale. Për më tepër, ne kemi një përzgjedhje të ndryshme framework-esh, të cilat gjithashtu mund të kërkojnë burime CPU, memorie ose qasje në operacione të hyrjes-daljes.

Gjatë mbështetjes së këtij zooteku mjetesh, ekipi i zhvillimit përballet me një sërë problemesh:

  • InxhinierĂ«t nuk kanĂ« njĂ« mĂ«nyrĂ« tĂ« unifikuar pĂ«r tĂ« nisur ambientin e punĂ«s. ShĂ«rbimet pa gjendje, shĂ«rbimet me gjendje dhe projektet nĂ« zhvillim aktiv bazohen nĂ« grupe tĂ« ndryshme teknologjike. Kjo ka çuar nĂ« krijimin e njĂ« kursi tĂ« tĂ«rĂ« trajnimi pĂ«r inxhinierĂ«t, si dhe e komplikon seriozisht punĂ«n e ekipit tonĂ« infrastrukturor.
  • Zhvilluesit, tĂ« cilĂ«t kanĂ« nĂ« dispozicion parkun e tyre tĂ« makinave virtuale, krijojnĂ« njĂ« ngarkesĂ« tĂ« madhe pĂ«r administratorĂ«t e brendshĂ«m. Si rezultat, operacione tĂ« thjeshta, si pĂ«rditĂ«simi i OS-sĂ« ose AMI-sĂ«, shtrihen pĂ«r javĂ« dhe muaj. Kjo çon nĂ« njĂ« rritje tĂ« ngarkesĂ«s nĂ« situata qĂ« duket se janĂ« krejtĂ«sisht rutinĂ«.
  • VĂ«shtirĂ«si nĂ« krijimin e mjeteve globale pĂ«r menaxhimin e infrastrukturĂ«s mbi zgjidhjet ekzistuese. Situata shpĂ«rndahet edhe mĂ« shumĂ« nga fakti se Ă«shtĂ« e vĂ«shtirĂ« tĂ« gjejmĂ« pronarĂ«t e makinave virtuale. Pra, ne nuk dimĂ« nĂ«se Ă«shtĂ« e sigurt tĂ« nxjerrim kĂ«to kapacitete pĂ«r t'u pĂ«rdorur nĂ« seksione tĂ« tjera tĂ« infrastrukturĂ«s sonĂ«.

Sistemet e orkestrimit të kontejnerëve janë një mënyrë për të unifikuar menaxhimin e ngarkesës së punës. Ato ju hapin rrugën për të rritur shpejtësinë e zhvillimit dhe e lehtësojnë menaxhimin e infrastrukturës, pasi të gjitha burimet e angazhuara në projekt menaxhohen nga një sistem qendror.

Krijimi i platformës kubernetes në Pinterest

Figura 1: Prioritetet e infrastrukturës (besueshmëria, performanca e zhvilluesve dhe efikasiteti).

Ekipa e Platformës së Menaxhimit të Rejllave në Pinterest u njoh me K8s në vitin 2017. Gjatë gjysmës së parë të vitit 2017 ne dokumentuam pjesën më të madhe të kapaciteteve tona të prodhimit, duke përfshirë API-në dhe të gjitha serverët web.Më pas ne kryem një vlerësim të kujdesshëm të sistemeve të ndryshme të orkestrimit të zgjidhjeve të kontejnerëve, ndërtimit të klasterëve dhe operimit me to. Në fund të vitit 2017 vendosëm të shfrytëzojmë Kubernetes. Ai ishte mjaft fleksibël dhe mbështetej gjerësisht në komunitetin e zhvilluesve.

NĂ« momentin e tanishĂ«m, ne krijuam mjetet tona pĂ«r ngarkimin e parĂ« tĂ« klasterit bazuar nĂ« Kops dhe e kaluam nĂ« Kubernetes komponentet ekzistuese tĂ« infrastrukturĂ«s — si rrjeti, siguria, metrikat, regjistrimi, menaxhimi i identitetit dhe trafiku. NĂ« tĂ« njĂ«jtĂ«n kohĂ«, ne implementuam njĂ« sistem modelimi tĂ« ngarkesave tĂ« punĂ«s pĂ«r burimin tonĂ«, kompleksiteti i tĂ« cilit Ă«shtĂ« i fshehur nga zhvilluesit. Tani jemi tĂ« fokusuar nĂ« sigurimin e stabilitetit tĂ« klasterit, shkallĂ«zimin e tij dhe lidhjen e klientĂ«ve tĂ« rinj.

Kubernetes: Rruga e Pinterest

Fillimi i punës me Kubernetes në shkallë të gjerë në Pinterest si një platformë që do të donin inxhinierët tanë, rezultoi me shumë vështirësi.

Si një kompani e madhe, ne kemi investuar shuma të konsiderueshme në mjetet infrastrukturore. Një shembull mund të jenë mjetet e sigurisë, të cilat përcjellin certifikatat dhe shpërndajnë çelësat, komponentet e kontrollit të trafikut, sistemet e zbulimit të shërbimeve, komponentet e dukshmërisë dhe regjistrimit të metrikave. Të gjitha këto u mblodhën jo thjesht kështu: ne kaluam një rrugë normale për provë dhe gabim, dhe për këtë arsye donim të integronim të gjithë këtë pasuri në infrastrukturën e re në Kubernetes në vend që të shpiknim nga e para një biçikletë të vjetër në një platformë të re. Ky qasje, në përgjithësi, e thjeshtoi migrimin, pasi mbështetje për aplikacionet tashmë ekziston, nuk është e nevojshme ta krijosh nga e para.

Po anën tjetër, modelet e parashikimit të ngarkesave në vetë Kubernetes (siç janë shpërndarjet, detyrat dhe grupe të daemon-ve) nuk janë të mjaftueshme për projektin tonë. Këto probleme përdorimi përbëjnë pengesa të mëdha në rrugën drejt kalimit në Kubernetes. Për shembull, kemi dëgjuar si zhvilluesit e shërbimeve ankohen për mungesën ose konfigurimin e papërshtatshëm të hyrjes. Gjithashtu, kemi hasur në përdorimin e gabuar të shabloneve, kur janë krijuar qindra kopje me specifikime dhe detyra identike, që ka çuar në probleme të tmerrshme me debugimin.

Ishte gjithashtu shumë e vështirë të mbahet versionet e ndryshme në të njëjtin klaster. Imagjinoni vështirësitë në mbështetje për klientët, nëse duhet të punoni në të njëjtën kohë me shumë versione të të njëjtit ambient ekzekutimi, me të gjitha problemet, defektet dhe azhurnimet e tyre.

Burimet dhe kontrollet e personalizuara të Pinterest

Për të lehtësuar procesin e implementimit të Kubernetes për inxhinierët tanë, si dhe për të thjeshtuar infrastrukturën dhe për të përshpejtuar funksionimin e saj, ne zhvilluam definicionet tona të burimeve të personalizuara (CRD).

CRD ofrojnë funksionalitetet e mëposhtme:

  1. Kombinimi i burimeve të ndryshme natively të Kubernetes, në mënyrë që ato të funksionojnë si një ngarkesë e vetme. Për shembull, burimi PinterestService përfshin shpërndarjen, shërbimin e hyrjes dhe hartën e konfigurimit. Kjo i lejon zhvilluesit të mos shqetësohen për konfigurimin e DNS.
  2. Implementimi i mbështetjes së nevojshme për aplikacionet. Përdoruesi duhet të përqendrohet vetëm në specifikimin e kontejnerit sipas logjikës së tij të biznesit, ndërsa kontrolluesi CRD implementon të gjitha init-kontejnerët e nevojshëm, variablat e mjedisit dhe specifikimet e pod-it. Kjo siguron një nivel ndryshe komoditeti për zhvilluesit.
  3. Kontrolluesit CRD gjithashtu menaxhojnë ciklin e jetës së burimeve të tyre dhe rrisin disponueshmërinë e debugimit. Kjo përfshin pajtimin e specifikimeve të dëshiruara dhe reale, përditësimin e statusit CRD dhe mbajtjen e log-eve të ngjarjeve dhe jo vetëm. Pa CRD, zhvilluesit do të ishin të detyruar të menaxhonin një grup të madh burimesh, çka vetëm do të rrisë mundësinë e gabimeve.

Ja një shembull i PinterestService dhe një burim të brendshëm që menaxhohet nga kontrolluesi ynë:

Krijimi i platformës kubernetes në Pinterest

Si mund të shihet më sipër, për të mbështetur enën e përdoruesit, na nevojitet të integrojmë brenda saj një enë inicializimi dhe disa shtesa për të siguruar sigurinë, dukshmërinë dhe funksionimin me trafikun rrjetës. Për më tepër, ne krijuam skema konfigurimi dhe zbatuam mbështetje për shabllon PVC për punët e paketuar, si dhe gjurmimin e shumë variablave të ambientit për të ndjekur identifikimin, konsumimin e burimeve dhe mbledhjen e "plehrave".

ËshtĂ« e vĂ«shtirĂ« tĂ« imagjinohet se zhvilluesit do tĂ« dĂ«shironin tĂ« shkruanin kĂ«to skedat konfigurimi manualisht pa mbĂ«shtetje CRD, pĂ«r tĂ« mos pĂ«rmendur mbĂ«shtetje tĂ« mĂ«tejshme dhe shpĂ«rndarje tĂ« konfigurations.

Fluksi i aplikacioneve të shpërndarjes

Krijimi i platformës kubernetes në Pinterest

Në diagramin më sipër tregohet si të shpërndani burimin e përdoruesve Pinterest në një klaster Kubernetes:

  1. Zhvilluesit ndërveprojnë me klasterin tonë Kubernetes përmes CLI dhe ndërfaqes përdoruesit.
  2. Mjetet CLI / UI nxjerrin skedarët YAML të konfigurimit të fluksit të punës dhe pronësi të tjera të ndërtimit (të njëjtin identifikues versioni) nga Artifactory, dhe më pas i dërgojnë ato në Shërbimin e Dhënies së Punëve. Ky hap siguron që në klaster të dërgohen vetëm versionet funksionale.
  3. JSS është një portë për platforma të ndryshme, duke përfshirë Kubernetes. Këtu ndodh autentikimi i përdoruesit, dhënia e kuotave dhe verifikimi i pjesëmarrës i konfigurimit të CRD tonë.
  4. Pas verifikimit të CRD-së në anën e JSS-së, informacioni dërgohet në API-në e platformës k8s.
  5. Kontrollori ynë CRD ndjek ngjarjet në të gjitha burimet e përdoruesve. Ai shndërron CR në burime natyrale k8s, shton modulat e nevojshme, vendos variablat përkatëse të ambientit dhe realizon punë të tjera mbështetëse, duke garantuar për aplikacionet e përdoruesve të kontejnerëve mbështetje të mjaftueshme infrastrukturore.
  6. Më pas kontrollori CRD dërgon të dhënat e marra në API-në Kubernetes për t'u procesuar nga planifikuesi dhe për t'u nxjerrë në punë.

Shënim: ky ky ky ky ky ky ky ky ky ky ky ky ky ky ky ky. Tani jemi duke punuar për të përmirësuar këtë proces që të integrohemi plotësisht me CI/CD-në tonë të re. Kjo do të thotë se nuk mund të ndajmë të gjithë detajet e lidhura me Kubernetes. Jemi në pritje për të ndarë eksperiencën tonë dhe për të folur për përparimin e ekipit në këtë drejtim në postimin tonë të ardhshëm në blogun "Ndërtimi i një platforme CI/CD për Pinterest".

Llojet e burimeve speciale

Duke u bazuar në nevojat specifike të Pinterest, ne zhvilluam CRD-të e mëposhtme që përshtaten për procese të ndryshme pune:

  • PinterestService Ă«shtĂ« shĂ«rbimet stateless qĂ« funksionojnĂ« prej kohĂ«sh. ShumĂ« nga sistemet tona kryesore bazohen nĂ« njĂ« grup tĂ« tillĂ« shĂ«rbimesh.
  • PinterestJobSet modelon punĂ«t me cikĂ«l tĂ« plotĂ«. NĂ« Pinterest, ka njĂ« skenar tĂ« zakonshĂ«m, ku disa punĂ« nisin tĂ« njĂ«jtat kontejnerĂ« nĂ« mĂ«nyrĂ« paralele, pa qenĂ« e varur nga proceset e ngjashme.
  • PinterestCronJob aplikohet gjerĂ«sisht pĂ«r ngarkesa tĂ« vogla periodike. Kjo Ă«shtĂ« njĂ« mbĂ«shtetje pĂ«r funksionimin natyror tĂ« cron me mekanizma mbĂ«shtetje pĂ«r Pinterest, tĂ« cilĂ«t janĂ« pĂ«rgjegjĂ«s pĂ«r sigurinĂ«, trafik, regjistrat dhe metrikat.
  • PinterestDaemon pĂ«rfshin daemonĂ«t e infrastrukturĂ«s. Ky grup vazhdon tĂ« rritet, ndĂ«rsa ne shtojmĂ« mbĂ«shtetje pĂ«r klasteret tona.
  • PinterestTrainingJob zgjerohet nĂ« proceset Tensorflow dhe Pytorch, duke ofruar tĂ« njĂ«jtin nivel mbĂ«shtetjeje gjatĂ« funksionimit, ashtu si tĂ« gjitha CRD-tĂ« e tjera. Duke qenĂ« se pĂ«rdorim shumĂ« Tensorflow dhe sisteme tĂ« tjera tĂ« tĂ« mĂ«suarit tĂ« makinerive nĂ« Pinterest, na erdhi nĂ« ndihmĂ« tĂ« ndĂ«rtosh njĂ« CRD tĂ« veçantĂ« pĂ«r to.

Gjithashtu po punojmë mbi PinterestStatefulSet, që së shpejti do të adaptohet për magazinat e të dhënave dhe sisteme të tjera stateful.

Mbështetje për mjedisin e ekzekutimit

Kur moduli i aplikacioneve starton në Kubernetes, ai merr automatikisht një certifikatë për identifikimin e tij. Kjo certifikatë përdoret për qasje në depo sekrete ose për komunikim me shërbime të tjera përmes mTLS. Ndërkohë, konfiguratori i inicializimit të konteinerëve dhe Daemon do të ngarkojnë të gjitha varësitë e nevojshme para se të nisin aplikacionin në konteiner. Kur gjithçka të jetë gati, sidecar i trafikut dhe Daemon do të regjistrojnë adresën IP të modulit në Zookeeper tonë, në mënyrë që klientët ta zbulojnë atë. Të gjitha këto do të funksionojnë, pasi moduli rrjetor ishte konfiguruar para nisjes së aplikacionit.

Më sipër janë disa shembuj tipikë të mbështetjes për ngarkesat gjatë ekzekutimit. Për lloje të tjera ngarkesash mund të nevojitet pak mbështetje ndryshe, por të gjitha ato paraqiten si sidecar në nivel pod, në nivel node ose Daemon në nivelin e makinave virtuale. Ne sigurohemi që gjithçka të jetë e implementuar brenda infrastrukturës menaxhuese dhe e harmonizuar mes aplikacioneve, gjë që në fund ul ndjeshëm ngarkesën në punët teknike dhe mbështetje për klientët.

Testimi dhe QA

Ne krijuam një pipeline testimi end-to-end mbi infrastrukturën ekzistuese të testimeve të Kubernetes. Këto teste shtrihen mbi të gjitha klasterët tanë. Pipeline ynë ka kaluar shumë riformatime para se të bëhet pjesë e klasterit të produktit.

Përveç sistemeve të testimit, ne kemi sisteme monitorimi dhe alarmi që ndjekin përhershëm gjendjen e komponentëve të sistemit, konsumimin e burimeve dhe tregues të tjerë të rëndësishëm, duke na njoftuar vetëm kur nevojitet ndërhyrja e njeriut.

Alternativat

Ne shqyrtuam disa alternativa të burimeve të personalizuara, siç janë kontrollet e aksesit dhe sistemet e shablloneve. Megjithatë, të gjitha ato lidhen me vështirësi të konsiderueshme, kështu që ne zgjodhëm të shkonim me rrugën e CRD.

Kontrolli mujor i lejes është përdorur për të futur sidecar, variablin e ambientit dhe mbështetje të tjera gjatë ekzekutimit. Megjithatë, ai hasi në probleme të ndryshme, siç janë lidhja e burimeve dhe menaxhimi i ciklit të jetës së tyre, ndryshe nga CRD që nuk ka këto probleme.

Vërejtje: Sistemat e shablloneve, si diagramet Helm, përdoren gjerësisht për të bërë lançime aplikacionesh me konfigurime të ngjashme. Megjithatë, aplikacionet tona të punës janë shumë të ndryshme për t'u menaxhuar përmes shablloneve. Gjithashtu, gjatë implementimit të vazhdueshëm duke përdorur shabllone, do të ketë shumë gabime.

Puna e ardhshme

Aktualisht po merremi me një ngarkesë të kombinuar në të gjitha klasteret tona. Për të mbështetur procese të tilla të llojeve dhe madhësive të ndryshme, ne punojmë në drejtimet e mëposhtme:

  • Kombinimi i klastereve shpĂ«rndan aplikacione tĂ« mĂ«dha nĂ« klastere tĂ« ndryshme pĂ«r tĂ« siguruar shkallĂ«zueshmĂ«rinĂ« dhe stabilitetin.
  • TĂ« sigurojmĂ« stabilitet, shkallĂ«zim dhe dukshmĂ«ri tĂ« klasterit pĂ«r tĂ« krijuar lidhjen midis aplikacionit dhe SLA-sĂ« sĂ« tij.
  • Menaxhimi i burimeve dhe kuotave, nĂ« mĂ«nyrĂ« qĂ« aplikacionet tĂ« mos pĂ«rplasen ndĂ«rsjelltas, dhe shkalla e klasterit tĂ« kontrollohet nga ana jonĂ«.
  • Platforma e re CI/CD pĂ«r mbĂ«shtetje dhe shpĂ«rndarjen e aplikacioneve nĂ« Kubernetes.

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster