Kubernetes platformas izveide vietnē Pinterest

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 emuārs Pinterest inženierija.

Kubernetes platformas izveide vietnē Pinterest

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.

Kubernetes platformas izveide vietnē Pinterest

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:

  1. 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.
  2. 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.
  3. 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.

Kubernetes platformas izveide vietnē Pinterest

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

Kubernetes platformas izveide vietnē Pinterest

AugŔējā attēlā parādÄ«ts, kā Kubernetes klasterÄ« izvietot pielāgotu Pinterest resursu:

  1. Izstrādātāji mijiedarbojas ar mūsu Kubernetes klasteru, izmantojot CLI un lietotāja interfeisu.
  2. 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.
  3. 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.
  4. Pēc CRD pārbaudes JSS pusē informācija tiek nosūtīta uz k8s platformas API.
  5. 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.
  6. 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

Pievieno komentāru