Að búa til kubernetes vettvang á Pinterest

Í gegnum árin hafa 300 milljónir notenda Pinterest búið til meira en 200 milljarða pinna á meira en 4 milljarða borðum. Til að þjóna þessum her notenda og víðfeðma efnisgrunni hefur vefgáttin þróað þúsundir þjónustu, allt frá örþjónustu sem hægt er að sinna af nokkrum örgjörvum, til risastórra einliða sem keyra á heilum flota sýndarvéla. Og svo kom sú stund að augnaráð félagsins féll á k8s. Af hverju leit „teningurinn“ vel út á Pinterest? Þú munt læra um þetta af þýðingu okkar á nýlegri grein frá blogg Pinterest verkfræði.

Að búa til kubernetes vettvang á Pinterest

Svo, hundruð milljóna notenda og hundruð milljarða pinna. Til að þjóna þessum her notenda og víðfeðma efnisgrunni höfum við þróað þúsundir þjónustu, allt frá örþjónustu sem hægt er að sinna af nokkrum örgjörvum, til risastórra einliða sem keyra á heilum flotum sýndarvéla. Að auki höfum við margs konar ramma sem gætu einnig krafist örgjörva, minnis eða I/O aðgangs.

Við að viðhalda þessum dýragarði verkfæra stendur þróunarteymið frammi fyrir ýmsum áskorunum:

  • Það er engin samræmd leið fyrir verkfræðinga til að reka framleiðsluumhverfi. Ríkisfangslaus þjónusta, Stateful þjónusta og verkefni í virkri þróun byggja á allt öðrum tæknistöflum. Þetta leiddi til þess að búið var að búa til heilt þjálfunarnámskeið fyrir verkfræðinga og flækir einnig verulega vinnu innviðateymisins okkar.
  • Hönnuðir með eigin flota sýndarvéla leggja mikla byrði á innri stjórnendur. Þess vegna taka svo einfaldar aðgerðir eins og að uppfæra stýrikerfið eða AMI vikur og mánuði. Þetta leiðir til aukins vinnuálags í að því er virðist algerlega hversdagslegum aðstæðum.
  • Erfiðleikar við að búa til alþjóðleg innviðastjórnunartæki ofan á núverandi lausnir. Staðan er enn flóknari vegna þess að það er ekki auðvelt að finna eigendur sýndarvéla. Það er að segja, við vitum ekki hvort hægt sé að vinna þessa getu á öruggan hátt til að starfa í öðrum hlutum innviða okkar.

Gámaskipunarkerfi eru leið til að sameina vinnuálagsstjórnun. Þær opna dyrnar að auknum þróunarhraða og einfalda innviðastjórnun, þar sem öllum auðlindum sem taka þátt í verkefninu er stjórnað af einu miðstýrðu kerfi.

Að búa til kubernetes vettvang á Pinterest

Mynd 1: Forgangsröðun innviða (áreiðanleiki, framleiðni þróunaraðila og skilvirkni).

Cloud Management Platform teymið hjá Pinterest uppgötvaði K8s árið 2017. Á fyrri hluta ársins 2017 höfðum við skráð flestar framleiðslugetu okkar, þar á meðal API og alla vefþjóna okkar. Í kjölfarið gerðum við ítarlega úttekt á ýmsum kerfum til að skipuleggja gámalausnir, byggja klasa og vinna með þá. Undir lok árs 2017 ákváðum við að nota Kubernetes. Það var nokkuð sveigjanlegt og studd víða í þróunarsamfélaginu.

Hingað til höfum við smíðað okkar eigin ræsitæki fyrir klasa byggt á Kops og flutt núverandi innviðaíhluti eins og netkerfi, öryggi, mælingar, skráningu, auðkennisstjórnun og umferð til Kubernetes. Við innleiddum líka vinnuálagslíkanakerfi fyrir auðlindina okkar, en flókið þess er falið þróunaraðilum. Nú erum við að einbeita okkur að því að tryggja stöðugleika klasans, stækka hann og tengja nýja viðskiptavini.

Kubernetes: Pinterest leiðin

Að byrja með Kubernetes á mælikvarða Pinterest sem vettvang sem verkfræðingar okkar myndu elska fylgdi mörgum áskorunum.

Sem stórt fyrirtæki höfum við fjárfest mikið í innviðaverkfærum. Sem dæmi má nefna öryggisverkfæri sem sjá um vinnslu vottorða og lykladreifingu, umferðarstýringaríhluti, þjónustuuppgötvunarkerfi, sýnileikahluta og íhluti fyrir sendingu annála og mælinga. Allt þetta var safnað af ástæðu: við fórum í gegnum venjulega braut prufa og villu og þess vegna vildum við samþætta allan þennan búnað í nýju innviðina á Kubernetes í stað þess að finna upp gamla hjólið á nýjan vettvang. Þessi nálgun einfaldaði flutninginn í heild, þar sem allur stuðningur við forrit er þegar til staðar og þarf ekki að búa til frá grunni.

Á hinn bóginn duga álagsspárlíkönin í Kubernetes sjálfu (svo sem dreifing, störf og púkasett) ekki fyrir verkefnið okkar. Þessi notagildisvandamál eru gríðarlegar hindranir fyrir því að flytja til Kubernetes. Til dæmis höfum við heyrt þjónustuframleiðendur kvarta yfir vantandi eða röngum innskráningarstillingum. Við lentum líka í rangri notkun á sniðmátsvélum þegar hundruð eintaka voru búin til með sömu forskrift og verkefni, sem leiddi til martraðarkembiforrita.

Það var líka mjög erfitt að viðhalda mismunandi útgáfum í sama klasanum. Ímyndaðu þér hversu flókið þjónustuver er ef þú þarft að vinna samtímis í mörgum útgáfum af sama keyrsluumhverfi, með öllum vandamálum þeirra, villum og uppfærslum.

Pinterest notendaeiginleikar og stýringar

Til að auðvelda verkfræðingum okkar að innleiða Kubernetes, og til að einfalda og flýta fyrir innviðum okkar, höfum við þróað okkar eigin sérsniðnar auðlindaskilgreiningar (CRD).

CRD veitir eftirfarandi virkni:

  1. Að sameina mismunandi innfædd Kubernetes tilföng þannig að þau virki sem eitt vinnuálag. Til dæmis inniheldur PinterestService tilföngin dreifing, innskráningarþjónustu og stillingarkort. Þetta gerir forriturum kleift að hafa ekki áhyggjur af því að setja upp DNS.
  2. Innleiða nauðsynlegan umsóknarstuðning. Notandinn þarf aðeins að einbeita sér að gámaforskriftinni í samræmi við viðskiptarökfræði sína, á meðan CRD stjórnandi útfærir alla nauðsynlega init gáma, umhverfisbreytur og belgforskriftir. Þetta veitir í grundvallaratriðum mismunandi þægindi fyrir þróunaraðila.
  3. CRD stýringar stjórna einnig líftíma innfæddra auðlinda og bæta kembiforrit. Þetta felur í sér að samræma æskilegar og raunverulegar forskriftir, uppfæra CRD stöðu og viðhalda atburðaskrám og fleira. Án CRD myndu verktaki neyðast til að stjórna mörgum auðlindum, sem myndi aðeins auka líkurnar á mistökum.

Hér er dæmi um PinterestService og innri auðlind sem stjórnandi okkar stjórnar:

Að búa til kubernetes vettvang á Pinterest

Eins og þú sérð hér að ofan, til að styðja við sérsniðna gám þurfum við að samþætta init gám og nokkrar viðbætur til að veita öryggi, sýnileika og netumferð. Að auki bjuggum við til stillingarkortasniðmát og innleiddum stuðning fyrir PVC sniðmát fyrir lotustörf, auk þess að fylgjast með mörgum umhverfisbreytum til að fylgjast með auðkenni, auðlindanotkun og sorphirðu.

Það er erfitt að ímynda sér að forritarar myndu vilja skrifa þessar stillingarskrár í höndunum án CRD stuðning, hvað þá frekar viðhalda og kemba stillingarnar.

Verkflæði forritadreifingar

Að búa til kubernetes vettvang á Pinterest

Myndin hér að ofan sýnir hvernig á að dreifa sérsniðnu Pinterest tilfangi í Kubernetes þyrping:

  1. Hönnuðir hafa samskipti við Kubernetes klasann okkar í gegnum CLI og notendaviðmótið.
  2. CLI/UI verkfærin sækja verkflæðisstillingar YAML skrár og aðra byggingareiginleika (sama útgáfuauðkenni) frá Artifactory og senda þær síðan til vinnuskilaþjónustunnar. Þetta skref tryggir að aðeins framleiðsluútgáfur séu afhentar í klasann.
  3. JSS er gátt fyrir ýmsa palla, þar á meðal Kubernetes. Hér er notandinn auðkenndur, kvótar eru gefnir út og uppsetning CRD okkar er að hluta athuguð.
  4. Eftir að hafa athugað CRD á JSS hliðinni eru upplýsingarnar sendar til k8s vettvangs API.
  5. CRD stjórnandi okkar fylgist með atburðum á öllum notendaauðlindum. Það breytir CRs í innfædd k8s auðlindir, bætir við nauðsynlegum einingum, setur viðeigandi umhverfisbreytur og framkvæmir aðra stuðningsvinnu til að tryggja að notendaforrit í gámum hafi nægan stuðning við innviði.
  6. CRD stjórnandi sendir síðan mótteknum gögnum til Kubernetes API svo hægt sé að vinna úr þeim af tímaáætlunarmanninum og setja í framleiðslu.

Athugið: Þetta forútgáfu vinnuflæði dreifingarinnar var búið til fyrir fyrstu notendur nýja k8s vettvangsins. Við erum núna í því ferli að betrumbæta þetta ferli til að fullkomlega samþættast við nýja CI/CD okkar. Þetta þýðir að við getum ekki sagt þér allt sem tengist Kubernetes. Við hlökkum til að deila reynslu okkar og framförum liðsins í þessa átt í næstu bloggfærslu okkar, „Að byggja upp CI/CD vettvang fyrir Pinterest.

Tegundir sérstakra auðlinda

Byggt á sérstökum þörfum Pinterest höfum við þróað eftirfarandi CRD til að henta mismunandi verkflæði:

  • PinterestService eru ríkisfangslaus þjónusta sem hefur verið í gangi í langan tíma. Mörg kjarnakerfa okkar eru byggð á safni slíkrar þjónustu.
  • PinterestJobSet líkan af heildarlotuvinnu. Algeng atburðarás á Pinterest er að mörg störf keyra sömu gámana samhliða, óháð öðrum svipuðum ferlum.
  • PinterestCronJob er mikið notað í tengslum við lítið reglubundið álag. Þetta er umbúðir fyrir innfædda cron vinnu með Pinterest stuðningskerfi sem bera ábyrgð á öryggi, umferð, annálum og mæligildum.
  • PinterestDaemon inniheldur innviði Daemons. Þessi fjölskylda heldur áfram að stækka eftir því sem við bætum meiri stuðningi við klasana okkar.
  • PinterestTrainingJob nær til Tensorflow og Pytorch ferla, sem veitir sama stuðning við keyrslutíma og öll önnur CRD. Þar sem Pinterest notar Tensorflow og önnur vélanámskerfi virkan, höfðum við ástæðu til að byggja sérstakt CRD utan um þau.

Við erum líka að vinna að PinterestStatefulSet, sem verður brátt aðlagað fyrir gagnageymslur og önnur kerfisbundin kerfi.

Stuðningur við keyrslutíma

Þegar forritahólf keyrir á Kubernetes fær það sjálfkrafa vottorð til að auðkenna sig. Þetta vottorð er notað til að fá aðgang að leynilegri geymslu eða til að hafa samskipti við aðra þjónustu í gegnum mTLS. Á sama tíma munu Container Init Configurator og Daemon hlaða niður öllum nauðsynlegum ósjálfstæðum áður en gámaforritið er keyrt. Þegar allt er tilbúið munu umferðarhliðarvagninn og púkinn skrá IP tölu einingarinnar hjá dýravörðum okkar svo viðskiptavinir geti uppgötvað það. Allt þetta mun virka vegna þess að neteiningin var stillt áður en forritið var ræst.

Ofangreind eru dæmigerð dæmi um stuðning við keyrslutíma fyrir vinnuálag. Aðrar gerðir vinnuálags gætu þurft aðeins annan stuðning, en þær koma allar í formi hliðarvagna á belgstigi, hnútastigs eða sýndarvélastigs púka. Við tryggjum að allt þetta sé innleitt innan stjórnunarinnviðanna og sé í samræmi í öllum forritum, sem á endanum dregur verulega úr álagi hvað varðar tæknilega vinnu og þjónustu við viðskiptavini.

Prófanir og QA

Við byggðum prófunarleiðslu frá enda til enda ofan á núverandi Kubernetes prófunarinnviði. Þessar prófanir eiga við um alla klasa okkar. Leiðsla okkar fór í gegnum margar endurskoðun áður en hún varð hluti af vöruklasanum.

Auk prófunarkerfa höfum við vöktunar- og viðvörunarkerfi sem fylgjast stöðugt með stöðu kerfishluta, auðlindanotkun og öðrum mikilvægum vísbendingum og láta okkur aðeins vita þegar mannleg afskipti eru nauðsynleg.

Valkostir

Við skoðuðum nokkra valkosti við sérsniðnar auðlindir, svo sem stökkbreytingaraðgangsstýringar og sniðmátkerfi. Hins vegar fylgja þeim öllum verulegar rekstrarlegar áskoranir, svo við völdum CRD leiðina.

Stökkbreytingaraðgangsstýribúnaður var notaður til að kynna hliðarvagna, umhverfisbreytur og annan keyrslustuðning. Hins vegar stóð hún frammi fyrir ýmsum vandamálum, svo sem auðlindabindingu og líftímastjórnun, þar sem slík vandamál koma ekki upp í CRD.

Ath: Sniðmátkerfi eins og Helm töflur eru einnig mikið notuð til að keyra forrit með svipaðar uppsetningar. Hins vegar eru vinnuforritin okkar of fjölbreytt til að hægt sé að stjórna þeim með sniðmátum. Einnig við stöðuga dreifingu verða of margar villur þegar sniðmát eru notuð.

Framundan vinna

Núna erum við að glíma við blönduð álag á alla klasana okkar. Til að styðja við slík ferli af mismunandi gerðum og stærðum, vinnum við á eftirfarandi sviðum:

  • Safn klasa dreifir stórum forritum yfir mismunandi klasa fyrir sveigjanleika og stöðugleika.
  • Að tryggja klasastöðugleika, sveigjanleika og sýnileika til að búa til forritatengingar og SLAs.
  • Að halda utan um auðlindir og kvóta þannig að umsóknir stangist ekki á og umfang klasans sé stjórnað af okkar hálfu.
  • Nýr CI/CD vettvangur til að styðja og dreifa forritum á Kubernetes.

Heimild: www.habr.com

Bæta við athugasemd