Kuunda jukwaa la kubernetes kwenye Pinterest

Kwa miaka mingi, watumiaji milioni 300 wa Pinterest wameunda pini zaidi ya bilioni 200 kwenye bodi zaidi ya bilioni 4. Ili kuhudumia jeshi hili la watumiaji na msingi mkubwa wa maudhui, tovuti hii imeunda maelfu ya huduma, kuanzia huduma ndogo ndogo zinazoweza kushughulikiwa na CPU chache, hadi monoliths kubwa zinazotumia kundi zima la mashine pepe. Na kisha wakati ulikuja wakati macho ya kampuni yalianguka kwenye k8s. Kwa nini "mchemraba" ulionekana mzuri kwenye Pinterest? Utajifunza kuhusu hili kutokana na tafsiri yetu ya makala ya hivi karibuni kutoka blogu ya ubunifu ya Pinterest.

Kuunda jukwaa la kubernetes kwenye Pinterest

Kwa hivyo, mamia ya mamilioni ya watumiaji na mamia ya mabilioni ya pini. Ili kuhudumia jeshi hili la watumiaji na msingi mkubwa wa maudhui, tumeunda maelfu ya huduma, kuanzia huduma ndogo ndogo zinazoweza kushughulikiwa na CPU chache, hadi monoliths kubwa zinazotumia kundi zima la mashine pepe. Kwa kuongeza, tuna mifumo mbalimbali ambayo inaweza pia kuhitaji ufikiaji wa CPU, kumbukumbu, au I/O.

Katika kudumisha zoo hii ya zana, timu ya maendeleo inakabiliwa na changamoto kadhaa:

  • Hakuna njia sare kwa wahandisi kuendesha mazingira ya uzalishaji. Huduma zisizo na uraia, huduma za Serikali na miradi inayoendelezwa kikamilifu inategemea rundo la teknolojia tofauti kabisa. Hii ilisababisha kuundwa kwa kozi nzima ya mafunzo kwa wahandisi, na pia inatatiza kazi ya timu yetu ya miundombinu.
  • Watengenezaji walio na kundi lao la mashine za mtandaoni huunda mzigo mkubwa kwa wasimamizi wa ndani. Kama matokeo, shughuli rahisi kama vile kusasisha OS au AMI huchukua wiki na miezi. Hii inasababisha kuongezeka kwa mzigo wa kazi katika hali zinazoonekana kuwa za kila siku.
  • Ugumu wa kuunda zana za usimamizi wa miundombinu ya kimataifa juu ya suluhisho zilizopo. Hali ni ngumu zaidi na ukweli kwamba kupata wamiliki wa mashine za kawaida si rahisi. Hiyo ni, hatujui kama uwezo huu unaweza kutolewa kwa usalama ili kufanya kazi katika sehemu zingine za miundombinu yetu.

Mifumo ya kupanga vyombo ni njia ya kuunganisha usimamizi wa mzigo wa kazi. Wanafungua mlango wa kuongeza kasi ya maendeleo na kurahisisha usimamizi wa miundombinu, kwa kuwa rasilimali zote zinazohusika katika mradi zinasimamiwa na mfumo mmoja wa kati.

Kuunda jukwaa la kubernetes kwenye Pinterest

Kielelezo cha 1: Vipaumbele vya miundombinu (kutegemewa, tija ya wasanidi programu, na ufanisi).

Timu ya Cloud Management Platform huko Pinterest iligundua K8 mwaka wa 2017. Kufikia nusu ya kwanza ya 2017, tulikuwa tumeandika uwezo wetu mwingi wa uzalishaji, ikijumuisha API na seva zetu zote za wavuti. Baadaye, tulifanya tathmini ya kina ya mifumo mbali mbali ya kuandaa suluhisho za kontena, kujenga vikundi na kufanya kazi nazo. Kuelekea mwisho wa 2017, tuliamua kutumia Kubernetes. Ilikuwa rahisi kubadilika na kuungwa mkono sana katika jumuiya ya wasanidi programu.

Hadi sasa, tumeunda zana zetu za kuwasha nguzo kulingana na Kops na kuhamisha vipengele vya miundombinu vilivyopo kama vile mitandao, usalama, vipimo, ukataji miti, udhibiti wa utambulisho na trafiki hadi Kubernetes. Pia tulitekeleza mfumo wa uundaji wa mzigo wa kazi kwa rasilimali yetu, ambayo utata wake umefichwa kutoka kwa wasanidi programu. Sasa tumejikita katika kuhakikisha uthabiti wa nguzo, kuipanua na kuunganisha wateja wapya.

Kubernetes: Njia ya Pinterest

Kuanza na Kubernetes katika kiwango cha Pinterest kama jukwaa ambalo wahandisi wetu wangependa kulikuja na changamoto nyingi.

Kama kampuni kubwa, tumewekeza pakubwa katika zana za miundombinu. Mifano ni pamoja na zana za usalama zinazoshughulikia uchakataji wa cheti na usambazaji muhimu, vipengee vya udhibiti wa trafiki, mifumo ya ugunduzi wa huduma, vipengee vya mwonekano na vipengee vya kutuma kumbukumbu na vipimo. Yote hii ilikusanywa kwa sababu: tulipitia njia ya kawaida ya majaribio na makosa, na kwa hiyo tulitaka kuunganisha vifaa hivi vyote kwenye miundombinu mpya kwenye Kubernetes badala ya kurejesha gurudumu la zamani kwenye jukwaa jipya. Mbinu hii kwa ujumla imerahisisha uhamaji, kwa kuwa usaidizi wote wa programu tayari upo na hauhitaji kuundwa kutoka mwanzo.

Kwa upande mwingine, miundo ya utabiri wa mzigo katika Kubernetes yenyewe (kama vile uwekaji, kazi, na seti za Daemon) haitoshi kwa mradi wetu. Masuala haya ya utumiaji ni vizuizi vikubwa vya kuhamia Kubernetes. Kwa mfano, tumesikia wasanidi wa huduma wakilalamika kuhusu kukosa au mipangilio isiyo sahihi ya kuingia. Pia tulikumbana na matumizi yasiyo sahihi ya injini za violezo, wakati mamia ya nakala ziliundwa kwa vipimo na kazi sawa, ambayo ilisababisha matatizo ya utatuzi wa ndoto mbaya.

Pia ilikuwa vigumu sana kudumisha matoleo tofauti katika nguzo moja. Hebu fikiria ugumu wa usaidizi wa wateja ikiwa unahitaji kufanya kazi kwa wakati mmoja katika matoleo mengi ya mazingira ya wakati wa kukimbia, na matatizo yao yote, hitilafu na masasisho.

Sifa za Mtumiaji wa Pinterest na Vidhibiti

Ili kuwarahisishia wahandisi wetu kutekeleza Kubernetes, na kurahisisha na kuharakisha miundombinu yetu, tumeunda fasili zetu za rasilimali maalum (CRDs).

CRDs hutoa utendaji ufuatao:

  1. Kuchanganya rasilimali tofauti za asili za Kubernetes ili zifanye kazi kama mzigo mmoja. Kwa mfano, nyenzo ya PinterestService inajumuisha matumizi, huduma ya kuingia, na ramani ya usanidi. Hii inaruhusu wasanidi programu kutokuwa na wasiwasi kuhusu kusanidi DNS.
  2. Tekeleza usaidizi unaohitajika wa maombi. Mtumiaji anahitaji kuangazia tu vipimo vya kontena kulingana na mantiki ya biashara yake, huku kidhibiti cha CRD kikitekeleza vyombo vyote muhimu vya init, vigezo vya mazingira na vipimo vya pod. Hii hutoa kiwango tofauti cha faraja kwa wasanidi programu.
  3. Vidhibiti vya CRD pia hudhibiti mzunguko wa maisha wa rasilimali asili na kuboresha upatikanaji wa utatuzi. Hii ni pamoja na kupatanisha vipimo vinavyohitajika na halisi, kusasisha hali ya CRD na kudumisha kumbukumbu za matukio, na zaidi. Bila CRD, wasanidi watalazimika kudhibiti rasilimali nyingi, ambayo ingeongeza tu uwezekano wa hitilafu.

Huu hapa ni mfano wa Huduma ya Pinterest na rasilimali ya ndani ambayo inadhibitiwa na mtawala wetu:

Kuunda jukwaa la kubernetes kwenye Pinterest

Kama unavyoona hapo juu, ili kuauni kontena maalum tunahitaji kujumuisha chombo cha init na nyongeza kadhaa ili kutoa usalama, mwonekano na trafiki ya mtandao. Aidha, tuliunda violezo vya ramani za usanidi na kutekeleza usaidizi wa violezo vya PVC kwa kazi za kundi, pamoja na ufuatiliaji wa anuwai nyingi za mazingira ili kufuatilia utambulisho, matumizi ya rasilimali na ukusanyaji wa takataka.

Ni vigumu kufikiria kuwa wasanidi programu wangetaka kuandika faili hizi za usanidi kwa mkono bila usaidizi wa CRD, achilia mbali kudumisha na kutatua usanidi zaidi.

Mtiririko wa uwekaji maombi

Kuunda jukwaa la kubernetes kwenye Pinterest

Picha hapo juu inaonyesha jinsi ya kupeleka rasilimali maalum ya Pinterest kwa nguzo ya Kubernetes:

  1. Wasanidi programu huingiliana na nguzo yetu ya Kubernetes kupitia CLI na kiolesura cha mtumiaji.
  2. Zana za CLI/UI hurejesha usanidi wa mtiririko wa kazi wa YAML na sifa nyingine za muundo (Kitambulisho cha toleo sawa) kutoka kwa Artifactory na kisha kuziwasilisha kwa Huduma ya Kuwasilisha Kazi. Hatua hii inahakikisha kwamba matoleo ya uzalishaji pekee ndiyo yanawasilishwa kwa kundi.
  3. JSS ni lango la majukwaa mbalimbali, ikiwa ni pamoja na Kubernetes. Hapa mtumiaji ameidhinishwa, upendeleo hutolewa na usanidi wa CRD yetu huangaliwa kwa kiasi.
  4. Baada ya kuangalia CRD kwa upande wa JSS, habari hutumwa kwa API ya jukwaa la k8s.
  5. Kidhibiti chetu cha CRD hufuatilia matukio kwenye rasilimali zote za watumiaji. Inabadilisha CR kuwa rasilimali asili za k8s, inaongeza moduli zinazohitajika, inaweka vigezo vinavyofaa vya mazingira, na kufanya kazi nyingine ya usaidizi ili kuhakikisha programu za watumiaji zilizowekwa kwenye vyombo zina usaidizi wa kutosha wa miundombinu.
  6. Kisha kidhibiti cha CRD hupitisha data iliyopokelewa kwa API ya Kubernetes ili iweze kuchakatwa na kipanga ratiba na kuwekwa katika uzalishaji.

Kumbuka: Mtiririko huu wa awali wa kazi ya upelekaji uliundwa kwa watumiaji wa kwanza wa jukwaa jipya la k8s. Kwa sasa tuko katika harakati za kuboresha mchakato huu ili kuunganishwa kikamilifu na CI/CD yetu mpya. Hii inamaanisha kuwa hatuwezi kukuambia kila kitu kinachohusiana na Kubernetes. Tunatazamia kushiriki uzoefu wetu na maendeleo ya timu katika mwelekeo huu katika chapisho letu linalofuata la blogi, "Kuunda jukwaa la CI/CD kwa Pinterest."

Aina za rasilimali maalum

Kulingana na mahitaji mahususi ya Pinterest, tumetengeneza CRD zifuatazo ili kuendana na mtiririko tofauti wa kazi:

  • PinterestService ni huduma zisizo na uraia ambazo zimekuwa zikifanya kazi kwa muda mrefu. Mifumo yetu mingi ya msingi inategemea seti ya huduma kama hizo.
  • PinterestJobSet mifano ya kazi za kundi la mzunguko kamili. Hali ya kawaida kwenye Pinterest ni kwamba kazi nyingi huendesha vyombo sawa sambamba, bila kujali michakato mingine inayofanana.
  • PinterestCronJob inatumika sana kwa kushirikiana na mizigo midogo ya mara kwa mara. Hiki ni kibandiko cha kazi asilia cha cron kilicho na mifumo ya usaidizi ya Pinterest ambayo inawajibika kwa usalama, trafiki, kumbukumbu na vipimo.
  • PinterestDaemon inajumuisha Daemons za miundombinu. Familia hii inaendelea kukua tunapoongeza usaidizi zaidi kwa vikundi vyetu.
  • PinterestTrainingJob inaenea hadi michakato ya Tensorflow na Pytorch, ikitoa kiwango sawa cha usaidizi wa wakati wa utekelezaji kama CRD zingine zote. Kwa kuwa Pinterest hutumia Tensorflow na mifumo mingine ya kujifunza ya mashine, tulikuwa na sababu ya kuunda CRD tofauti kuzizunguka.

Pia tunafanyia kazi PinterestStatefulSet, ambayo hivi karibuni itarekebishwa kwa maghala ya data na mifumo mingine ya serikali.

Usaidizi wa wakati wa kukimbia

Wakati ganda la maombi linaendeshwa kwenye Kubernetes, hupokea cheti kiotomatiki ili kujitambulisha. Cheti hiki kinatumika kufikia hifadhi ya siri au kuwasiliana na huduma zingine kupitia mTLS. Wakati huo huo, Kisanidi cha Init ya Kontena na Daemon zitapakua vitegemezi vyote muhimu kabla ya kuendesha programu iliyo na kontena. Kila kitu kitakapokuwa tayari, gari la trafiki na Daemon zitasajili anwani ya IP ya moduli na Zookeeper yetu ili wateja waweze kuigundua. Yote hii itafanya kazi kwa sababu moduli ya mtandao ilisanidiwa kabla ya programu kuzinduliwa.

Ya hapo juu ni mifano ya kawaida ya usaidizi wa wakati wa kukimbia kwa mzigo wa kazi. Aina zingine za mzigo wa kazi zinaweza kuhitaji usaidizi tofauti kidogo, lakini zote zinakuja katika muundo wa kando za kiwango cha ganda, Daemons za kiwango cha nodi au kiwango cha mashine pepe. Tunahakikisha kwamba haya yote yametumwa ndani ya miundombinu ya usimamizi na yanawiana katika programu zote, ambayo hatimaye hupunguza mzigo kwa kiasi kikubwa katika masuala ya kazi ya kiufundi na usaidizi kwa wateja.

Mtihani na QA

Tumeunda bomba la majaribio la mwisho hadi mwisho juu ya miundombinu ya majaribio ya Kubernetes. Majaribio haya yanatumika kwa vikundi vyetu vyote. Bomba letu lilipitia masahihisho mengi kabla ya kuwa sehemu ya kundi la bidhaa.

Kando na mifumo ya majaribio, tuna mifumo ya ufuatiliaji na tahadhari ambayo hufuatilia mara kwa mara hali ya vipengele vya mfumo, matumizi ya rasilimali na viashirio vingine muhimu, ikituarifu tu wakati uingiliaji kati wa binadamu unahitajika.

Njia mbadala

Tuliangalia baadhi ya njia mbadala za rasilimali maalum, kama vile vidhibiti vya ufikiaji wa mabadiliko na mifumo ya violezo. Hata hivyo, zote zinakuja na changamoto kubwa za uendeshaji, kwa hivyo tulichagua njia ya CRD.

Kidhibiti cha uandikishaji cha mabadiliko kilitumiwa kutambulisha gari za kando, vigeuzo vya mazingira, na usaidizi mwingine wa wakati wa utekelezaji. Hata hivyo, ilikabiliwa na matatizo mbalimbali, kama vile kuunganisha rasilimali na usimamizi wa mzunguko wa maisha, ambapo matatizo kama hayo hayatokei katika CRD.

Kumbuka: Mifumo ya violezo kama vile chati za Helm pia hutumika sana kuendesha programu zilizo na usanidi sawa. Hata hivyo, maombi yetu ya kazi ni tofauti sana kuweza kudhibitiwa kwa kutumia violezo. Pia wakati wa kupelekwa kwa kuendelea kutakuwa na makosa mengi sana wakati wa kutumia templates.

Kazi inayokuja

Kwa sasa tunashughulika na mzigo mseto kwenye makundi yetu yote. Ili kusaidia michakato kama hii ya aina na saizi tofauti, tunafanya kazi katika maeneo yafuatayo:

  • Mkusanyiko wa makundi husambaza programu kubwa katika makundi mbalimbali kwa ajili ya uimara na uthabiti.
  • Kuhakikisha uthabiti wa nguzo, uimara na mwonekano ili kuunda muunganisho wa programu na SLA.
  • Kusimamia rasilimali na sehemu za upendeleo ili programu zisigongane, na ukubwa wa nguzo unadhibitiwa kwa upande wetu.
  • Jukwaa jipya la CI/CD la kusaidia na kupeleka programu kwenye Kubernetes.

Chanzo: mapenzi.com

Kuongeza maoni