Paghimo og kubernetes nga plataporma sa Pinterest

Sulod sa mga katuigan, ang 300 ka milyon nga tiggamit sa Pinterest nakahimo og labaw sa 200 ka bilyon nga mga pin sa labaw sa 4 ka bilyon nga mga tabla. Aron maserbisyohan kini nga kasundalohan sa mga tiggamit ug daghang base sa sulud, ang portal nakahimo og libu-libo nga mga serbisyo, gikan sa mga microservice nga mahimo’g madumala sa pipila nga mga CPU, hangtod sa mga higante nga monolith nga nagdagan sa tibuuk nga panon sa mga virtual machine. Ug niabot ang higayon nga ang panan-aw sa kompanya nahulog sa mga k8. Ngano nga ang "cube" nindot tan-awon sa Pinterest? Mahibal-an nimo kini gikan sa among paghubad sa usa ka bag-o nga artikulo gikan sa blog Pinterest engineering.

Paghimo og kubernetes nga plataporma sa Pinterest

Busa, gatusan ka milyon nga tiggamit ug gatusan ka bilyon nga mga pin. Aron maserbisyohan kini nga kasundalohan sa mga tiggamit ug daghang base sa sulud, nakahimo kami og libu-libo nga mga serbisyo, gikan sa mga microservice nga mahimo’g madumala sa pipila nga mga CPU, hangtod sa mga higante nga monolith nga nagdagan sa tibuuk nga mga panon sa mga virtual machine. Dugang pa, aduna kitay lain-laing mga frameworks nga nagkinahanglan usab og CPU, memory, o I/O access.

Sa pagpadayon niini nga zoo sa mga himan, ang development team nag-atubang sa daghang mga hagit:

  • Walay uniporme nga paagi alang sa mga inhenyero sa pagpadagan sa usa ka palibot sa produksiyon. Ang walay estado nga mga serbisyo, Stateful nga mga serbisyo ug mga proyekto ubos sa aktibong kalamboan gibase sa hingpit nga lain-laing mga stack sa teknolohiya. Nagdala kini sa paghimo sa usa ka tibuuk nga kurso sa pagbansay alang sa mga inhenyero, ug seryoso usab nga komplikado ang trabaho sa among team sa imprastraktura.
  • Ang mga nag-develop nga adunay kaugalingon nga panon sa mga virtual nga makina naghimo usa ka dako nga palas-anon sa mga internal nga tigdumala. Ingon usa ka sangputanan, ang yano nga mga operasyon sama sa pag-update sa OS o AMI molungtad mga semana ug bulan. Kini modala ngadto sa dugang nga workload sa daw hingpit nga adlaw-adlaw nga mga sitwasyon.
  • Mga kalisud sa paghimo sa global nga mga galamiton sa pagdumala sa imprastraktura sa ibabaw sa kasamtangan nga mga solusyon. Ang sitwasyon mas komplikado sa kamatuoran nga ang pagpangita sa mga tag-iya sa mga virtual machine dili sayon. Sa ato pa, wala kita masayod kung kini nga kapasidad ba luwas nga makuha aron makalihok sa ubang bahin sa atong imprastraktura.

Ang mga sistema sa orkestra sa sulud usa ka paagi aron mahiusa ang pagdumala sa workload. Gibuksan nila ang pultahan sa dugang nga katulin sa pag-uswag ug gipasimple ang pagdumala sa imprastraktura, tungod kay ang tanan nga mga kahinguhaan nga nahilambigit sa proyekto gidumala sa usa ka sentralisadong sistema.

Paghimo og kubernetes nga plataporma sa Pinterest

Hulagway 1: Mga prayoridad sa imprastraktura (kasaligan, produktibidad sa developer, ug kaepektibo).

Ang Cloud Management Platform team sa Pinterest nakadiskobre sa mga K8 sa 2017. Sa una nga katunga sa 2017, among nadokumento ang kadaghanan sa among mga kapabilidad sa produksiyon, lakip ang API ug tanan namon nga mga web server. Pagkahuman, nagpahigayon kami usa ka bug-os nga pagsusi sa lainlaing mga sistema alang sa pag-orkestra sa mga solusyon sa sulud, paghimo og mga cluster ug pagtrabaho kauban nila. Sa katapusan sa 2017, nakahukom kami nga gamiton ang Kubernetes. Nabag-o kini ug kaylap nga gisuportahan sa komunidad sa developer.

Hangtud karon, nagtukod kami sa among kaugalingon nga mga gamit sa cluster boot base sa Kops ug gibalhin ang naglungtad nga mga sangkap sa imprastraktura sama sa networking, seguridad, sukatan, pag-log, pagdumala sa identidad, ug trapiko sa Kubernetes. Nag-implementar sab mi og workload modeling system para sa among resource, ang pagkakomplikado niini gitago sa mga developers. Karon naka-focus kami sa pagsiguro sa kalig-on sa cluster, pag-scale niini ug pagkonektar sa bag-ong mga kliyente.

Kubernetes: Ang Paagi sa Pinterest

Ang pagsugod sa Kubernetes sa sukod sa Pinterest isip usa ka plataporma nga ganahan sa among mga inhenyero adunay daghang mga hagit.

Isip usa ka dako nga kompanya, namuhunan kami pag-ayo sa mga gamit sa imprastraktura. Ang mga pananglitan naglakip sa mga himan sa seguridad nga nagdumala sa pagproseso sa sertipiko ug pag-apod-apod sa yawe, mga sangkap sa pagkontrol sa trapiko, mga sistema sa pagdiskubre sa serbisyo, mga bahin sa visibility, ug mga sangkap sa pagpadala sa log ug sukatan. Kining tanan nakolekta tungod sa usa ka rason: miagi kami sa normal nga dalan sa pagsulay ug kasaypanan, ug busa gusto namo nga i-integrate kining tanan nga ekipo ngadto sa bag-ong imprastraktura sa Kubernetes imbes nga usbon ang daan nga ligid sa bag-ong plataporma. Kini nga pamaagi sa kinatibuk-an nagpasimple sa paglalin, tungod kay ang tanan nga suporta sa aplikasyon anaa na ug dili kinahanglan nga buhaton gikan sa wala.

Sa laing bahin, ang load forecasting models sa Kubernetes mismo (sama sa deployment, trabaho, ug Daemon set) dili igo para sa among proyekto. Kini nga mga isyu sa usability dako nga babag sa pagbalhin sa Kubernetes. Pananglitan, nakadungog kami nga nagreklamo ang mga nag-develop sa serbisyo bahin sa nawala o sayup nga mga setting sa pag-login. Nakasugat usab kami og sayop nga paggamit sa mga template engine, sa dihang gatusan ka mga kopya ang gibuhat nga adunay parehas nga espesipikasyon ug buluhaton, nga miresulta sa makalilisang nga mga problema sa pag-debug.

Lisud usab kaayo ang pagpadayon sa lainlaing mga bersyon sa parehas nga cluster. Hunahunaa ang pagkakomplikado sa suporta sa kustomer kung kinahanglan nimo nga magtrabaho nga dungan sa daghang mga bersyon sa parehas nga runtime nga palibot, uban ang tanan nilang mga problema, mga bug ug mga update.

Pinterest User Properties ug Controllers

Aron mapasayon ​​sa among mga inhenyero ang pag-implementar sa Kubernetes, ug aron mapasayon ​​ug mapadali ang among imprastraktura, among gihimo ang among kaugalingong custom resource definitions (CRDs).

Ang mga CRD naghatag sa mosunod nga gamit:

  1. Paghiusa sa lain-laing lumad nga mga kapanguhaan sa Kubernetes aron sila molihok isip usa ka karga sa trabaho. Pananglitan, ang kapanguhaan sa PinterestService naglakip sa usa ka deployment, usa ka serbisyo sa pag-login, ug usa ka configuration map. Gitugotan niini ang mga developer nga dili mabalaka bahin sa pag-set up sa DNS.
  2. Ipatuman ang gikinahanglan nga suporta sa aplikasyon. Ang tiggamit kinahanglan nga mag-focus lamang sa espesipikasyon sa sudlanan sumala sa ilang lohika sa negosyo, samtang ang CRD controller nagpatuman sa tanan nga gikinahanglan nga init nga mga sudlanan, mga variable sa palibot ug mga detalye sa pod. Naghatag kini usa ka sukaranan nga lahi nga lebel sa kahupayan alang sa mga developer.
  3. Ang mga tigkontrol sa CRD nagdumala usab sa siklo sa kinabuhi sa lumad nga mga kapanguhaan ug nagpauswag sa pagkaanaa sa pag-debug. Naglakip kini sa pagpasig-uli sa gitinguha ug aktuwal nga mga detalye, pag-update sa kahimtang sa CRD ug pagmintinar sa mga log sa panghitabo, ug uban pa. Kung wala ang CRD, mapugos ang mga developer sa pagdumala sa daghang mga kahinguhaan, nga makadugang lamang sa posibilidad sa sayup.

Ania ang usa ka pananglitan sa usa ka PinterestService ug usa ka internal nga kapanguhaan nga gidumala sa among controller:

Paghimo og kubernetes nga plataporma sa Pinterest

Sama sa imong makita sa ibabaw, aron masuportahan ang usa ka naandan nga sudlanan kinahanglan namon nga maghiusa sa usa ka sulud sa init ug daghang mga add-on aron mahatagan ang seguridad, visibility, ug trapiko sa network. Dugang pa, naghimo kami og mga template sa configuration map ug gipatuman ang suporta alang sa PVC templates para sa mga batch nga trabaho, ingon man ang pagsubay sa daghang mga variable sa palibot aron masubay ang pagkatawo, konsumo sa kapanguhaan, ug pagkolekta sa basura.

Lisud hunahunaon nga gusto sa mga developer nga isulat kini nga mga file sa pag-configure pinaagi sa kamot nga wala’y suporta sa CRD, labi pa nga ipadayon ug i-debug ang mga pag-configure.

Workflow sa pagdeploy sa aplikasyon

Paghimo og kubernetes nga plataporma sa Pinterest

Ang hulagway sa ibabaw nagpakita kon unsaon pag-deploy ang Pinterest custom resource ngadto sa Kubernetes cluster:

  1. Ang mga developers nakig-interact sa among Kubernetes cluster pinaagi sa CLI ug user interface.
  2. Ang CLI/UI nga mga himan mokuha sa workflow configuration YAML files ug uban pang build properties (parehas nga version ID) gikan sa Artifactory ug dayon isumiter kini ngadto sa Job Submission Service. Kini nga lakang nagsiguro nga ang mga bersyon sa produksiyon ra ang ipadala sa cluster.
  3. Ang JSS usa ka ganghaan alang sa lainlaing mga platform, lakip ang Kubernetes. Dinhi ang user gipamatud-an, ang mga quota gi-isyu ug ang configuration sa among CRD kay partially checked.
  4. Human masusi ang CRD sa JSS nga bahin, ang impormasyon ipadala sa k8s platform API.
  5. Ang among CRD controller nag-monitor sa mga panghitabo sa tanang kahinguhaan sa user. Gi-convert niini ang mga CR ngadto sa lumad nga k8s nga mga kahinguhaan, gidugang ang gikinahanglan nga mga module, nagtakda sa angay nga mga variable sa palibot, ug naghimo sa uban pang suporta nga trabaho aron masiguro nga ang mga containerized user nga mga aplikasyon adunay igong suporta sa imprastraktura.
  6. Ang CRD controller unya mopasa sa nadawat nga data ngadto sa Kubernetes API aron kini maproseso sa scheduler ug ibutang sa produksyon.

Примечание: Kini nga pre-release work flow sa deployment gihimo para sa unang mga tiggamit sa bag-ong k8s platform. Anaa kami karon sa proseso sa pagpino niini nga proseso aron hingpit nga mahiusa sa among bag-ong CI/CD. Kini nagpasabot nga dili namo masulti kanimo ang tanan nga may kalabutan sa Kubernetes. Kami nagpaabut sa pagpaambit sa among kasinatian ug sa pag-uswag sa team niini nga direksyon sa among sunod nga blog post, "Pagtukod og CI/CD nga plataporma para sa Pinterest."

Mga tipo sa espesyal nga kapanguhaan

Исходя из конкретных потребностей Pinterest, мы разработали следующие CRD, которые подходят для различных рабочих процессов:

  • Ang PinterestService kay walay estado nga mga serbisyo nga nagdagan sa dugay nga panahon. Daghan sa among kinauyokan nga mga sistema gibase sa usa ka hugpong sa maong mga serbisyo.
  • Ang PinterestJobSet nagmodelo sa bug-os nga cycle batch nga mga trabaho. Usa ka komon nga senaryo sa Pinterest mao nga daghang mga trabaho ang nagpadagan sa parehas nga mga sudlanan nga managsama, bisan unsa pa ang ubang parehas nga mga proseso.
  • Ang PinterestCronJob kaylap nga gigamit inubanan sa gagmay nga mga periodic load. Kini usa ka wrapper alang sa lumad nga cron nga trabaho uban sa Pinterest nga mga mekanismo sa suporta nga responsable sa seguridad, trapiko, log ug metrics.
  • PinterestDaemon naglakip sa imprastraktura Daemons. Kini nga pamilya nagpadayon sa pagtubo samtang kami nagdugang og dugang nga suporta sa among mga cluster.
  • Ang PinterestTrainingJob molugway sa mga proseso sa Tensorflow ug Pytorch, nga naghatag sa samang lebel sa suporta sa runtime sama sa tanang ubang mga CRD. Tungod kay ang Pinterest aktibo nga naggamit sa Tensorflow ug uban pang mga sistema sa pagkat-on sa makina, kami adunay rason nga magtukod og bulag nga CRD sa ilang palibot.

Nagtrabaho usab kami sa PinterestStatefulSet, nga sa dili madugay ipahiangay alang sa mga bodega sa datos ug uban pang stateful nga sistema.

Suporta sa runtime

Kung ang usa ka aplikasyon pod nagdagan sa Kubernetes, awtomatiko kini nga makadawat usa ka sertipiko aron mailhan ang kaugalingon. Kini nga sertipiko gigamit sa pag-access sa sekreto nga pagtipig o sa pagpakigsulti sa ubang mga serbisyo pinaagi sa mTLS. Samtang, ang Container Init Configurator ug Daemon mag-download sa tanan nga gikinahanglan nga dependency sa dili pa modagan ang containerized nga aplikasyon. Kung andam na ang tanan, irehistro sa sidecar sa trapiko ug Daemon ang IP address sa module sa among Zookeeper aron madiskubre kini sa mga kliyente. Ang tanan nga kini molihok tungod kay ang network module gi-configure sa wala pa gilansad ang aplikasyon.

Ang naa sa taas kay kasagaran nga mga pananglitan sa suporta sa runtime alang sa mga workloads. Ang ubang mga matang sa mga workloads mahimong magkinahanglan og gamay nga lahi nga suporta, apan silang tanan moabut sa porma sa pod-level sidecars, node-level o virtual machine-level Daemons. Gipaneguro namo nga kining tanan gibutang sa sulod sa imprastraktura sa pagdumala ug makanunayon sa mga aplikasyon, nga sa katapusan makapamenos sa palas-anon sa mga termino sa teknikal nga trabaho ug suporta sa kustomer.

Pagsulay ug QA

Nagtukod kami og end-to-end test pipeline sa ibabaw sa kasamtangan nga Kubernetes test infrastructure. Kini nga mga pagsulay magamit sa tanan namong mga cluster. Ang among pipeline miagi sa daghang mga rebisyon sa wala pa kini mahimong bahin sa cluster sa produkto.

Dugang sa mga sistema sa pagsulay, kami adunay mga sistema sa pag-monitor ug alerto nga kanunay nga nag-monitor sa kahimtang sa mga sangkap sa sistema, pagkonsumo sa kapanguhaan ug uban pang hinungdanon nga mga timailhan, nga nagpahibalo kanamo kung kinahanglan ang interbensyon sa tawo.

Mga alternatibo

Nagtan-aw kami sa pipila ka mga alternatibo sa naandan nga mga kapanguhaan, sama sa mutation access controllers ug template system. Bisan pa, silang tanan adunay daghang mga hagit sa operasyon, mao nga gipili namon ang ruta sa CRD.

Usa ka mutational admission controller gigamit sa pagpaila sa sidecars, environment variables, ug uban pang runtime nga suporta. Apan, nag-atubang kini og lain-laing mga problema, sama sa resource binding ug lifecycle management, diin ang maong mga problema wala motumaw sa CRD.

Mubo nga sulat: Ang mga sistema sa template sama sa mga Helm chart kay kaylap usab nga gigamit sa pagpadagan sa mga aplikasyon nga adunay susama nga mga configuration. Bisan pa, ang among mga aplikasyon sa trabaho lainlain kaayo aron madumala gamit ang mga template. Usab sa panahon sa padayon nga pag-deploy adunay daghang mga sayup kung mogamit mga templates.

Umaabot nga trabaho

Nag-atubang kami karon sa nagkasagol nga karga sa tanan namong mga pungpong. Aron masuportahan ang ingon nga mga proseso sa lainlaing mga tipo ug gidak-on, nagtrabaho kami sa mga musunud nga lugar:

  • Ang usa ka koleksyon sa mga clusters nag-apod-apod sa dagkong mga aplikasyon sa nagkalain-laing mga clusters alang sa scalability ug kalig-on.
  • Pagsiguro sa cluster stability, scalability ug visibility sa paghimo sa application connectivity ug SLAs.
  • Pagdumala sa mga kapanguhaan ug mga quota aron ang mga aplikasyon dili magkasumpaki sa usag usa, ug ang sukod sa cluster kontrolado sa among bahin.
  • Usa ka bag-ong plataporma sa CI/CD alang sa pagsuporta ug pag-deploy sa mga aplikasyon sa Kubernetes.

Source: www.habr.com

Idugang sa usa ka comment