Immaġini lesti għall-produzzjoni għal k8s

Din l-istorja hija dwar kif nużaw il-kontenituri f'ambjent ta 'produzzjoni, speċifikament Kubernetes. L-artiklu huwa ddedikat għall-ġbir ta' metriċi u zkuk minn kontenituri, kif ukoll għall-bini ta' stampi.

Immaġini lesti għall-produzzjoni għal k8s

Aħna mill-kumpanija fintech Exness, li tiżviluppa servizzi għall-kummerċ onlajn u prodotti fintech għal B2B u B2C. L-R&D tagħna għandu ħafna timijiet differenti, id-dipartiment tal-iżvilupp għandu 100+ impjegat.

Aħna nirrappreżentaw it-tim li huwa responsabbli għall-pjattaforma għall-iżviluppaturi tagħna biex jiġbru u jmexxu l-kodiċi. B'mod partikolari, aħna responsabbli għall-ġbir, il-ħażna u r-rappurtar ta' metriċi, zkuk, u avvenimenti mill-applikazzjonijiet. Bħalissa noperaw madwar tlett elef kontenitur Docker f'ambjent ta 'produzzjoni, inżommu l-ħażna tad-data kbira tagħna ta' 50 TB, u nipprovdu soluzzjonijiet arkitettoniċi li huma mibnija madwar l-infrastruttura tagħna: Kubernetes, Rancher, u diversi fornituri ta 'cloud pubbliku. 

Il-motivazzjoni tagħna

X'qed jaħarqu? Ħadd ma jista’ jwieġeb. Fejn hi l-fuklar? Huwa diffiċli li tifhem. Meta ħa n-nar? Tista 'ssir taf, iżda mhux mill-ewwel. 

Immaġini lesti għall-produzzjoni għal k8s

Għaliex xi kontenituri qegħdin wieqfa filwaqt li oħrajn waqgħu? Liema kontenitur kien it-tort? Wara kollox, barra tal-kontenituri huma l-istess, iżda ġewwa kull wieħed għandu Neo tiegħu stess.

Immaġini lesti għall-produzzjoni għal k8s

L-iżviluppaturi tagħna huma guys kompetenti. Jagħmlu servizzi tajbin li jġibu qligħ lill-kumpanija. Iżda hemm fallimenti meta l-kontenituri bl-applikazzjonijiet imorru astray. Kontenitur wieħed jikkonsma wisq CPU, ieħor jikkonsma n-netwerk, terz jikkonsma operazzjonijiet I/O, u r-raba 'mhux ċar għal kollox x'jagħmel bis-sokits. Kollox jaqa u l-vapur jegħreq. 

Aġenti

Biex nifhmu x'qed jiġri ġewwa, iddeċidejna li npoġġu l-aġenti direttament f'kontenituri.

Immaġini lesti għall-produzzjoni għal k8s

Dawn l-aġenti huma programmi ta’ trażżin li jżommu l-kontenituri f’tali stat li ma jkissrux lil xulxin. L-aġenti huma standardizzati, u dan jippermetti approċċ standardizzat għall-manutenzjoni tal-kontenituri. 

Fil-każ tagħna, l-aġenti għandhom jipprovdu zkuk f'format standard, ittikkettati u throttled. Għandhom ukoll jipprovdulna metriċi standardizzati li huma estensibbli minn perspettiva ta 'applikazzjoni tan-negozju.

Aġenti jfissru wkoll utilitajiet għat-tħaddim u l-manutenzjoni li jistgħu jaħdmu f'sistemi ta 'orkestrazzjoni differenti li jappoġġaw immaġini differenti (Debian, Alpine, Centos, eċċ.).

Fl-aħħarnett, l-aġenti għandhom jappoġġjaw CI/CD sempliċi li jinkludi fajls Docker. Inkella, il-vapur se jaqa 'farm, minħabba li l-kontenituri se jibdew jitwasslu tul binarji "mgħawġa".

Ibni proċess u apparat tal-immaġni fil-mira

Biex iżżomm kollox standardizzat u maniġġabbli, jeħtieġ li jiġi segwit xi tip ta 'proċess ta' bini standard. Għalhekk, iddeċidejna li niġbru kontenituri b'kontenituri - din hija rikorsi.

Immaġini lesti għall-produzzjoni għal k8s

Hawnhekk il-kontenituri huma rappreżentati minn kontorni solidi. Fl-istess ħin, iddeċidew li jpoġġu kits ta 'distribuzzjoni fihom sabiex "il-ħajja ma tidhirx qisha lampun." Għaliex sar dan, aħna se nispjegaw hawn taħt.
 
Ir-riżultat huwa għodda tal-bini—kontenitur speċifiku għall-verżjoni li jirreferi għal verżjonijiet speċifiċi ta 'distribuzzjoni u verżjonijiet speċifiċi ta' skript.

Kif nużawha? Għandna Docker Hub li fih kontenitur. Nirriflettih ġewwa s-sistema tagħna biex neħilsu mid-dipendenzi esterni. Ir-riżultat huwa kontenitur immarkat bl-isfar. Noħolqu mudell biex ninstallaw id-distribuzzjonijiet u l-iskripts kollha li għandna bżonn fil-kontenitur. Wara dan, niġbru immaġini lesta għall-użu: l-iżviluppaturi jpoġġu fih il-kodiċi u xi wħud mid-dipendenzi speċjali tagħhom stess. 

X'hemm tajjeb dwar dan l-approċċ? 

  • L-ewwel, kontroll sħiħ tal-verżjoni tal-għodod tal-bini - verżjonijiet tal-kontenitur, tal-iskript u tad-distribuzzjoni tal-bini. 
  • It-tieni nett, ksibna standardizzazzjoni: noħolqu mudelli, immaġni intermedja u lesta għall-użu bl-istess mod. 
  • It-tielet, il-kontenituri jagħtuna l-portabbiltà. Illum nużaw Gitlab, u għada naqilbu għal TeamCity jew Jenkins u nkunu nistgħu nħaddmu l-kontenituri tagħna bl-istess mod. 
  • Ir-raba ', timminimizza dipendenzi. Mhux ta’ b’xejn li poġġejna kits ta’ distribuzzjoni fil-kontenitur, għax dan jippermettilna nevitaw li nniżżluhom mill-Internet kull darba. 
  • Il-ħames nett, il-veloċità tal-bini żdiedet - il-preżenza ta 'kopji lokali ta' immaġini tippermettilek tevita li taħli ħin fit-tniżżil, peress li hemm immaġini lokali. 

Fi kliem ieħor, ksibna proċess ta 'assemblaġġ ikkontrollat ​​u flessibbli. Aħna nużaw l-istess għodda biex nibnu kwalunkwe kontenituri b'verżjoni sħiħa. 

Kif taħdem il-proċedura tal-bini tagħna

Immaġini lesti għall-produzzjoni għal k8s

L-assemblaġġ huwa mniedi bi kmand wieħed, il-proċess huwa eżegwit fl-immaġni (enfasizzat bl-aħmar). L-iżviluppatur għandu fajl Docker (enfasizzat bl-isfar), nirrenduh, nissostitwixxi l-varjabbli b'valuri. U tul it-triq inżidu headers u footers - dawn huma l-aġenti tagħna. 

Header żżid distribuzzjonijiet mill-immaġini korrispondenti. U footer jinstalla s-servizzi tagħna ġewwa, jikkonfigura t-tnedija ta 'tagħbija tax-xogħol, illoggjar u aġenti oħra, jissostitwixxi l-punt ta' dħul, eċċ. 

Immaġini lesti għall-produzzjoni għal k8s

Ħsibna għal żmien twil jekk ninstallawx superviżur. Fl-aħħar, iddeċidejna li kellna bżonnu. Aħna għażilna S6. Is-superviżur jipprovdi ġestjoni tal-kontejners: jippermettilek li tikkonnettja miegħu jekk il-proċess prinċipali jiġġarraf u jipprovdi ġestjoni manwali tal-kontenitur mingħajr ma terġa' toħloqha. Zkuk u metriċi huma proċessi li jaħdmu ġewwa l-kontenitur. Jeħtieġ ukoll li jiġu kkontrollati b'xi mod, u nagħmlu dan bl-għajnuna ta 'superviżur. Fl-aħħarnett, l-S6 jieħu ħsieb iż-żamma tad-dar, l-ipproċessar tas-sinjali u kompiti oħra.

Peress li nużaw sistemi ta 'orkestrazzjoni differenti, wara l-bini u t-tħaddim, il-kontenitur għandu jifhem f'liema ambjent huwa u jaġixxi skont is-sitwazzjoni. Pereżempju:
Dan jippermettilna nibnu immaġni waħda u nħaddmuha f'sistemi ta 'orkestrazzjoni differenti, u se tkun imnedija b'kont meħud tal-ispeċifiċitajiet ta' din is-sistema ta 'orkestrazzjoni.

 Immaġini lesti għall-produzzjoni għal k8s

Għall-istess kontenitur nikbru siġar tal-proċess differenti f'Docker u Kubernetes:

Immaġini lesti għall-produzzjoni għal k8s

It-tagħbija hija eżegwita taħt is-superviżjoni ta 'S6. Oqgħod attent għal kollettur u avvenimenti - dawn huma l-aġenti tagħna responsabbli għal zkuk u metriċi. Kubernetes m'għandux, iżda Docker għandu. Għaliex? 

Jekk inħarsu lejn l-ispeċifikazzjoni tal-"pod" (minn hawn 'il quddiem - Kubernetes pod), se naraw li l-kontenitur tal-avvenimenti jiġi esegwit f'pod, ​​li għandu kontenitur tal-kollettur separat li jwettaq il-funzjoni li jiġbor metriċi u zkuk. Nistgħu nużaw il-kapaċitajiet ta 'Kubernetes: inħaddmu kontenituri f'pod wieħed, fi proċess wieħed u/jew spazju tan-netwerk. Attwalment daħħal l-aġenti tiegħek u twettaq xi funzjonijiet. U jekk l-istess kontenitur jiġi mniedi f'Docker, jirċievi l-istess kapaċitajiet bħall-output, jiġifieri, ikun jista 'jwassal zkuk u metriċi, peress li l-aġenti se jiġu mnedija internament. 

Metriċi u zkuk

It-twassil ta' metriċi u zkuk huwa kompitu kumpless. Hemm diversi aspetti għad-deċiżjoni tagħha.
L-infrastruttura hija maħluqa għall-eżekuzzjoni tat-tagħbija, u mhux għall-kunsinna tal-massa ta 'zkuk. Jiġifieri, dan il-proċess għandu jitwettaq b'rekwiżiti minimi tar-riżorsi tal-kontenitur. Naħdmu biex ngħinu lill-iżviluppaturi tagħna: "Ikseb kontenitur Docker Hub, ħaddem, u nistgħu nwasslu z-zkuk." 

It-tieni aspett huwa li jillimita l-volum ta 'zkuk. Jekk iseħħ żieda qawwija fil-volum ta 'zkuk f'diversi kontenituri (l-applikazzjoni toħroġ stack-trace f'linja), it-tagħbija fuq is-CPU, il-kanali ta' komunikazzjoni, u s-sistema ta 'proċessar ta' zkuk tiżdied, u dan jaffettwa l-operat tal-host bħala kontenituri sħaħ u oħrajn fuq l-ospitanti, imbagħad xi kultant dan iwassal għal "waqgħa" tal-ospitant. 

It-tielet aspett huwa li huwa meħtieġ li jiġu appoġġjati kemm jista 'jkun metodi ta' ġbir ta 'metriċi barra mill-kaxxa. Mill-qari tal-fajls u l-istħarriġ tal-Prometheus-endpoint għall-użu ta' protokolli speċifiċi għall-applikazzjoni.

U l-aħħar aspett huwa li jiġi minimizzat il-konsum tar-riżorsi.

Għażilna soluzzjoni Go open-source imsejħa Telegraf. Dan huwa konnettur universali li jappoġġja aktar minn 140 tip ta 'kanali ta' input (plugins ta 'input) u 30 tip ta' kanali ta 'output (plugins ta' output). Aħna ffinalizzajna u issa ngħidulek kif nużawha billi nużaw Kubernetes bħala eżempju. 

Immaġini lesti għall-produzzjoni għal k8s

Ejja ngħidu li żviluppatur juża ammont ta' xogħol u Kubernetes jirċievi talba biex joħloq pod. F'dan il-punt, kontenitur imsejjaħ Kollettur jinħoloq awtomatikament għal kull pod (nużaw mutazzjoni webhook). Il-kollettur huwa l-aġent tagħna. Fil-bidu, dan il-kontenitur jikkonfigura lilu nnifsu biex jaħdem ma 'Prometheus u s-sistema ta' ġbir taz-zkuk.

  • Biex tagħmel dan, tuża annotazzjonijiet tal-pods, u skont il-kontenut tagħha, toħloq, ngħidu aħna, punt finali ta 'Prometheus; 
  • Ibbażat fuq l-ispeċifikazzjoni tal-pod u s-settings speċifiċi tal-kontenitur, jiddeċiedi kif iwassal zkuk.

Aħna niġbru zkuk permezz tal-API Docker: l-iżviluppaturi biss jeħtieġ li jpoġġuhom fi stdout jew stderr, u l-Kollezzjonisti jsolvuha. Iz-zkuk jinġabru f'biċċiet b'xi dewmien biex tiġi evitata tagħbija żejda possibbli tal-host. 

Il-metriċi jinġabru f'każijiet ta' xogħol (proċessi) f'kontenituri. Kollox huwa mmarkat: namespace, taħt, eċċ, u mbagħad ikkonvertit fil-format Prometheus - u jsir disponibbli għall-ġbir (ħlief għal zkuk). Nibagħtu wkoll zkuk, metriċi u avvenimenti lil Kafka u aktar:

  • Iz-zkuk huma disponibbli fi Graylog (għall-analiżi viżwali);
  • Zkuk, metriċi, avvenimenti jintbagħtu lil Clickhouse għal ħażna fit-tul.

Kollox jaħdem eżattament l-istess fl-AWS, biss aħna nissostitwixxu Graylog ma 'Kafka ma' Cloudwatch. Nibagħtu z-zkuk hemmhekk, u kollox jirriżulta konvenjenti ħafna: huwa immedjatament ċar għal liema cluster u kontenitur jappartjenu. L-istess jgħodd għal Google Stackdriver. Jiġifieri, l-iskema tagħna taħdem kemm fuq il-post ma’ Kafka kif ukoll fil-cloud. 

Jekk ma jkollniex Kubernetes bil-miżwed, l-iskema hija ftit aktar ikkumplikata, iżda taħdem fuq l-istess prinċipji.

Immaġini lesti għall-produzzjoni għal k8s

L-istess proċessi huma esegwiti ġewwa l-kontenitur, huma orkestrati bl-użu ta 'S6. L-istess proċessi kollha qed jaħdmu ġewwa l-istess kontenitur.

Bħala riżultat,

Ħloqna soluzzjoni sħiħa għall-bini u t-tnedija ta’ immaġini, b’għażliet għall-ġbir u l-kunsinna ta’ zkuk u metriċi:

  • Aħna żviluppajna approċċ standardizzat għall-assemblaġġ ta 'immaġini, u bbażat fuqu żviluppajna mudelli CI;
  • L-aġenti tal-ġbir tad-dejta huma l-estensjonijiet Telegraf tagħna. Aħna ttestjawhom tajjeb fil-produzzjoni;
  • Aħna nużaw mutazzjoni webhook biex nimplimentaw kontenituri b'aġenti fil-miżwed; 
  • Integrata fl-ekosistema Kubernetes/Rancher;
  • Nistgħu nwettqu l-istess kontenituri f'sistemi ta 'orkestrazzjoni differenti u niksbu r-riżultat li nistennew;
  • Ħoloq konfigurazzjoni ta 'ġestjoni tal-kontenitur kompletament dinamika. 

Ko-awtur: Ilya Prudnikov

Sors: www.habr.com

Żid kumment