Gadu gaitÄ Pinterest 300 miljoni lietotÄju ir izveidojuÅ”i vairÄk nekÄ 200 miljardus tapas uz vairÄk nekÄ 4 miljardiem dÄļu. Lai apkalpotu Å”o lietotÄju armiju un plaÅ”o satura bÄzi, portÄls ir izstrÄdÄjis tÅ«kstoÅ”iem pakalpojumu, sÄkot no mikropakalpojumiem, kurus var apkalpot daži CPU, lÄ«dz milzÄ«giem monolÄ«tiem, kas darbojas ar visu virtuÄlo maŔīnu parku. Un tad pienÄca brÄ«dis, kad uzÅÄmuma acis pievÄrsÄs k8s. KÄpÄc ākubsā labi izskatÄ«jÄs vietnÄ Pinterest? Par to jÅ«s uzzinÄsit no mÅ«su nesenÄ raksta tulkojuma no
TÄtad simtiem miljonu lietotÄju un simtiem miljardu tapas. Lai apkalpotu Å”o lietotÄju armiju un plaÅ”o satura bÄzi, esam izstrÄdÄjuÅ”i tÅ«kstoÅ”iem pakalpojumu, sÄkot no mikropakalpojumiem, ko var apstrÄdÄt ar dažiem CPU, lÄ«dz milzÄ«giem monolÄ«tiem, kas darbojas uz veselÄm virtuÄlo maŔīnu parkÄm. TurklÄt mums ir dažÄdas sistÄmas, kurÄm var bÅ«t nepiecieÅ”ama arÄ« CPU, atmiÅa vai I/O piekļuve.
Uzturot Å”o rÄ«ku zoodÄrzu, izstrÄdes komanda saskaras ar vairÄkiem izaicinÄjumiem:
- Nav vienota veida, kÄ inženieri varÄtu vadÄ«t ražoÅ”anas vidi. Bezvalstnieku pakalpojumi, Stateful pakalpojumi un projekti, kas tiek aktÄ«vi izstrÄdÄti, ir balstÄ«ti uz pilnÄ«gi atŔķirÄ«gÄm tehnoloÄ£iju kaudzÄm. Tas noveda pie visa inženieru apmÄcÄ«bas kursa izveides, kÄ arÄ« nopietni sarežģī mÅ«su infrastruktÅ«ras komandas darbu.
- IzstrÄdÄtÄji ar savu virtuÄlo maŔīnu parku rada milzÄ«gu slogu iekÅ”Äjiem administratoriem. RezultÄtÄ tÄdas vienkÄrÅ”as darbÄ«bas kÄ OS vai AMI atjauninÄÅ”ana aizÅem nedÄļas un mÄneÅ”us. Tas rada palielinÄtu slodzi Ŕķietami absolÅ«ti ikdieniŔķÄs situÄcijÄs.
- GrÅ«tÄ«bas izveidot globÄlus infrastruktÅ«ras pÄrvaldÄ«bas rÄ«kus papildus esoÅ”ajiem risinÄjumiem. SituÄciju vÄl vairÄk sarežģī fakts, ka atrast virtuÄlo maŔīnu Ä«paÅ”niekus nav viegli. Tas ir, mÄs nezinÄm, vai Å”o jaudu var droÅ”i iegÅ«t, lai darbotos citÄs mÅ«su infrastruktÅ«ras daļÄs.
Konteineru orÄ·estrÄÅ”anas sistÄmas ir veids, kÄ apvienot darba slodzes pÄrvaldÄ«bu. Tie paver iespÄjas palielinÄt attÄ«stÄ«bas Ätrumu un vienkÄrÅ”o infrastruktÅ«ras pÄrvaldÄ«bu, jo visus projektÄ iesaistÄ«tos resursus pÄrvalda viena centralizÄta sistÄma.
1. attÄls. InfrastruktÅ«ras prioritÄtes (uzticamÄ«ba, izstrÄdÄtÄja produktivitÄte un efektivitÄte).
Cloud Management Platform komanda vietnÄ Pinterest atklÄja K8s 2017. gadÄ. LÄ«dz 2017. gada pirmajai pusei mÄs bijÄm dokumentÄjuÅ”i lielÄko daļu mÅ«su ražoÅ”anas iespÄju, tostarp API un visus mÅ«su tÄ«mekļa serverus. PÄc tam mÄs veicÄm rÅ«pÄ«gu dažÄdu sistÄmu novÄrtÄjumu konteineru risinÄjumu organizÄÅ”anai, kopu veidoÅ”anai un darbam ar tiem. Tuvojoties 2017. gada beigÄm, mÄs nolÄmÄm izmantot Kubernetes. Tas bija diezgan elastÄ«gs un plaÅ”i atbalstÄ«ts izstrÄdÄtÄju kopienÄ.
LÄ«dz Å”im esam izveidojuÅ”i savus klasteru sÄknÄÅ”anas rÄ«kus, kuru pamatÄ ir Kops, un migrÄjuÅ”i uz Kubernetes esoÅ”os infrastruktÅ«ras komponentus, piemÄram, tÄ«klus, droŔību, metriku, reÄ£istrÄÅ”anu, identitÄtes pÄrvaldÄ«bu un trafiku. Savam resursam ieviesÄm arÄ« darba slodzes modelÄÅ”anas sistÄmu, kuras sarežģītÄ«ba tiek slÄpta no izstrÄdÄtÄjiem. Tagad mÄs koncentrÄjamies uz klastera stabilitÄtes nodroÅ”inÄÅ”anu, tÄ mÄrogoÅ”anu un jaunu klientu piesaisti.
Kubernetes: Pinterest veids
Darba sÄkÅ”ana ar Kubernetes Pinterest mÄrogÄ kÄ platforma, kas mÅ«su inženieriem patiks, radÄ«ja daudz izaicinÄjumu.
KÄ liels uzÅÄmums mÄs esam ieguldÄ«juÅ”i lielus ieguldÄ«jumus infrastruktÅ«ras rÄ«kos. PiemÄri ir droŔības rÄ«ki, kas apstrÄdÄ sertifikÄtus un atslÄgu izplatÄ«Å”anu, satiksmes kontroles komponentus, pakalpojumu noteikÅ”anas sistÄmas, redzamÄ«bas komponentus un žurnÄlu un metrikas nosÅ«tÄ«Å”anas komponentus. Tas viss tika savÄkts iemesla dÄļ: mÄs izgÄjÄm parasto izmÄÄ£inÄjumu un kļūdu ceļu, un tÄpÄc mÄs vÄlÄjÄmies integrÄt visu Å”o aprÄ«kojumu jaunajÄ Kubernetes infrastruktÅ«rÄ, nevis izgudrot veco riteni uz jaunas platformas. Å Ä« pieeja kopumÄ vienkÄrÅ”oja migrÄciju, jo viss lietojumprogrammu atbalsts jau pastÄv, un tas nav jÄizveido no nulles.
No otras puses, ar paÅ”a Kubernetes slodzes prognozÄÅ”anas modeļiem (piemÄram, izvietoÅ”anu, darbiem un Daemon komplektiem) mÅ«su projektam nepietiek. Å Ä«s lietojamÄ«bas problÄmas ir milzÄ«gs ŔķÄrslis pÄrejai uz Kubernetes. PiemÄram, esam dzirdÄjuÅ”i, ka pakalpojumu izstrÄdÄtÄji sÅ«dzas par trÅ«kstoÅ”iem vai nepareiziem pieteikÅ”anÄs iestatÄ«jumiem. MÄs arÄ« saskÄrÄmies ar nepareizu veidÅu dzinÄju izmantoÅ”anu, kad tika izveidoti simtiem kopiju ar vienÄdu specifikÄciju un uzdevumu, kÄ rezultÄtÄ radÄs murgainas atkļūdoÅ”anas problÄmas.
Bija arÄ« ļoti grÅ«ti uzturÄt dažÄdas versijas vienÄ un tajÄ paÅ”Ä klasterÄ«. IedomÄjieties klientu atbalsta sarežģītÄ«bu, ja jums ir nepiecieÅ”ams vienlaikus strÄdÄt vairÄkÄs vienas un tÄs paÅ”as izpildlaika vides versijÄs ar visÄm to problÄmÄm, kļūdÄm un atjauninÄjumiem.
Pinterest lietotÄja rekvizÄ«ti un kontrolieri
Lai mÅ«su inženieriem bÅ«tu vieglÄk ieviest Kubernetes, kÄ arÄ« vienkÄrÅ”otu un paÄtrinÄtu mÅ«su infrastruktÅ«ru, esam izstrÄdÄjuÅ”i paÅ”i savas pielÄgotÄs resursu definÄ«cijas (CRD).
CRD nodroÅ”ina Å”Ädas funkcijas:
- DažÄdu vietÄjo Kubernetes resursu apvienoÅ”ana, lai tie darbotos kÄ viena darba slodze. PiemÄram, PinterestService resurss ietver izvietoÅ”anu, pieteikÅ”anÄs pakalpojumu un konfigurÄcijas karti. Tas ļauj izstrÄdÄtÄjiem neuztraukties par DNS iestatÄ«Å”anu.
- Ieviesiet nepiecieÅ”amo lietojumprogrammu atbalstu. LietotÄjam ir jÄkoncentrÄjas tikai uz konteinera specifikÄciju atbilstoÅ”i savai biznesa loÄ£ikai, savukÄrt CRD kontrolleris ievieÅ” visus nepiecieÅ”amos init konteinerus, vides mainÄ«gos un pod specifikÄcijas. Tas izstrÄdÄtÄjiem nodroÅ”ina principiÄli atŔķirÄ«gu komforta lÄ«meni.
- CRD kontrolleri arÄ« pÄrvalda vietÄjo resursu dzÄ«ves ciklu un uzlabo atkļūdoÅ”anas pieejamÄ«bu. Tas ietver vÄlamo un faktisko specifikÄciju saskaÅoÅ”anu, CRD statusa atjauninÄÅ”anu un notikumu žurnÄlu uzturÄÅ”anu un daudz ko citu. Bez CRD izstrÄdÄtÄji bÅ«tu spiesti pÄrvaldÄ«t vairÄkus resursus, kas tikai palielinÄtu kļūdu iespÄjamÄ«bu.
TÄlÄk ir sniegts PinterestService un iekÅ”ÄjÄ resursa piemÄrs, ko pÄrvalda mÅ«su kontrolieris.
KÄ redzat iepriekÅ”, lai atbalstÄ«tu pielÄgotu konteineru, mums ir jÄintegrÄ sÄkuma konteiners un vairÄki papildinÄjumi, lai nodroÅ”inÄtu droŔību, redzamÄ«bu un tÄ«kla trafiku. TurklÄt mÄs izveidojÄm konfigurÄcijas karÅ”u veidnes un ieviesÄm atbalstu PVC veidnÄm pakeÅ”u darbiem, kÄ arÄ« vairÄku vides mainÄ«go izsekoÅ”anu, lai izsekotu identitÄti, resursu patÄriÅu un atkritumu savÄkÅ”anu.
Ir grÅ«ti iedomÄties, ka izstrÄdÄtÄji vÄlÄtos rakstÄ«t Å”os konfigurÄcijas failus ar roku bez CRD atbalsta, nemaz nerunÄjot par konfigurÄciju turpmÄku uzturÄÅ”anu un atkļūdoÅ”anu.
Lietojumprogrammu izvietoŔanas darbplūsma
AugÅ”ÄjÄ attÄlÄ parÄdÄ«ts, kÄ Kubernetes klasterÄ« izvietot pielÄgotu Pinterest resursu:
- IzstrÄdÄtÄji mijiedarbojas ar mÅ«su Kubernetes klasteru, izmantojot CLI un lietotÄja interfeisu.
- CLI/UI rÄ«ki izgÅ«st darbplÅ«smas konfigurÄcijas YAML failus un citus bÅ«vÄjuma rekvizÄ«tus (tÄds pats versijas ID) no artefaktÅ«ras un pÄc tam iesniedz tos darba iesniegÅ”anas pakalpojumam. Å Ä« darbÄ«ba nodroÅ”ina, ka klasterÄ« tiek piegÄdÄtas tikai ražoÅ”anas versijas.
- JSS ir vÄrteja dažÄdÄm platformÄm, tostarp Kubernetes. Å eit lietotÄjs tiek autentificÄts, tiek izsniegtas kvotas un daļÄji tiek pÄrbaudÄ«ta mÅ«su CRD konfigurÄcija.
- PÄc CRD pÄrbaudes JSS pusÄ informÄcija tiek nosÅ«tÄ«ta uz k8s platformas API.
- MÅ«su CRD kontrolieris uzrauga notikumus visos lietotÄju resursos. Tas pÄrveido CR vietÄjos k8s resursos, pievieno nepiecieÅ”amos moduļus, iestata atbilstoÅ”os vides mainÄ«gos un veic citus atbalsta darbus, lai nodroÅ”inÄtu konteinerizÄtajÄm lietotÄju lietojumprogrammÄm pietiekamu infrastruktÅ«ras atbalstu.
- PÄc tam CRD kontrolieris nodod saÅemtos datus Kubernetes API, lai plÄnotÄjs tos varÄtu apstrÄdÄt un nodot ražoÅ”anÄ.
PiezÄ«me: Ŕī izvietoÅ”anas pirmsizlaides darba plÅ«sma tika izveidota pirmajiem jaunÄs k8s platformas lietotÄjiem. PaÅ”laik mÄs pilnveidojam Å”o procesu, lai pilnÄ«bÄ integrÄtos ar mÅ«su jauno CI/CD. Tas nozÄ«mÄ, ka mÄs nevaram jums pastÄstÄ«t visu, kas saistÄ«ts ar Kubernetes. MÄs ceram dalÄ«ties ar savu pieredzi un komandas progresu Å”ajÄ virzienÄ mÅ«su nÄkamajÄ emuÄra ierakstÄ āCI/CD platformas izveide Pinterestā.
SpeciÄlo resursu veidi
Pamatojoties uz Pinterest Ä«paÅ”ajÄm vajadzÄ«bÄm, esam izstrÄdÄjuÅ”i Å”Ädus CRD, lai tie atbilstu dažÄdÄm darbplÅ«smÄm:
- PinterestService ir bezvalstniecÄ«bas pakalpojumi, kas darbojas jau ilgu laiku. Daudzas no mÅ«su pamatsistÄmÄm ir balstÄ«tas uz Å”Ädu pakalpojumu kopumu.
- PinterestJobSet modelÄ pilna cikla pakeÅ”u darbus. IzplatÄ«ts scenÄrijs vietnÄ Pinterest ir tÄds, ka vairÄki darbi paralÄli darbina vienus un tos paÅ”us konteinerus neatkarÄ«gi no citiem lÄ«dzÄ«giem procesiem.
- PinterestCronJob tiek plaÅ”i izmantots kopÄ ar nelielÄm periodiskÄm slodzÄm. Å is ir iesaiÅojums vietÄjam cron darbam ar Pinterest atbalsta mehÄnismiem, kas ir atbildÄ«gi par droŔību, trafiku, žurnÄliem un metriku.
- PinterestDaemon ietver infrastruktÅ«ras dÄmonus. Å Ä« Ä£imene turpina pieaugt, jo mÄs pievienojam vairÄk atbalsta mÅ«su kopÄm.
- PinterestTrainingJob attiecas uz Tensorflow un Pytorch procesiem, nodroÅ”inot tÄdu paÅ”u izpildlaika atbalsta lÄ«meni kÄ visi citi CRD. TÄ kÄ Pinterest aktÄ«vi izmanto Tensorflow un citas maŔīnmÄcÄ«Å”anÄs sistÄmas, mums bija iemesls ap tÄm izveidot atseviŔķu CRD.
StrÄdÄjam arÄ« pie PinterestStatefulSet, kas drÄ«zumÄ tiks pielÄgots datu noliktavÄm un citÄm statusu sistÄmÄm.
Runtime atbalsts
Kad lietojumprogrammu komplekts darbojas Kubernetes, tas automÄtiski saÅem sertifikÄtu, lai identificÄtu sevi. Å is sertifikÄts tiek izmantots, lai piekļūtu slepenajai krÄtuvei vai sazinÄtos ar citiem pakalpojumiem, izmantojot mTLS. TikmÄr Container Init Configurator un Daemon lejupielÄdÄs visas nepiecieÅ”amÄs atkarÄ«bas pirms konteinerizÄtÄs lietojumprogrammas palaiÅ”anas. Kad viss bÅ«s gatavs, satiksmes blakusvÄÄ£is un Daemon reÄ£istrÄs moduļa IP adresi mÅ«su Zookeeper, lai klienti varÄtu to atklÄt. Tas viss darbosies, jo tÄ«kla modulis tika konfigurÄts pirms lietojumprogrammas palaiÅ”anas.
IepriekÅ” minÄtie ir tipiski izpildlaika atbalsta piemÄri darba slodzÄm. Citu veidu darba slodzÄm var bÅ«t nepiecieÅ”ams nedaudz atŔķirÄ«gs atbalsts, taÄu tie visi tiek piedÄvÄti pod lÄ«meÅa blakusvÄÄ£u, mezgla lÄ«meÅa vai virtuÄlÄs maŔīnas lÄ«meÅa dÄmonu veidÄ. MÄs nodroÅ”inÄm, ka tas viss tiek izvietots pÄrvaldÄ«bas infrastruktÅ«rÄ un ir konsekvents visÄs lietojumprogrammÄs, kas galu galÄ ievÄrojami samazina tehniskÄ darba un klientu atbalsta slogu.
TestÄÅ”ana un kvalitÄtes nodroÅ”inÄÅ”ana
Esamajai Kubernetes testÄÅ”anas infrastruktÅ«rai mÄs izveidojÄm pilnÄ«gu testa cauruļvadu. Å ie testi attiecas uz visÄm mÅ«su kopÄm. MÅ«su konveijeram tika veiktas daudzas pÄrskatÄ«Å”anas, pirms tas kļuva par daļu no produktu kopas.
Papildus testÄÅ”anas sistÄmÄm mums ir uzraudzÄ«bas un trauksmes sistÄmas, kas pastÄvÄ«gi uzrauga sistÄmas komponentu stÄvokli, resursu patÄriÅu un citus svarÄ«gus rÄdÄ«tÄjus, informÄjot mÅ«s tikai tad, kad nepiecieÅ”ama cilvÄka iejaukÅ”anÄs.
Alternatīvas
MÄs apskatÄ«jÄm dažas pielÄgoto resursu alternatÄ«vas, piemÄram, mutÄciju piekļuves kontrolierus un veidÅu sistÄmas. TomÄr tie visi ir saistÄ«ti ar ievÄrojamiem darbÄ«bas izaicinÄjumiem, tÄpÄc mÄs izvÄlÄjÄmies CRD ceļu.
MutÄcijas piekļuves kontrolieris tika izmantots, lai ieviestu blakusvÄÄ£us, vides mainÄ«gos un citu izpildlaika atbalstu. TomÄr tÄ saskÄrÄs ar dažÄdÄm problÄmÄm, piemÄram, resursu piesaisti un dzÄ«ves cikla pÄrvaldÄ«bu, kur Å”Ädas problÄmas KPD nerodas.
PiezÄ«me: VeidÅu sistÄmas, piemÄram, Helm diagrammas, tiek plaÅ”i izmantotas, lai palaistu lietojumprogrammas ar lÄ«dzÄ«gu konfigurÄciju. TomÄr mÅ«su darba lietojumprogrammas ir pÄrÄk daudzveidÄ«gas, lai tÄs pÄrvaldÄ«tu, izmantojot veidnes. ArÄ« nepÄrtrauktas izvietoÅ”anas laikÄ, izmantojot veidnes, bÅ«s pÄrÄk daudz kļūdu.
GaidÄmais darbs
PaÅ”laik mÄs saskaramies ar jauktu slodzi visÄs mÅ«su kopÄs. Lai atbalstÄ«tu Å”Ädus dažÄda veida un lieluma procesus, mÄs strÄdÄjam Å”ÄdÄs jomÄs:
- Klasteru kolekcija izplata lielas lietojumprogrammas dažÄdos klasteros, lai nodroÅ”inÄtu mÄrogojamÄ«bu un stabilitÄti.
- Klasteru stabilitÄtes, mÄrogojamÄ«bas un redzamÄ«bas nodroÅ”inÄÅ”ana, lai izveidotu lietojumprogrammu savienojamÄ«bu un SLA.
- Resursu un kvotu pÄrvaldÄ«Å”ana, lai lietojumprogrammas nebÅ«tu pretrunÄ viena otrai, un klastera mÄrogs tiek kontrolÄts no mÅ«su puses.
- Jauna CI/CD platforma lietojumprogrammu atbalstam un izvietoŔanai Kubernetes.
Avots: www.habr.com