Erstellt eng kubernetes Plattform op Pinterest

Iwwer d'Joren hunn Pinterest 300 Millioune Benotzer méi wéi 200 Milliarde Pins op méi wéi 4 Milliarde Boards erstallt. Fir dës Arméi vu Benotzer an enger grousser Inhaltsbasis ze déngen, huet de Portal Dausende vu Servicer entwéckelt, rangéiert vu Mikroservicer, déi vun e puer CPUs gehandhabt kënne ginn, bis rieseg Monolithen, déi op enger ganzer Flott vu virtuelle Maschinnen lafen. An dunn ass de Moment komm, wou d'Ae vun der Firma op k8s gefall sinn. Firwat huet de "Würfel" gutt op Pinterest ausgesinn? Dir wäert iwwer dëst vun eiser Iwwersetzung vun engem rezenten Artikel léieren aus blog Pinterest engineering.

Erstellt eng kubernetes Plattform op Pinterest

Also, Honnerte vu Millioune Benotzer an Honnerte vu Milliarden Pins. Fir dës Arméi vu Benotzer a grousser Inhaltsbasis ze déngen, hu mir Dausende vu Servicer entwéckelt, rangéiert vu Mikroservicer, déi vun e puer CPUs gehandhabt kënne ginn, bis rieseg Monolithen, déi op ganz Flotte vu virtuelle Maschinnen lafen. Zousätzlech hu mir eng Vielfalt vu Kaderen déi och CPU, Erënnerung oder I/O Zougang erfuerderen.

Beim Erhalen vun dësem Zoo vun Tools stellt d'Entwécklungsteam eng Rei Erausfuerderunge vir:

  • Et gëtt keen eenheetleche Wee fir Ingenieuren e Produktiounsëmfeld ze bedreiwen. Stateless Servicer, Stateful Servicer a Projeten ënner aktiver Entwécklung baséieren op komplett verschidden Technologiestapelen. Dëst huet zu der Schafung vun enger ganzer Formatioun fir Ingenieuren gefouert, an och d'Aarbecht vun eisem Infrastrukturteam eescht komplizéiert.
  • Entwéckler mat hirer eegener Flott vu virtuelle Maschinnen kreéieren eng grouss Belaaschtung fir intern Administrateuren. Als Resultat daueren sou einfach Operatiounen wéi d'Aktualiséierung vum OS oder AMI Wochen a Méint. Dëst féiert zu enger verstäerkter Aarbechtsbelaaschtung an anscheinend absolut alldeegleche Situatiounen.
  • Schwieregkeeten beim Schafe vun globalen Infrastrukturmanagement Tools uewen op existente Léisungen. D'Situatioun ass weider komplizéiert vun der Tatsaach datt d'Besëtzer vu virtuelle Maschinnen net einfach ass. Dat heescht, mir wësse net ob dës Kapazitéit sécher erausgeholl ka ginn fir an aneren Deeler vun eiser Infrastruktur ze bedreiwen.

Container Orchestratiounssystemer sinn e Wee fir d'Aarbechtslaaschtmanagement ze vereenegen. Si maachen d'Dier op fir erhéicht Entwécklungsgeschwindegkeet an vereinfachen d'Infrastrukturverwaltung, well all Ressourcen, déi am Projet involvéiert sinn, vun engem zentraliséierte System geréiert ginn.

Erstellt eng kubernetes Plattform op Pinterest

Figur 1: Infrastruktur Prioritéiten (Zouverlässegkeet, Entwéckler Produktivitéit, an Effizienz).

D'Cloud Management Plattform Team bei Pinterest entdeckt K8s am 2017. Vun der éischter Halschent vum 2017 hu mir déi meescht vun eise Produktiounsfäegkeeten dokumentéiert, dorënner d'API an all eise Webserver. Duerno hu mir eng grëndlech Bewäertung vu verschiddene Systemer gemaach fir Containerléisungen ze orchestréieren, Cluster ze bauen a mat hinnen ze schaffen. Géint Enn 2017 hu mir beschloss Kubernetes ze benotzen. Et war zimmlech flexibel a wäit an der Entwécklergemeinschaft ënnerstëtzt.

Bis haut hu mir eis eege Clusterboot-Tools baséiert op Kops gebaut an existéierend Infrastrukturkomponente wéi Netzwierk, Sécherheet, Metriken, Logbicher, Identitéitsmanagement a Verkéier op Kubernetes migréiert. Mir hunn och e Workload Modelléierungssystem fir eis Ressource implementéiert, d'Komplexitéit vun deem ass vun den Entwéckler verstoppt. Elo konzentréiere mir eis op d'Stabilitéit vum Cluster ze garantéieren, et ze skaléieren an nei Clienten ze verbannen.

Kubernetes: The Pinterest Way

Ugefaang mat Kubernetes op der Skala vu Pinterest als Plattform déi eis Ingenieuren gär hätten, koum mat villen Erausfuerderungen.

Als grouss Firma hu mir vill an Infrastruktur Tools investéiert. Beispiller enthalen Sécherheetsinstrumenter déi d'Zertifikaveraarbechtung a Schlësselverdeelung handhaben, Verkéierskontrollkomponenten, Service Entdeckungssystemer, Visibilitéitskomponenten, a Log- a Metrikverschéckskomponenten. All dëst gouf fir e Grond gesammelt: mir sinn duerch den normale Wee vu Versuch a Feeler gaang, an dofir wollte mir all dës Ausrüstung an déi nei Infrastruktur op Kubernetes integréieren anstatt dat alt Rad op enger neier Plattform nei ze erfannen. Dës Approche huet insgesamt d'Migratioun vereinfacht, well all d'Applikatiounsunterstëtzung scho existéiert an net vun Null erstallt muss ginn.

Op der anerer Säit sinn d'Laaschtprevisiounsmodeller a Kubernetes selwer (wéi Deployementer, Aarbechtsplazen an Daemon Sets) net genuch fir eise Projet. Dës Usability Themen sinn enorm Barrièren fir op Kubernetes ze plënneren. Zum Beispill hu mir Service Entwéckler héieren iwwer fehlend oder falsch Login-Astellungen. Mir hunn och falsch Notzung vu Schablounmotoren begéint, wann Honnerte vu Kopien mat der selwechter Spezifizéierung an Aufgab erstallt goufen, wat zu Albtraum-Debugging-Problemer gefouert huet.

Et war och ganz schwéier verschidde Versiounen am selwechte Cluster z'erhalen. Stellt Iech d'Komplexitéit vun der Clientssupport vir wann Dir gläichzäiteg a verschidde Versioune vum selwechte Runtime-Ëmfeld muss schaffen, mat all hire Probleemer, Bugs an Updates.

Pinterest Benotzer Properties a Controller

Fir et méi einfach fir eis Ingenieuren ze maachen Kubernetes ëmzesetzen, an eis Infrastruktur ze vereinfachen an ze beschleunegen, hu mir eis eegen Custom Ressource Definitionen (CRDs) entwéckelt.

CRDs bidden déi folgend Funktionalitéit:

  1. Kombinéiert verschidde gebierteg Kubernetes Ressourcen sou datt se als eenzeg Aarbechtslaascht funktionnéieren. Zum Beispill enthält d'PinterestService Ressource en Deployment, e Login-Service an eng Konfiguratiounskaart. Dëst erlaabt d'Entwéckler sech keng Suergen iwwer DNS opzestellen.
  2. Ëmsetzen néideg Applikatioun Ënnerstëtzung. De Benotzer muss nëmmen op d'Container Spezifizéierung konzentréieren no hirer Geschäftslogik, während de CRD Controller all déi néideg Init Container, Ëmfeldvariablen a Pod Spezifikatioune implementéiert. Dëst bitt e grondsätzlechen aneren Niveau vu Komfort fir Entwéckler.
  3. CRD Controller verwalten och de Liewenszyklus vun gebiertege Ressourcen a verbesseren Debug Disponibilitéit. Dëst beinhalt d'Reconciliatioun vun gewënschten an aktuellen Spezifikatioune, Aktualiséierung vum CRD Status an Erhalen vun Eventprotokoller, a méi. Ouni CRD wäerten d'Entwéckler gezwongen sinn verschidde Ressourcen ze managen, wat nëmmen d'Wahrscheinlechkeet vu Feeler erhéijen.

Hei ass e Beispill vun engem PinterestService an eng intern Ressource déi vun eisem Controller geréiert gëtt:

Erstellt eng kubernetes Plattform op Pinterest

Wéi Dir uewen kënnt gesinn, fir e personaliséierte Container z'ënnerstëtzen, brauche mir en Init Container a verschidde Add-ons z'integréieren fir Sécherheet, Visibilitéit an Netzverkéier ze bidden. Zousätzlech hu mir Konfiguratiounskaart Templates erstallt an Ënnerstëtzung fir PVC Templates fir Batchjobs implementéiert, souwéi Tracking vu verschidde Ëmweltvariablen fir Identitéit, Ressourceverbrauch an Drecksammlung ze verfolgen.

Et ass schwéier virzestellen datt d'Entwéckler dës Konfiguratiounsdateien mat der Hand schreiwen wëllen ouni CRD Ënnerstëtzung, loosst eleng d'Konfiguratiounen erhalen an debuggen.

Applikatioun Deployment Workflow

Erstellt eng kubernetes Plattform op Pinterest

D'Bild hei uewen weist wéi een eng Pinterest personaliséiert Ressource an e Kubernetes Cluster ofsetzt:

  1. Entwéckler interagéieren mat eisem Kubernetes Cluster duerch d'CLI an d'Benotzerinterface.
  2. D'CLI / UI Tools recuperéieren d'Workflow Konfiguratioun YAML Dateien an aner Baueigenschaften (selwescht Versioun ID) vun Artifactory a stellen se dann un den Job Submission Service of. Dëse Schrëtt garantéiert datt nëmmen Produktiounsversioune an de Cluster geliwwert ginn.
  3. JSS ass e Paart fir verschidde Plattformen, dorënner Kubernetes. Hei gëtt de Benotzer authentifizéiert, Quoten ginn ausgestallt an d'Konfiguratioun vun eisem CRD gëtt deelweis iwwerpréift.
  4. Nodeems Dir de CRD op der JSS Säit kontrolléiert hutt, gëtt d'Informatioun un d'K8s Plattform API geschéckt.
  5. Eise CRD Controller iwwerwaacht Eventer op all Benotzerressourcen. Et konvertéiert CRs an gebierteg k8s Ressourcen, füügt déi néideg Moduler un, setzt déi entspriechend Ëmfeldvariablen a mécht aner Ënnerstëtzungsaarbechte fir ze garantéieren datt containeriséierte Benotzerapplikatiounen genuch Infrastruktur Ënnerstëtzung hunn.
  6. De CRD Controller passt dann déi kritt Donnéeën un d'Kubernetes API sou datt se vum Scheduler veraarbecht ginn an a Produktioun gesat ginn.

Remarque: Dëse Pre-Release Workflow vun der Deployment gouf fir déi éischt Benotzer vun der neier k8s Plattform erstallt. Mir sinn amgaang dëse Prozess ze verfeineren fir voll mat eisem neien CI/CD ze integréieren. Dëst bedeit datt mir Iech net alles kënne soen am Zesummenhang mat Kubernetes. Mir freeën eis eis Erfahrung an de Fortschrëtt vum Team an dëser Richtung an eisem nächste Blog Post ze deelen, "Eng CI / CD Plattform fir Pinterest bauen."

Zorte vu spezielle Ressourcen

Baséierend op de spezifesche Bedierfnesser vun Pinterest, hu mir déi folgend CRDs entwéckelt fir verschidde Workflows ze passen:

  • PinterestService sinn stateless Servicer déi scho laang lafen. Vill vun eise Kärsystemer baséieren op enger Rei vu sou Servicer.
  • PinterestJobSet Modeller voll Zyklus Batch Jobs. E gemeinsame Szenario op Pinterest ass datt verschidde Jobs déiselwecht Container parallel lafen, onofhängeg vun aneren ähnlechen Prozesser.
  • PinterestCronJob gëtt wäit benotzt a Verbindung mat klenge periodesche Lasten. Dëst ass e Wrapper fir gebierteg Cron Aarbecht mat Pinterest Support Mechanismen déi verantwortlech sinn fir Sécherheet, Traffic, Logbicher a Metriken.
  • PinterestDaemon enthält Infrastruktur Daemons. Dës Famill wuesse weider wéi mir méi Ënnerstëtzung fir eis Cluster bäidroen.
  • PinterestTrainingJob erstreckt sech op Tensorflow a Pytorch Prozesser, déi deeselwechten Niveau vun der Runtime Support wéi all aner CRDs ubitt. Zanter Pinterest aktiv Tensorflow an aner Maschinn Léieren Systemer benotzt, hu mir e Grond fir eng separat CRD ronderëm hinnen ze bauen.

Mir schaffen och un PinterestStatefulSet, dee geschwënn fir Datelager an aner statesch Systemer ugepasst gëtt.

Runtime Ënnerstëtzung

Wann en Applikatioun Pod op Kubernetes leeft, kritt en automatesch e Certificat fir sech selwer z'identifizéieren. Dëse Certificat gëtt benotzt fir Zougang zu geheime Späicheren oder fir mat anere Servicer iwwer mTLS ze kommunizéieren. Mëttlerweil wäerten de Container Init Configurator an Daemon all déi néideg Ofhängegkeeten eroflueden ier Dir déi containeriséierter Applikatioun ausféiert. Wann alles fäerdeg ass, registréieren de Traffic Sidecar an den Daemon d'IP Adress vum Modul bei eisem Zookeeper sou datt d'Clienten et entdecken. All dëst funktionnéiert well den Netzwierkmodul konfiguréiert gouf ier d'Applikatioun gestart gouf.

Déi uewe genannte sinn typesch Beispiller vu Runtime Support fir Aarbechtslaascht. Aner Zorte vun Aarbechtslaaschten kënnen e bëssen aner Ënnerstëtzung erfuerderen, awer si kommen all a Form vu Pod-Niveau Sidecars, Node-Niveau oder virtuell Maschinn-Niveau Daemons. Mir garantéieren datt all dëst an der Gestiounsinfrastruktur agesat gëtt a konsequent iwwer Uwendungen ass, wat schlussendlech d'Belaaschtung wat d'technesch Aarbecht a Clientssupport ugeet, wesentlech reduzéiert.

Testen an QA

Mir hunn eng Enn-zu-Enn Testpipeline uewen op der existéierender Kubernetes Testinfrastruktur gebaut. Dës Tester gëllen fir all eis Cluster. Eis Pipeline ass duerch vill Versioune gaangen ier se en Deel vum Produktcluster gouf.

Zousätzlech zu Testsystemer hu mir Iwwerwaachungs- an Alarmsystemer déi stänneg de Status vun de Systemkomponenten, de Ressourceverbrauch an aner wichteg Indikatoren iwwerwaachen, eis nëmmen informéieren wann mënschlech Interventioun néideg ass.

Alternativen

Mir hunn e puer Alternativen zu personaliséierte Ressourcen gekuckt, sou wéi Mutatiounszougang Controller a Schablounsystemer. Wéi och ëmmer, si kommen all mat bedeitend operationell Erausfuerderungen, also hu mir de CRD Wee gewielt.

E mutational Admission Controller gouf benotzt fir Sidecars, Ëmfeldvariablen an aner Runtime Support aféieren. Wéi och ëmmer, et huet verschidde Probleemer konfrontéiert, wéi Ressourceverbindung a Liewenszyklusmanagement, wou sou Probleemer net am CRD entstinn.

Opgepasst: Schablounsystemer wéi Helm Charts ginn och vill benotzt fir Uwendungen mat ähnlechen Konfiguratiounen auszeféieren. Wéi och ëmmer, eis Aarbechtsapplikatiounen sinn ze divers fir mat Templates ze verwalten. Och während der kontinuéierlecher Détachement gëtt et ze vill Feeler wann Dir Template benotzt.

Upëff Aarbecht

Mir hunn de Moment mat enger gemëschter Laascht iwwer all eise Cluster ze dinn. Fir esou Prozesser vu verschiddenen Typen a Gréissten z'ënnerstëtzen, schaffe mir an de folgende Beräicher:

  • Eng Sammlung vu Cluster verdeelt grouss Uwendungen iwwer verschidde Cluster fir Skalierbarkeet a Stabilitéit.
  • Assuréiert Clusterstabilitéit, Skalierbarkeet a Visibilitéit fir Applikatiounskonnektivitéit an SLAs ze kreéieren.
  • Gestioun vun Ressourcen a Quoten sou datt Uwendungen net matenee Konflikt sinn, an d'Skala vum Cluster gëtt vun eiser Säit kontrolléiert.
  • Eng nei CI/CD Plattform fir Applikatiounen op Kubernetes z'ënnerstëtzen an z'installéieren.

Source: will.com

Setzt e Commentaire