Creu platfform kubernetes ar Pinterest

Dros y blynyddoedd, mae 300 miliwn o ddefnyddwyr Pinterest wedi creu mwy na 200 biliwn o binnau ar fwy na 4 biliwn o fyrddau. Er mwyn gwasanaethu'r fyddin hon o ddefnyddwyr a sylfaen cynnwys helaeth, mae'r porth wedi datblygu miloedd o wasanaethau, yn amrywio o ficrowasanaethau y gellir eu trin gan ychydig o CPUs, i fonolithau anferth sy'n rhedeg ar fflyd gyfan o beiriannau rhithwir. Ac yna daeth y foment pan syrthiodd llygaid y cwmni ar k8s. Pam roedd y “ciwb” yn edrych yn dda ar Pinterest? Byddwch yn dysgu am hyn o'n cyfieithiad o erthygl ddiweddar gan blog Pinterest peirianneg.

Creu platfform kubernetes ar Pinterest

Felly, cannoedd o filiynau o ddefnyddwyr a channoedd o biliynau o binnau. Er mwyn gwasanaethu'r fyddin hon o ddefnyddwyr a sylfaen cynnwys helaeth, rydym wedi datblygu miloedd o wasanaethau, yn amrywio o ficrowasanaethau y gellir eu trin gan ychydig o CPUs, i fonolithau anferth sy'n rhedeg ar fflydoedd cyfan o beiriannau rhithwir. Yn ogystal, mae gennym amrywiaeth o fframweithiau a allai hefyd fod angen mynediad CPU, cof, neu I / O.

Wrth gynnal y sw hwn o offer, mae'r tîm datblygu yn wynebu nifer o heriau:

  • Nid oes unrhyw ffordd unffurf i beirianwyr redeg amgylchedd cynhyrchu. Mae gwasanaethau di-wladwriaeth, gwasanaethau Gwladol a phrosiectau sy'n cael eu datblygu'n weithredol yn seiliedig ar staciau technoleg hollol wahanol. Arweiniodd hyn at greu cwrs hyfforddi cyfan ar gyfer peirianwyr, ac mae hefyd yn cymhlethu gwaith ein tîm seilwaith yn ddifrifol.
  • Mae datblygwyr gyda'u fflyd eu hunain o beiriannau rhithwir yn creu baich enfawr ar weinyddwyr mewnol. O ganlyniad, mae gweithrediadau syml fel diweddaru'r OS neu AMI yn cymryd wythnosau a misoedd. Mae hyn yn arwain at fwy o lwyth gwaith mewn sefyllfaoedd sy'n ymddangos yn hollol bob dydd.
  • Anawsterau wrth greu offer rheoli seilwaith byd-eang ar ben atebion presennol. Cymhlethir y sefyllfa ymhellach gan y ffaith nad yw'n hawdd dod o hyd i berchnogion peiriannau rhithwir. Hynny yw, ni wyddom a ellir echdynnu’r capasiti hwn yn ddiogel i weithredu mewn rhannau eraill o’n seilwaith.

Mae systemau offeryniaeth cynwysyddion yn ffordd o uno rheoli llwyth gwaith. Maent yn agor y drws i gyflymder datblygu cynyddol ac yn symleiddio rheolaeth seilwaith, gan fod yr holl adnoddau sy'n gysylltiedig â'r prosiect yn cael eu rheoli gan un system ganolog.

Creu platfform kubernetes ar Pinterest

Ffigur 1: Blaenoriaethau seilwaith (dibynadwyedd, cynhyrchiant datblygwyr, ac effeithlonrwydd).

Darganfu tîm Platfform Rheoli Cwmwl yn Pinterest K8s yn 2017. Erbyn hanner cyntaf 2017, roeddem wedi dogfennu'r rhan fwyaf o'n galluoedd cynhyrchu, gan gynnwys yr API a'n holl weinyddion gwe. Wedi hynny, fe wnaethom gynnal asesiad trylwyr o systemau amrywiol ar gyfer trefnu datrysiadau cynhwysydd, adeiladu clystyrau a gweithio gyda nhw. Tua diwedd 2017, fe benderfynon ni ddefnyddio Kubernetes. Roedd yn eithaf hyblyg ac yn cael ei gefnogi'n eang yn y gymuned ddatblygwyr.

Hyd yn hyn, rydym wedi adeiladu ein hoffer cist clwstwr ein hunain yn seiliedig ar Kops ac wedi mudo cydrannau seilwaith presennol megis rhwydweithio, diogelwch, metrigau, logio, rheoli hunaniaeth, a thraffig i Kubernetes. Gwnaethom hefyd roi system modelu llwyth gwaith ar waith ar gyfer ein hadnodd, y mae ei chymhlethdod wedi'i guddio rhag datblygwyr. Nawr rydym yn canolbwyntio ar sicrhau sefydlogrwydd y clwstwr, ei raddio a chysylltu cleientiaid newydd.

Kubernetes: Y Ffordd Pinterest

Daeth llawer o heriau i ddechrau gyda Kubernetes ar raddfa Pinterest fel platfform y byddai ein peirianwyr yn ei garu.

Fel cwmni mawr, rydym wedi buddsoddi’n helaeth mewn offer seilwaith. Mae enghreifftiau'n cynnwys offer diogelwch sy'n trin prosesu tystysgrifau a dosbarthu allweddi, cydrannau rheoli traffig, systemau darganfod gwasanaeth, cydrannau gwelededd, a chydrannau anfon log a metrigau. Casglwyd hyn i gyd am reswm: aethom trwy'r llwybr arferol o brofi a methu, ac felly roeddem am integreiddio'r holl offer hwn i'r seilwaith newydd ar Kubernetes yn lle ailddyfeisio'r hen olwyn ar blatfform newydd. Yn gyffredinol, mae'r dull hwn wedi symleiddio'r mudo, gan fod yr holl gefnogaeth ymgeisio eisoes yn bodoli ac nid oes angen ei greu o'r dechrau.

Ar y llaw arall, nid yw'r modelau rhagweld llwyth yn Kubernetes ei hun (fel gosodiadau, swyddi, a setiau Daemon) yn ddigon ar gyfer ein prosiect. Mae'r materion defnyddioldeb hyn yn rhwystrau enfawr i symud i Kubernetes. Er enghraifft, rydym wedi clywed datblygwyr gwasanaeth yn cwyno am osodiadau mewngofnodi coll neu anghywir. Daethom hefyd ar draws defnydd anghywir o beiriannau templed, pan grëwyd cannoedd o gopïau gyda'r un fanyleb a thasg, a arweiniodd at broblemau dadfygio hunllefus.

Roedd hefyd yn anodd iawn cynnal fersiynau gwahanol yn yr un clwstwr. Dychmygwch gymhlethdod cymorth cwsmeriaid os oes angen i chi weithio ar yr un pryd mewn fersiynau lluosog o'r un amgylchedd amser rhedeg, gyda'u holl broblemau, chwilod a diweddariadau.

Priodweddau Defnyddiwr a Rheolyddion Pinterest

Er mwyn ei gwneud hi'n haws i'n peirianwyr weithredu Kubernetes, ac i symleiddio a chyflymu ein seilwaith, rydym wedi datblygu ein diffiniadau adnoddau arfer (CRDs) ein hunain.

Mae CRDs yn darparu'r swyddogaethau canlynol:

  1. Cyfuno gwahanol adnoddau Kubernetes brodorol fel eu bod yn gweithio fel un llwyth gwaith. Er enghraifft, mae adnodd PinterestService yn cynnwys defnydd, gwasanaeth mewngofnodi, a map ffurfweddu. Mae hyn yn caniatáu i ddatblygwyr beidio â phoeni am sefydlu DNS.
  2. Gweithredu cymorth cais angenrheidiol. Mae angen i'r defnyddiwr ganolbwyntio ar fanyleb y cynhwysydd yn unig yn ôl ei resymeg busnes, tra bod y rheolwr CRD yn gweithredu'r holl gynwysyddion init angenrheidiol, newidynnau amgylchedd a manylebau pod. Mae hyn yn darparu lefel sylfaenol wahanol o gysur i ddatblygwyr.
  3. Mae rheolwyr CRD hefyd yn rheoli cylch bywyd adnoddau brodorol ac yn gwella argaeledd dadfygio. Mae hyn yn cynnwys cysoni manylebau dymunol a gwirioneddol, diweddaru statws CRD a chynnal logiau digwyddiadau, a mwy. Heb CRD, byddai datblygwyr yn cael eu gorfodi i reoli adnoddau lluosog, a fyddai ond yn cynyddu'r tebygolrwydd o gamgymeriad.

Dyma enghraifft o PinterestService ac adnodd mewnol sy'n cael ei reoli gan ein rheolwr:

Creu platfform kubernetes ar Pinterest

Fel y gwelwch uchod, i gefnogi cynhwysydd arferol mae angen i ni integreiddio cynhwysydd init a sawl ychwanegiad i ddarparu diogelwch, gwelededd a thraffig rhwydwaith. Yn ogystal, fe wnaethom greu templedi map cyfluniad a gweithredu cefnogaeth ar gyfer templedi PVC ar gyfer swyddi swp, yn ogystal ag olrhain newidynnau amgylchedd lluosog i olrhain hunaniaeth, defnydd o adnoddau, a chasglu sbwriel.

Mae'n anodd dychmygu y byddai datblygwyr eisiau ysgrifennu'r ffeiliau cyfluniad hyn â llaw heb gefnogaeth CRD, heb sôn am gynnal a dadfygio'r ffurfweddiadau ymhellach.

Llif gwaith defnyddio cymwysiadau

Creu platfform kubernetes ar Pinterest

Mae'r ddelwedd uchod yn dangos sut i ddefnyddio adnodd pwrpasol Pinterest i glwstwr Kubernetes:

  1. Mae datblygwyr yn rhyngweithio â'n clwstwr Kubernetes trwy'r CLI a'r rhyngwyneb defnyddiwr.
  2. Mae'r offer CLI/UI yn adfer y ffurfweddiad llif gwaith ffeiliau YAML ac eiddo adeiladu eraill (ID yr un fersiwn) o Artifactory ac yna'n eu cyflwyno i'r Gwasanaeth Cyflwyno Swyddi. Mae'r cam hwn yn sicrhau mai dim ond fersiynau cynhyrchu sy'n cael eu cyflwyno i'r clwstwr.
  3. Mae JSS yn borth ar gyfer llwyfannau amrywiol, gan gynnwys Kubernetes. Yma mae'r defnyddiwr yn cael ei ddilysu, mae cwotâu yn cael eu cyhoeddi ac mae cyfluniad ein CRD yn cael ei wirio'n rhannol.
  4. Ar ôl gwirio'r CRD ar ochr JSS, anfonir y wybodaeth i'r API platfform k8s.
  5. Mae ein rheolydd CRD yn monitro digwyddiadau ar yr holl adnoddau defnyddwyr. Mae'n trosi CRs yn adnoddau k8s brodorol, yn ychwanegu'r modiwlau angenrheidiol, yn gosod y newidynnau amgylchedd priodol, ac yn perfformio gwaith cymorth arall i sicrhau bod gan gymwysiadau defnyddwyr cynwysyddion ddigon o gefnogaeth seilwaith.
  6. Yna mae'r rheolydd CRD yn trosglwyddo'r data a dderbyniwyd i Kubernetes API fel y gall yr amserlennydd ei brosesu a'i gynhyrchu.

Nodyn: Crëwyd y llif gwaith cyn rhyddhau hwn o'r defnydd ar gyfer defnyddwyr cyntaf y platfform k8s newydd. Rydym ar hyn o bryd yn y broses o fireinio'r broses hon i integreiddio'n llawn â'n CI/CD newydd. Mae hyn yn golygu na allwn ddweud popeth wrthych sy'n ymwneud â Kubernetes. Edrychwn ymlaen at rannu ein profiad a chynnydd y tîm i’r cyfeiriad hwn yn ein post blog nesaf, “Adeiladu platfform CI/CD ar gyfer Pinterest.”

Mathau o adnoddau arbennig

Yn seiliedig ar anghenion penodol Pinterest, rydym wedi datblygu'r CRDs canlynol i weddu i wahanol lifau gwaith:

  • Mae PinterestService yn wasanaethau di-wladwriaeth sydd wedi bod yn rhedeg ers amser maith. Mae llawer o'n systemau craidd yn seiliedig ar set o wasanaethau o'r fath.
  • Mae PinterestJobSet yn modelu swyddi swp cylch llawn. Senario gyffredin ar Pinterest yw bod swyddi lluosog yn rhedeg yr un cynwysyddion yn gyfochrog, waeth beth fo prosesau tebyg eraill.
  • Defnyddir PinterestCronJob yn eang ar y cyd â llwythi cyfnodol bach. Mae hwn yn ddeunydd lapio ar gyfer gwaith cron brodorol gyda mecanweithiau cymorth Pinterest sy'n gyfrifol am ddiogelwch, traffig, logiau a metrigau.
  • PinterestDaemon yn cynnwys Daemonau seilwaith. Mae’r teulu hwn yn parhau i dyfu wrth i ni ychwanegu mwy o gefnogaeth i’n clystyrau.
  • Mae PinterestTrainingJob yn ymestyn i brosesau Tensorflow a Pytorch, gan ddarparu'r un lefel o gefnogaeth amser rhedeg â phob CRD arall. Gan fod Pinterest yn defnyddio Tensorflow a systemau dysgu peiriannau eraill yn weithredol, roedd gennym reswm i adeiladu CRD ar wahân o'u cwmpas.

Rydym hefyd yn gweithio ar PinterestStatefulSet, a fydd yn cael ei addasu cyn bo hir ar gyfer warysau data a systemau gwladwriaethol eraill.

Cefnogaeth amser rhedeg

Pan fydd pod cais yn rhedeg ar Kubernetes, mae'n derbyn tystysgrif yn awtomatig i adnabod ei hun. Defnyddir y dystysgrif hon i gael mynediad at storfa gyfrinachol neu i gyfathrebu â gwasanaethau eraill trwy mTLS. Yn y cyfamser, bydd y Container Init Configurator a Daemon yn lawrlwytho'r holl ddibyniaethau angenrheidiol cyn rhedeg y cymhwysiad cynhwysydd. Pan fydd popeth yn barod, bydd y car ochr traffig a Daemon yn cofrestru cyfeiriad IP y modiwl gyda'n Zookeeper fel y gall cleientiaid ei ddarganfod. Bydd hyn i gyd yn gweithio oherwydd bod y modiwl rhwydwaith wedi'i ffurfweddu cyn lansio'r rhaglen.

Mae'r uchod yn enghreifftiau nodweddiadol o gefnogaeth amser rhedeg ar gyfer llwythi gwaith. Efallai y bydd angen cymorth ychydig yn wahanol ar fathau eraill o lwythi gwaith, ond maent i gyd yn dod ar ffurf ceir ochr lefel pod, lefel nodau neu ellyllod ar lefel peiriant rhithwir. Rydym yn sicrhau bod hyn i gyd yn cael ei ddefnyddio o fewn y seilwaith rheoli a'i fod yn gyson ar draws cymwysiadau, sydd yn y pen draw yn lleihau'r baich yn sylweddol o ran gwaith technegol a chymorth i gwsmeriaid.

Profi a SA

Fe wnaethom adeiladu piblinell brawf o un pen i'r llall ar ben seilwaith prawf presennol Kubernetes. Mae'r profion hyn yn berthnasol i bob un o'n clystyrau. Aeth ein piblinell trwy lawer o ddiwygiadau cyn iddo ddod yn rhan o'r clwstwr cynnyrch.

Yn ogystal â systemau profi, mae gennym systemau monitro a rhybuddio sy'n monitro statws cydrannau system, defnydd adnoddau a dangosyddion pwysig eraill yn gyson, gan roi gwybod i ni dim ond pan fydd angen ymyrraeth ddynol.

Dewisiadau amgen

Fe wnaethom edrych ar rai dewisiadau amgen i adnoddau arferol, megis rheolwyr mynediad treiglo a systemau templed. Fodd bynnag, maent i gyd yn dod â heriau gweithredol sylweddol, felly dewisom y llwybr CRD.

Defnyddiwyd rheolydd derbyn treiglol i gyflwyno ceir ochr, newidynnau amgylchedd, a chymorth amser rhedeg arall. Fodd bynnag, roedd yn wynebu problemau amrywiol, megis rhwymo adnoddau a rheoli cylch bywyd, lle nad yw problemau o'r fath yn codi yn CRD.

Nodyn: Mae systemau templed fel siartiau Helm hefyd yn cael eu defnyddio'n eang i redeg cymwysiadau gyda chyfluniadau tebyg. Fodd bynnag, mae ein cymwysiadau gwaith yn rhy amrywiol i gael eu rheoli gan ddefnyddio templedi. Hefyd yn ystod defnydd parhaus bydd gormod o wallau wrth ddefnyddio templedi.

Gwaith i ddod

Ar hyn o bryd rydym yn delio â llwyth cymysg ar draws ein holl glystyrau. I gefnogi prosesau o'r fath o wahanol fathau a meintiau, rydym yn gweithio yn y meysydd canlynol:

  • Mae casgliad o glystyrau yn dosbarthu cymwysiadau mawr ar draws gwahanol glystyrau ar gyfer scalability a sefydlogrwydd.
  • Sicrhau sefydlogrwydd clwstwr, graddadwyedd a gwelededd i greu cysylltedd cymhwysiad a CLG.
  • Rheoli adnoddau a chwotâu fel nad yw ceisiadau yn gwrthdaro â'i gilydd, a rheolir maint y clwstwr ar ein rhan ni.
  • Llwyfan CI/CD newydd ar gyfer cefnogi a defnyddio cymwysiadau ar Kubernetes.

Ffynhonnell: hab.com

Ychwanegu sylw