Å is stÄsts ir par to, kÄ mÄs izmantojam konteinerus ražoÅ”anas vidÄ, konkrÄti Kubernetes. Raksts ir veltÄ«ts metriku un žurnÄlu apkopoÅ”anai no konteineriem, kÄ arÄ« attÄlu veidoÅ”anai.
MÄs esam no fintech uzÅÄmuma Exness, kas izstrÄdÄ pakalpojumus tieÅ”saistes tirdzniecÄ«bai un fintech produktus B2B un B2C. MÅ«su pÄtniecÄ«bÄ un attÄ«stÄ«bÄ ir daudz dažÄdu komandu, attÄ«stÄ«bas nodaÄ¼Ä ir vairÄk nekÄ 100 darbinieku.
MÄs pÄrstÄvam komandu, kas ir atbildÄ«ga par platformu mÅ«su izstrÄdÄtÄjiem, lai apkopotu un palaistu kodu. Jo Ä«paÅ”i mÄs esam atbildÄ«gi par metrikas, žurnÄlu un notikumu apkopoÅ”anu, uzglabÄÅ”anu un ziÅoÅ”anu no lietojumprogrammÄm. PaÅ”laik mÄs izmantojam aptuveni trÄ«s tÅ«kstoÅ”us Docker konteineru ražoÅ”anas vidÄ, uzturam savu 50 TB lielo datu krÄtuvi un piedÄvÄjam arhitektÅ«ras risinÄjumus, kas ir balstÄ«ti uz mÅ«su infrastruktÅ«ru: Kubernetes, Rancher un dažÄdiem publisko mÄkoÅpakalpojumu sniedzÄjiem.
MÅ«su motivÄcija
Kas deg? Neviens nevar atbildÄt. Kur ir pavards? GrÅ«ti saprast. Kad tas aizdegÄs? To var uzzinÄt, bet ne uzreiz.
KÄpÄc daži konteineri stÄv, bet citi ir nokrituÅ”i? KurÅ” konteiners bija vainÄ«gs? Galu galÄ konteineru Ärpuse ir vienÄda, bet iekÅ”pusÄ katram ir savs Neo.
MÅ«su izstrÄdÄtÄji ir kompetenti puiÅ”i. ViÅi sniedz labus pakalpojumus, kas nes peļÅu uzÅÄmumam. Bet ir kļūmes, kad konteineri ar lietojumprogrammÄm apmaldÄs. Viens konteiners patÄrÄ pÄrÄk daudz CPU, cits patÄrÄ tÄ«klu, treÅ”ais patÄrÄ I/O darbÄ«bas, un ceturtais ir pilnÄ«gi neskaidrs, ko tas dara ar ligzdÄm. Tas viss nokrÄ«t un kuÄ£is nogrimst.
AÄ£enti
Lai saprastu, kas notiek iekÅ”Ä, nolÄmÄm aÄ£entus ievietot tieÅ”i konteineros.
Å ie aÄ£enti ir ierobežojoÅ”as programmas, kas notur konteinerus tÄdÄ stÄvoklÄ«, ka tie nesalauž viens otru. AÄ£enti ir standartizÄti, un tas ļauj izmantot standartizÄtu pieeju konteineru apkalpoÅ”anai.
MÅ«su gadÄ«jumÄ aÄ£entiem ir jÄnodroÅ”ina žurnÄli standarta formÄtÄ, marÄ·Äti un ierobežoti. ViÅiem arÄ« jÄnodroÅ”ina mums standartizÄta metrika, kas ir paplaÅ”inÄma no biznesa lietojumprogrammu perspektÄ«vas.
AÄ£enti nozÄ«mÄ arÄ« darbÄ«bas un uzturÄÅ”anas utilÄ«tus, kas var darboties dažÄdÄs orÄ·estrÄÅ”anas sistÄmÄs, kas atbalsta dažÄdus attÄlus (Debian, Alpine, Centos utt.).
Visbeidzot, aÄ£entiem ir jÄatbalsta vienkÄrÅ”s CI/CD, kas ietver Docker failus. PretÄjÄ gadÄ«jumÄ kuÄ£is sabruks, jo konteinerus sÄks piegÄdÄt pa āgreizÄmā sliedÄm.
Veidojiet procesu un mÄrÄ·a attÄla ierÄ«ci
Lai viss bÅ«tu standartizÄts un pÄrvaldÄms, ir jÄievÄro sava veida standarta veidoÅ”anas process. TÄpÄc nolÄmÄm vÄkt konteinerus pa konteineriem ā tÄ ir rekursija.
Å eit konteineri ir attÄloti ar cietÄm kontÅ«rÄm. TajÄ paÅ”Ä laikÄ viÅi nolÄma tajos ievietot izplatÄ«Å”anas komplektus, lai "dzÄ«ve neŔķistu kÄ avenes". KÄpÄc tas tika darÄ«ts, mÄs paskaidrosim tÄlÄk.
RezultÄts ir veidoÅ”anas rÄ«ks ā versijai specifisks konteiners, kas atsaucas uz konkrÄtÄm izplatÄ«Å”anas versijÄm un konkrÄtÄm skriptu versijÄm.
KÄ mÄs to izmantojam? Mums ir Docker Hub, kurÄ ir konteiners. MÄs to atspoguļojam mÅ«su sistÄmÄ, lai atbrÄ«votos no ÄrÄjÄm atkarÄ«bÄm. RezultÄts ir konteiners, kas apzÄ«mÄts ar dzeltenu krÄsu. MÄs izveidojam veidni, lai konteinerÄ instalÄtu visus nepiecieÅ”amos izplatÄ«jumus un skriptus. PÄc tam mÄs apkopojam lietoÅ”anai gatavu attÄlu: izstrÄdÄtÄji tajÄ ievieto kodu un dažas savas Ä«paÅ”Äs atkarÄ«bas.
Kas Å”ajÄ pieejÄ ir labs?
- PirmkÄrt, pilna versijas kontrole bÅ«vÄÅ”anas rÄ«kiem ā bÅ«vkonteinera, skripta un izplatÄ«Å”anas versijas.
- OtrkÄrt, esam panÄkuÅ”i standartizÄciju: veidojam veidnes, starpposma un lietoÅ”anai gatavu attÄlu vienÄdi.
- TreÅ”kÄrt, konteineri mums nodroÅ”ina pÄrnesamÄ«bu. Å odien mÄs izmantojam Gitlab, un rÄ«t mÄs pÄrslÄgsimies uz TeamCity vai Jenkins un varÄsim darbinÄt savus konteinerus tÄdÄ paÅ”Ä veidÄ.
- CeturtkÄrt, atkarÄ«bu samazinÄÅ”ana. Nebija nejauŔība, ka konteinerÄ ievietojÄm izplatÄ«Å”anas komplektus, jo tas ļauj izvairÄ«ties no to lejupielÄdes no interneta katru reizi.
- PiektkÄrt, ir palielinÄjies veidoÅ”anas Ätrums - vietÄjo attÄlu kopiju klÄtbÅ«tne ļauj netÄrÄt laiku lejupielÄdei, jo ir vietÄjais attÄls.
Citiem vÄrdiem sakot, esam panÄkuÅ”i kontrolÄtu un elastÄ«gu montÄžas procesu. MÄs izmantojam tos paÅ”us rÄ«kus, lai izveidotu pilnÄ«gi versijas konteinerus.
KÄ darbojas mÅ«su veidoÅ”anas procedÅ«ra
MontÄža tiek palaista ar vienu komandu, process tiek izpildÄ«ts attÄlÄ (izcelts sarkanÄ krÄsÄ). IzstrÄdÄtÄjam ir Docker fails (izcelts dzeltenÄ krÄsÄ), mÄs to renderÄjam, aizstÄjot mainÄ«gos ar vÄrtÄ«bÄm. Pa ceļam mÄs pievienojam galvenes un kÄjenes ā tie ir mÅ«su aÄ£enti.
Galvene pievieno sadalÄ«jumus no atbilstoÅ”ajiem attÄliem. Un kÄjene instalÄ mÅ«su pakalpojumus iekÅ”Ä, konfigurÄ darba slodzes palaiÅ”anu, reÄ£istrÄÅ”anu un citus aÄ£entus, aizstÄj ieejas punktu utt.
Ilgi domÄjÄm, vai uzstÄdÄ«t uzraugu. Galu galÄ mÄs nolÄmÄm, ka mums viÅÅ” ir vajadzÄ«gs. MÄs izvÄlÄjÄmies S6. PÄrraugs nodroÅ”ina konteinera pÄrvaldÄ«bu: ļauj izveidot savienojumu ar to, ja pamatprocess avarÄ, un nodroÅ”ina konteinera manuÄlu pÄrvaldÄ«bu, to neizveidojot no jauna. ŽurnÄli un metrika ir procesi, kas darbojas konteinerÄ. TÄs arÄ« kaut kÄ jÄkontrolÄ, un mÄs to darÄm ar uzrauga palÄ«dzÄ«bu. Visbeidzot, S6 rÅ«pÄjas par mÄjturÄ«bu, signÄlu apstrÄdi un citiem uzdevumiem.
TÄ kÄ mÄs izmantojam dažÄdas orÄ·estrÄÅ”anas sistÄmas, tad pÄc uzbÅ«vÄÅ”anas un palaiÅ”anas konteineram ir jÄsaprot, kÄdÄ vidÄ tas atrodas, un jÄrÄ«kojas atbilstoÅ”i situÄcijai. PiemÄram:
Tas ļauj mums izveidot vienu attÄlu un palaist to dažÄdÄs orÄ·estrÄÅ”anas sistÄmÄs, un tas tiks palaists, Åemot vÄrÄ Å”Ä«s orÄ·estrÄÅ”anas sistÄmas specifiku.
Vienam un tam paÅ”am konteineram mÄs iegÅ«stam dažÄdus procesa kokus Docker un Kubernetes:
Krava tiek izpildÄ«ta S6 uzraudzÄ«bÄ. PievÄrsiet uzmanÄ«bu kolekcionÄram un notikumiem ā tie ir mÅ«su aÄ£enti, kas atbild par žurnÄliem un metriku. Kubernetes to nav, bet Docker ir. KÄpÄc?
Ja paskatÄmies uz āpodaā (turpmÄk ā Kubernetes pod) specifikÄciju, tad redzÄsim, ka notikumu konteiners tiek izpildÄ«ts podÄ, kuram ir atseviŔķs kolektora konteiners, kas pilda metriku un žurnÄlu savÄkÅ”anas funkciju. MÄs varam izmantot Kubernetes iespÄjas: darbinÄt konteinerus vienÄ podÄ, vienÄ procesÄ un/vai tÄ«kla telpÄ. PatiesÄ«bÄ iepazÄ«stiniet savus aÄ£entus un veiciet dažas funkcijas. Un, ja tas pats konteiners tiks palaists programmÄ Docker, tas saÅems visas tÄs paÅ”as iespÄjas kÄ izvade, tas ir, tas varÄs piegÄdÄt žurnÄlus un metriku, jo aÄ£enti tiks palaisti iekÅ”Äji.
Metrika un žurnÄli
Metrikas un žurnÄlu nodroÅ”inÄÅ”ana ir sarežģīts uzdevums. ViÅas lÄmumam ir vairÄki aspekti.
InfrastruktÅ«ra ir izveidota lietderÄ«gÄs kravas izpildei, nevis baļķu masveida piegÄdei. Tas ir, Å”is process jÄveic ar minimÄlÄm konteinera resursu prasÄ«bÄm. MÄs cenÅ”amies palÄ«dzÄt saviem izstrÄdÄtÄjiem: āIegÅ«stiet Docker Hub konteineru, palaidiet to, un mÄs varam piegÄdÄt žurnÄlus.ā
Otrs aspekts ir apaļkoku apjoma ierobežoÅ”ana. Ja vairÄkos konteineros notiek žurnÄlu apjoma pieaugums (lietojumprogramma cilpÄ izvada steka izsekoÅ”anu), palielinÄs CPU, sakaru kanÄlu un žurnÄlu apstrÄdes sistÄmas slodze, un tas ietekmÄ resursdatora darbÄ«bu. veseli un citi resursdatora konteineri, tad dažreiz tas noved pie saimniekdatora "kriÅ”anas".
TreÅ”ais aspekts ir tÄds, ka ir jÄatbalsta pÄc iespÄjas vairÄk metrikas vÄkÅ”anas metožu. No failu lasÄ«Å”anas un Prometheus galapunkta aptaujas lÄ«dz lietojumprogrammu protokolu izmantoÅ”anai.
Un pÄdÄjais aspekts ir lÄ«dz minimumam samazinÄt resursu patÄriÅu.
MÄs izvÄlÄjÄmies atvÄrtÄ koda Go risinÄjumu ar nosaukumu Telegraf. Å is ir universÄls savienotÄjs, kas atbalsta vairÄk nekÄ 140 veidu ievades kanÄlus (ievades spraudÅus) un 30 veidu izvades kanÄlus (izejas spraudÅus). MÄs esam to pabeiguÅ”i, un tagad mÄs jums pastÄstÄ«sim, kÄ mÄs to izmantojam, izmantojot Kubernetes piemÄru.
PieÅemsim, ka izstrÄdÄtÄjs izvieto darba slodzi un Kubernetes saÅem pieprasÄ«jumu izveidot podziÅu. Å ajÄ brÄ«dÄ« katram podam automÄtiski tiek izveidots konteiners ar nosaukumu Collector (mÄs izmantojam mutÄcijas tÄ«mekļa aizÄ·eri). KolekcionÄrs ir mÅ«su aÄ£ents. SÄkumÄ Å”is konteiners konfigurÄ sevi darbam ar Prometheus un žurnÄlu savÄkÅ”anas sistÄmu.
- Lai to izdarÄ«tu, tas izmanto pod anotÄcijas un atkarÄ«bÄ no tÄ satura izveido, teiksim, Prometheus beigu punktu;
- Pamatojoties uz apgabala specifikÄciju un Ä«paÅ”iem konteinera iestatÄ«jumiem, tas izlemj, kÄ piegÄdÄt žurnÄlus.
MÄs apkopojam žurnÄlus, izmantojot Docker API: izstrÄdÄtÄjiem tie vienkÄrÅ”i jÄievieto stdout vai stderr, un Collector tos sakÄrtos. ŽurnÄli tiek savÄkti gabalos ar zinÄmu kavÄÅ”anos, lai novÄrstu iespÄjamu resursdatora pÄrslodzi.
Metrikas no darba slodzes gadÄ«jumiem (procesiem) tiek apkopotas konteineros. Viss ir atzÄ«mÄts: nosaukumvieta, zem un tÄ tÄlÄk, un pÄc tam tiek pÄrveidots Prometheus formÄtÄ - un kļūst pieejams vÄkÅ”anai (izÅemot žurnÄlus). MÄs arÄ« nosÅ«tÄm žurnÄlus, metriku un notikumus Kafka un tÄlÄk:
- ŽurnÄli ir pieejami Graylog (vizuÄlai analÄ«zei);
- ŽurnÄli, metrika, notikumi tiek nosÅ«tÄ«ti uz Clickhouse ilgstoÅ”ai glabÄÅ”anai.
AWS viss darbojas tieÅ”i tÄpat, tikai mÄs Graylog aizstÄjam ar Kafka ar Cloudwatch. MÄs tur nosÅ«tÄm žurnÄlus, un viss izrÄdÄs ļoti Ärti: uzreiz ir skaidrs, pie kuras kopas un konteinera tie pieder. Tas pats attiecas uz Google Stackdriver. Tas nozÄ«mÄ, ka mÅ«su shÄma darbojas gan uz vietas ar Kafka, gan mÄkonÄ«.
Ja mums nav Kubernetes ar pÄkstÄ«m, shÄma ir nedaudz sarežģītÄka, taÄu tÄ darbojas pÄc tiem paÅ”iem principiem.
Tie paÅ”i procesi tiek izpildÄ«ti konteinera iekÅ”pusÄ, tie tiek organizÄti, izmantojot S6. Visi tie paÅ”i procesi darbojas vienÄ konteinerÄ.
KÄ rezultÄtÄ,
MÄs esam izveidojuÅ”i pilnÄ«gu risinÄjumu attÄlu veidoÅ”anai un palaiÅ”anai ar iespÄjÄm apkopot un piegÄdÄt žurnÄlus un metriku:
- MÄs izstrÄdÄjÄm standartizÄtu pieeju attÄlu salikÅ”anai, un, pamatojoties uz to, mÄs izstrÄdÄjÄm CI veidnes;
- Datu vÄkÅ”anas aÄ£enti ir mÅ«su Telegraf paplaÅ”inÄjumi. MÄs tos labi pÄrbaudÄ«jÄm ražoÅ”anÄ;
- MÄs izmantojam mutÄcijas tÄ«mekļa aizÄ·eri, lai ievietotu konteinerus ar aÄ£entiem pÄkstÄ«s;
- IntegrÄts Kubernetes/Rancher ekosistÄmÄ;
- MÄs varam izpildÄ«t vienus un tos paÅ”us konteinerus dažÄdÄs orÄ·estrÄÅ”anas sistÄmÄs un iegÅ«t gaidÄ«to rezultÄtu;
- Izveidota pilnÄ«gi dinamiska konteineru pÄrvaldÄ«bas konfigurÄcija.
LÄ«dzautors: Iļja PrudÅikovs
Avots: www.habr.com