Loome Pinterestis kubernetes platvormi

Pinterest on eksisteerimise aastatel on 300 miljonit kasutajat loonud üle 200 miljardi pinni rohkem kui 4 miljardi tahvli peale. Selle kasutajaarmee ja ulatusliku sisupõhja teenindamiseks on portaal välja töötanud tuhandeid teenuseid, alates mikroteenustest, millega saavad hakkama mõned CPU-d, kuni hiiglaslike monoliitideni, mis töötavad kogu virtuaalmasinate pargis. Ja nüüd on aeg jätta tähelepanu k8s-ile. Miks meeldib 'kuubik' Pinterestile? Selle kohta saad rohkem teada meie värskest tõlkest Pinterest engeneeringu blogist.

Loome Pinterestis kubernetes platvormi

Nii et sajad miljonid kasutajad ja sajad miljardid pinnid. Selle kasutajaarmee ja ulatusliku sisupõhja teenindamiseks oleme välja töötanud tuhandeid teenuseid, alates mikroteenustest, millega saavad hakkama mõned CPU-d, kuni hiiglaslike monoliitideni, mis töötavad terve virtuaalmasinate pargis. Lisaks on meil mitmesuguseid raamistikke, mis võivad samuti vajada CPU, mälu või sisend-väljundi operatsioonide ressursse.

Selles tööriistade loomise toetamisel seisab arendustiim silmitsi mitmete probleemidega:

  • Inseneridel puudub ühtne viis töökeskkonna käivitamiseks. Stateless-teenused, Stateful-teenused ja aktiivselt arenduses olevad projektid põhinevad absoluutselt erinevatel tehnoloogilistel alustel. See on viinud tervikliku koolituskursuse loomisele inseneridele ning teeb meie infrastruktuuri meeskonna töö tõsiselt keerulisemaks.
  • Arendajad, kelle käsutuses on oma virtuaalmasinate park, tekitavad sisemistele administraatoritele tohutut koormust. Seetõttu venivad isegi nii lihtsad toimingud nagu operatsioonisüsteemi või AMI värskendamine nädalateks ja kuudeks. See suurendab koormust näiliselt täiesti tavalistes olukordades.
  • Raskused globaalsete infrastruktuuri haldustööriistade loomisel juba olemasolevate lahenduste peale. Olukorda keerustab ka see, et virtuaalmasinate omanike leidmine pole kerge. Teisisõnu, me ei tea, kas on ohutu need ressursid teistele meie infrastruktuuri osadele tööks eraldada.

Konteinerite orkestreerimissüsteemid on viis töökoormuse haldamise ühtlustamiseks. Need avavad teile võimaluse kiirendada arendust ja lihtsustada infrastruktuuri haldamist, kuna kõik projekti kaasatud ressursid haldavad terviklikult üks kesksüsteem.

Loome Pinterestis kubernetes platvormi

Joonis 1: Infrastruktuuri prioriteedid (usaldusväärsus, arendajate efektiivsus ja tulemuslikkus).

Pinterest Cloud Management Platform'i meeskond tutvus K8s-iga 2017. aastal. 2017. aasta esimese poole lõpuks dokumenteerisime suurema osa meie tootmisvõimsusest, sealhulgas API-d ja kõik meie veebiserverid. Pärast seda tegime põhjaliku hindamise erinevate konteinerite orkestreerimissüsteemide, klastrite loomise ja haldamise osas. 2017. aasta lõpuks otsustasime kasutada Kuberneteset. See oli piisavalt paindlik ning laialt toetatud arendajate kogukonnas.

Praegu oleme loonud omaette klastrite alglaadimise tööriistad Kopsi põhjal ning viinud olemasolevad infrastruktuuri komponendid Kubernetesesse — nagu võrk, turvalisus, mõõdikud, logimine, identiteedi haldamine ja liiklus. Samuti oleme rakendanud töökoormuse modelleerimise süsteemi, mille keerukus on arendajate eest varjatud. Praegu keskendume klastrite stabiilsuse tagamisele, nende skaleerimisele ja uute klientide ühendamisele.

Kubernetes: Pinterest'i tee

Kubernetesega alustamine Pinterestis kui platvormiga, mis meie inseneridele meeldib, on olnud täis mitmeid raskusi.

Suur ettevõttena oleme investeerinud märkimisväärseid summasid infrastruktuuri tööriistadesse. Näiteks võib tuua turvatööriistad, mis töötlevad sertifikaate ja jagavad võtmeid, liikluse kontrolli komponente, teenuste tuvastamise süsteeme, nähtavuse ning logide ja mõõdikute saatmise komponente. Kõik see ei tulnud iseenesest: oleme läbinud normaalse katsetuste ja vigade tee ja seetõttu soovisime integreerida kõik need tööriistad uude infrastruktuuri Kubernetesel, selle asemel et leiutada vana jalgratast uuel platvormil. Selline lähenemine lihtsustas migratsiooni, kuna kõik rakenduste tugikomponendid on juba olemas ja neid ei pea nullist looma.

Teisest küljest ei piisa meie projekti jaoks Kubernetes'i koormuse prognoosimismudelitest (nt juurutused, ülesanded ja Daemon'i kogud). Need kasutusmugavuse probleemid on tohutud takistused üleminekul Kubernetes'ile. Näiteks oleme kuulnud, kuidas teenuse arendajad kurdavad sisselogimise puudumise või vale seadistuse üle. Samuti oleme kokku puutunud vale voogudehaldusega, kus loodi sadu koopiaid sama spetsifikatsiooni ja ülesandega, mis viis kohutavate silumisprobleemideni.

Samuti oli väga keeruline toetada erinevaid versioone samas klastris. Kujutage ette klienditoe keerukust, kui peate tööle hakkama mitme sama jooksukeskkonna versiooniga, koos kõigi nende probleemide, vigade ja värskendustega.

Pinterest'i kohandatud ressursid ja kontrollerid

Kuna meie inseneride jaoks on Kubernetes'e juurutamise protsessi lihtsustamine ning infrastruktuuri lihtsustamine ja kiiruselise tõhustamine vajalik, oleme välja töötanud oma kohandatud ressursside määratlemise (CRD).

CRD pakuvad järgmisi funktsionaalsusi:

  1. Kubernetes'i erinevate natiivsete ressursside ühendamine, et need töötaksid ühtse koormusena. Näiteks PinterestService'i ressurss sisaldab juurutamist, sisenemisteenust ja konfiguratsioonikaarti. See võimaldab arendajatel mitte muretseda DNS-i seadistamise pärast.
  2. Kohustuslik rakenduste toe rakendamine. Kasutaja peab keskenduma ainult konteineri spetsifikatsioonile vastavalt oma äri loogikale, samas kui CRD kontroller rakendab kõik vajalikud init-konteinerid, keskkonnamuutujad ja pod'i spetsifikatsioonid. See tagab arendajatele oluliselt kõrgema mugavuse taseme.
  3. CRD kontrollivad ka oma ressursside elutsüklit ja suurendavad tõrkeotsingu kättesaadavust. See hõlmab soovitud ja tegelike spetsifikatsioonide ühtsemist, CRD oleku värskendamist ja sündmuste logimist ning palju muud. Ilma CRD-ta oleks arendajad sunnitud haldama arvukalt ressursse, mis tõstaks vaid vigade tekkimise tõenäosust.

Siin on näide PinterestService'ist ja sisemisest ressursist, mida haldab meie kontroller:

Loome Pinterestis kubernetes platvormi

Nagu eespool mainitud, nõuab kasutajakonteineri toetamine meie enda konteinerite integreerimist, algatuste ja mitmete lisade integreerimist, et tagada turvalisus, nähtavus ja võrgu liikluse haldamine. Samuti oleme loonud konfiguratsioonikaardimalli ja rakendanud PVC mallide toetust tööde paketidena ning jälgimise mitme keskkonnamuutuja jälgimiseks, et jälgida identiteeti, ressursside kasutamist ja 'prügi' kogumist.

On raske ette kujutada, et arendajad sooviksid neid konfiguratsioonifailide käsitsi kirjutada ilma CRD toeta, rääkimata konfiguratsioonide edasistest toetustest ja silumisest.

Rakenduste juurutamise töövoog

Loome Pinterestis kubernetes platvormi

Eespooltoodud joonisel on näidatud, kuidas juurutada kohandatud Pinterest-i ressurssi Kubernetes-i klastri:

  1. Arendajad suhtlevad meie Kubernetes-i klastri CLI ja kasutajaliidese kaudu.
  2. CLI / UI tööriistad tõmbavad töövoo YAML konfiguratsiooni faile ja teisi ehitusomadusi (sama versiooni ID) Artifactory-st, seejärel edastavad need need Job Submission Service'isse. See samm tagab, et klassi jõuavad ainult töökorras versioonid.
  3. JSS on sild erinevate platvormide jaoks, sealhulgas Kubernetes. Siin toimub kasutaja autentimine, kvootide väljaandmine ja osaline meie CRD konfiguratsiooni kontroll.
  4. Pärast CRD kontrollimist JSS-i poole teave saadetakse k8s platvormi API-le.
  5. Meie CRD-kontroller jälgib sündmusi kõigis kasutajaresurssides. Ta muundab CR-i natiivseteks k8s ressurssideks, lisab vajalikud moodulid, seadistab vastavad keskkonnamuutujad ja täidab muid abitegevusi, tagades seeläbi konteineripõhiste kasutajarakenduste piisava infrastruktuuri toetuse.
  6. Seejärel edastab CRD-kontroller saadud andmed Kubernetes API-le, et need saaksid olema planeerija poolt töödeldud ja tööle pandud.

Märkus: see, etapi pre-release rakenduse joonis on loodud uue k8s platvormi esmastele kasutajatele. Praegu töötame selle protsessi täiustamise kallal, et täielikult integreerida meie uuega CI/CD. See tähendab, et me ei saa rääkida kõigest, mis on seotud Kubernetes'ega. Ootame põnevusega võimalust jagada oma kogemusi ja rääkida meie meeskonna edusammudest selles valdkonnas meie järgmises blogipostituses 'CI/CD platvormi ehitamine Pinterestile'.

Eriressursside tüübid

Vastavalt Pinterest'i konkreetsetele vajadustele oleme välja töötanud järgmised CRD-d, mis sobivad erinevate töövoogude jaoks:

  • PinterestService on juba pikka aega tegutsenud stateless-teenused. Paljud meie põhikoosused põhinevad selliste teenuste kogumil.
  • PinterestJobSet mudeldab täislaiuse partiide tööülesandeid. Pinterestis on tavaline stsenaarium, kus mitu tööülesannet käivitavad sama konteineri paralleelselt, olenemata teistest sarnastest protsessidest.
  • PinterestCronJob kasutatakse laialdaselt väikeste regulaarsete koormuste korral. See on rakendus, mis võimaldab kasutada cron'i koos Pinterest'i toe mehhanismidega, mis vastutavad turvalisuse, liikluse, logide ja mõõdikute eest.
  • PinterestDaemon hõlmab infrastruktuuri Daemoneid. See perekond kasvab pidevalt, kuna lisame üha rohkem tuge meie klastritele.
  • PinterestTrainingJob katab Tensorflow ja Pytorch protsessid, tagades sama toetuse taseme töö ajal nagu kõik teised CRD-d. Kuna Pinterest'is kasutatakse aktiivselt Tensorflow'd ja teisi masinõppe süsteeme, oli meil mõistlik luua nende ümber eraldi CRD.

Samuti töötame PinterestStatefulSet'i kallal, mis kohandatakse varsti andmesalvestuse ja teiste stateful süsteemide jaoks.

Töökorralduse toe pakkumine

Kuidas rakenduste moodul Kuberneteses käivitub, saab see automaatselt sertifikaadi enda identiteedi tuvastamiseks. Seda sertifikaati kasutatakse juurdepääsuks salajale salvestusruumile või suhtlemiseks teiste teenustega mTLS kaudu. Vahepeal laadivad konteinerite initsialiseerimise konfigureerija ja Daemon kõik vajalikud sõltuvused konteinerirakenduse käivitamiseks. Kui kõik on valmis, registreerivad sidecar liiklus ja Daemon mooduli IP-aadressi meie Zookeeperis, et kliendid saaksid seda avastada. Kõik see töötab nii, et võrgu moodul on seadistatud juba enne rakenduse käivitamist.

Ülaltoodud on tüüpilised näited töökoormuste toetamisest töötamise ajal. Muude töökoormuste jaoks võib olla vajalik veidi erinev tugi, kuid kõik need on esitatud pod-taseme sidecar'ide, sõlmede või virtuaalmasinate Daemon'ite abil. Me jälgime, et kõik see oleks rakendatud juhtimisinfrastruktuuri raames ja kooskõlas rakendustega, mis oluliselt vähendab tehniliste tööde ja klienditoe koormust.

Testimine ja QA

Oleme ehitanud end-to-end testimisprotsessi juba olemasoleva Kubernetes testimisinfra peale. Need testid katab kõik meie klastrid. Meie pipeline on läbinud mitmeid ümberkorraldusi, enne kui see sai tooteklusteri osaks.

Meie testimisüsteemide kõrval on olemas ka jälgimis- ja teavitamissüsteemid, mis pidevalt jälgivad süsteemi komponentide olekut, ressursikasutust ja muid olulisi näitajaid, teavitades meid vaid inimese müdlemise vajaduse korral.

Alternatiivid

Oleme kaalunud erinevaid võimalusi kohandatud ressurside jaoks, nagu mutatsioonikontrollerid ja mallisüsteemid. Kuid need on kaasnenud tõsiste töölepingutega, seetõttu valisime CRD tee.

Mutatsioonikontrollerit kasutati sidetükkide, keskkonnamuutujate ja muu toe toimetamiseks käitamise ajal. Kuid see seisis silmitsi erinevate probleemidega, näiteks ressursside sidumise ja nende elutsükli haldamise raskustega, mida CRD puhul ei esine.

Märkus: Mudel süsteemid, nagu Helm graafikud, kasutatakse laialdaselt sarnaste konfigureerimisega rakenduste käivitamiseks. Siiski on meie tööprotsessid liiga mitmekesised, et neid hallata mallide abil. Samuti tekib pideva juurutamise käigus mallide kasutamisel liiga palju vigu.

Tulevane töö

Praegu tegeleme segakotiga kõigis meie klastrites. Et toetada erineva tüübi ja suurusega protsesse, töötame järgmistes valdkondades:

  • Klastrite kogum jaotab suured rakendused erinevatesse klastritesse, et tagada skaleeritavus ja stabiilsus.
  • Tagame klastrite stabiilsuse, skaleeritavuse ja nähtavuse, et luua ühendus rakenduse ja selle SLA vahel.
  • Ressursside ja kvootide haldamine, et rakendused ei läheks omavahel kokku ning klastrit saaks meie poolt kontrollida.
  • Uus CI/CD platvorm rakenduste toetamiseks ja juurutamiseks Kuberneteses.

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster