Tootmisvalmis pildid k8s jaoks

See lugu rÀÀgib, kuidas me kasutame konteinerite toote keskkonnas, eriti Kubernetes'i all. Artikkel kÀsitleb konteinerite mÔÔtmete ja logide kogumist ning piltide ehitamist.

Tootmisvalmis pildid k8s jaoks

Meie oleme finantstehnoloogia ettevĂ”te Exness, mis arendab teenuseid online-kaubanduse ja finantstehnoloogiate toodete jaoks B2B ja B2C. Meie R&D-s on palju erinevaid meeskondi, arendusosakonnas ĂŒle 100 töötaja.

Esindame meeskonda, mis vastutab meie arendajate koodi kogumise ja kĂ€ivitamise platvormi eest. Konkreetsemalt vastutame mÔÔtmete, logide ja sĂŒndmuste kogumise, salvestamise ja jagamise eest rakendustest. Praegu opereerime umbes kolme tuhande Docker-konteineriga toote keskkonnas, toetame meie 50 TB suurust big data hoidlat ning pakume arhitektuurilahendusi, mis on ĂŒles ehitatud meie infrastruktuuri ĂŒmber: Kubernetes, Rancher ja erinevad avalikud pilveteenuse pakkujad. 

Meie motivatsioon

Mis pĂ”leb? Keegi ei oska vastata. Kus on epitsenter? Selle mĂ”istmine on keeruline. Millal see sĂŒttis? Seda saab tĂ€psustada, aga mitte kohe. 

Tootmisvalmis pildid k8s jaoks

Miks mĂ”ned konteinerid seisavad, aga teised kukuvad? Milline konteiner on sĂŒĂŒdi? VĂ€ljastpoolt nĂ€evad konteinerid vĂ€lja identsed, kuid igaĂŒhe sees on oma Neo.

Tootmisvalmis pildid k8s jaoks

Meie arendajad on osavad kutid. Nad loovad hĂ€id teenuseid, mis toovad firmale kasumit. Kuid juhtub ka komplikatsioone, kui rakendustega konteinerid lĂ€hevad segamini. Üks konteiner tarbib liiga palju CPU-d, teine — vĂ”rku, kolmas — sisend-vĂ€ljundoperatsioone, neljas pole ĂŒldse selge, mida teeb socketitega. KĂ”ik see kukub ja laev uputab. 

Agendid

Selleks, et mÔista, mis toimub sees, otsustasime paigutada agendid otse konteineritesse.

Tootmisvalmis pildid k8s jaoks

Need agendid on pidurprogrammid, mis hoiavad konteinerid sellises seisundis, et nad ei rikuks ĂŒksteist. Agendid on standardiseeritud, mis vĂ”imaldab standardiseerida lĂ€henemist konteinerite hooldusele. 

Meie puhul peavad agendid andma logisid standardformaadis, mÀrgitud ja throttle'itud. Samuti peavad nad andma meile standardiseeritud mÔÔtmeid, mis on Àrirakenduste seisukohalt laiendatavad.

Agentide alla kuuluvad ka utiliidid ekspluateerimiseks ja hoolduseks, mis oskavad töötada erinevates orkestreerimissĂŒsteemides, toetades erinevaid pilte (Debian, Alpine, Centos jne).

LÔpuks peavad agendid toetama lihtsat CI/CD-d, sealhulgas Docker-faile. Vastasel juhul laguneb laev, kuna konteinerid hakkavad tulema "kÔveratel" rööbastel.

Kogumise protsess ja sihtpildi seadmed

Et kĂ”ik oleks standardiseeritud ja hallatav, on oluline jĂ€rgida mingit standardset kogumisprotsessi. SeetĂ”ttu otsustasime koguda konteineritest konteinerid – selline rekursioon.

Tootmisvalmis pildid k8s jaoks

Siin on konteinerid esitatud pidevate kontuuridena. Samuti otsustasime panna neisse distributsioonid, et "elu ei nÀiks nii lihtne". Miks see tehtud sai, selgitame allpool.
 
Tulemuseks sai kogumise tööriist – kindla versiooniga konteiner, mis viitab teatud versioonidele distributsioonidest ja teatud versioonidele skriptidest.

Kuidas me seda rakendame? Meil on Docker Hub, kus konteiner asub. Kopeerime selle oma sĂŒsteemi, et vabaneda vĂ€listest sĂ”ltuvustest. Meil on konteiner, mis on tĂ€histatud kollase vĂ€rviga. Loome mall, et installida konteinerisse kĂ”ik vajalikud distributsioonid ja skriptid. PĂ€rast seda kogume kasutamiseks valmis pildi: arendajad panevad sinna koodi ja mingid oma erilised sĂ”ltuvused. 

Miks on selline lÀhenemine hea? 

  • Esiteks, tĂ€ielik versioonihaldus kogumise tööriistadele – kogumise konteiner, skriptide ja distributsioonide versioonid. 
  • Teiseks oleme saavutanud standardiseerimise: loome malli, vahepealseid ja kasutamiseks valmis pilte ĂŒhtsel viisil. 
  • Kolmandaks, konteinerid tagavad meile portatiivsuse. TĂ€na kasutame Gitlabi, aga homme saame ĂŒle TeamCity-le vĂ”i Jenkinsile ja saame samamoodi kĂ€ivitada meie konteinerid. 
  • Neljandaks, sĂ”ltuvuste vĂ€hendamine. Me ei pannud juhuslikult konteinerisse distributsioonide, sest see vĂ”imaldab neid iga kord internetist alla laadida mitte. 
  • Viies, kogumise kiirus on tĂ”usnud – kohalike piltide olemasolu vĂ”imaldab mitte raisata aega allalaadimisele, kuna kohalikke pilte on olemas. 

TeisisÔnu oleme saavutanud kontrollitava ja paindliku kogumisprotsessi. Kasutame kÔigi konteinerite kogumiseks samu tööriistu, millel on tÀielik versioonihaldus. 

Kuidas meie kogumise protseduur töötab

Tootmisvalmis pildid k8s jaoks

Kogumine kĂ€ivitub ĂŒhe kĂ€suga, protsess toimub pildis (mĂ€rgitud punasega). Arendajal on Docker-fail (mĂ€rgitud kollasega), me renderdame selle, asendades muutujad vÀÀrtustega. Ja samal ajal lisame header’id ja footer’id – need on meie agendid. 

Header lisab distributsioonid vastavatest piltidest. Footer paigutab meie teenused, seadistab töökoormuse, logimise ja muud agenid, asendab entrypoint'i jne. 

Tootmisvalmis pildid k8s jaoks

Oleme kaua mĂ”elnud, kas paigaldada superviisor. LĂ”puks otsustasime, et see on vajalik. Valisime S6. Superviisor tagab konteineri halduse: vĂ”imaldab sellele juurde pÀÀseda, kui pĂ”hiprotsess kukub, ja vĂ”imaldab kĂ€sitsi konteineri haldamist ilma seda uuesti loomata. Logid ja nĂ€idud on protsessid, mis kestavad konteineris. Need tuleb ka mingil viisil kontrollida, ja me teeme seda superviisori abiga. LĂ”puks, S6 teeb koristustöid, signaalide töötlemist ja muid ĂŒlesandeid.

Kuna kasutame erinevaid orkestreerimissĂŒsteeme, peab konteiner pĂ€rast kokkupanemist ja kĂ€ivitamist aru saama, millises keskkonnas ta asub, ja toimima vastavalt olukorrale. NĂ€iteks:
See vĂ”imaldab meil koguda ĂŒhe pildi ja kĂ€ivitada selle erinevates orkestreerimissĂŒsteemides, arvestades selle sĂŒsteemi eripĂ€ra.

 Tootmisvalmis pildid k8s jaoks

Sama konteineri jaoks saame erinevad protsessipuid Dockeris ja Kuberneteses:

Tootmisvalmis pildid k8s jaoks

KĂ€itlemine toimub superviisori S6 all. Pange tĂ€hele, et collector ja events – need on meie agendid, kes vastutavad logide ja nĂ€itude eest. Kuberneteses pole neid, aga Dockeris on. Miks? 

Kui vaadata 'podi' spetsifikatsiooni (edaspidi – Kubernetes pod), nĂ€eme, et konteiner events kĂ€itub podis, kus on eraldi konteiner collector, mis tĂ€idab mÔÔtmete ja logide kogumise funktsiooni. Saame kasutada Kubernetes'e vĂ”imalusi: konteinerite kĂ€ivitamine ĂŒhes podis, ĂŒhes protsessis ja/vĂ”i vĂ”rgu ruumis. Tegelikult saame integreerida oma agendid ja tĂ€ita erinevaid funktsioone. Ja kui sama konteiner kĂ€ivitub Dockeris, saab ta kĂ”ik need samad vĂ”imalused, st saab edastada logisid ja nĂ€idiseid, kuna agendid kĂ€ivitatakse sees. 

NĂ€idud ja logid

NĂ€idude ja logide edastamine on keeruline ĂŒlesanne. Selle lahendamisel on seotud mitmed aspektid.
Infrastruktuur luuakse kasuliku koormuse tÀitmiseks, mitte logide massiliseks edastamiseks. See tÀhendab, et see protsess peaks toimuma minimaalsete nÔudmistega konteinerite ressurssidele. Meie eesmÀrk on aidata meie arendajatel: "VÔtke Docker Hubi konteiner, kÀivitage see ja me saame logid edastada." 

Teine aspekt on logide mahu piiramine. Kui mitmes konteineris tekib logide mahu plahvatus (rakendus prindib pidevalt stack-trace'i), suureneb koormus CPU-le, sidekanalitele, logide töötlemise sĂŒsteemile, ja see mĂ”jutab hosti ĂŒldist tööd ning muid konteinerid hostis, mis mĂ”nikord viib hosti "kukkumiseni". 

Kolmas aspekt on see, et vĂ”imalikult palju metoodikaid mÔÔdikute kogumiseks tuleb tooteid vĂ€lja pakkuda. Alates failide lugemisest ja Prometheuse lĂ”pp-punkti kĂŒsitlusest kuni rakenduste spetsiifiliste protokollide kasutamiseni.

Ja viimane aspekt on ressursikasutuse minimeerimine.

Oleme valinud open-source lahenduse Go keeles nimega Telegraf. See on universaalne konnektor, mis toetab ĂŒle 140 erineva sisenemiskanali (input plugins) ja 30 vĂ€ljundkanali (output plugins) tĂŒĂŒbid. Oleme selle edasi arendanud ja nĂŒĂŒd rÀÀgime, kuidas seda meie Kuberneteses kasutada. 

Tootmisvalmis pildid k8s jaoks

Oletame, et arendaja kĂ€ivitab koormuse ja Kubernetes saab taotluse podi loomiseks. Sel hetkel luuakse iga podi jaoks automaatselt konteiner nimega Collector (kasutame mutation webhooki). Collector on meie agent. KĂ€ivitamisel seadistab see konteiner end tööks Prometheuse ja logide kogumise sĂŒsteemiga.

  • K selleks kasutab ta podi annotatsioone ning sĂ”ltuvalt nende sisust loob nĂ€iteks Prometheuse lĂ”pp-punkti; 
  • Pod'i spetsifikatsiooni ja konteinerite spetsiifiliste seadistuste pĂ”hjal otsustab, kuidas loge edastada.

Kogume logisid lĂ€bi Docker API: arendajatele piisab, kui nad panevad need stdout vĂ”i stderr, ja edasi tegeleb Collector sellega. Logid kogutakse chunk'ides teatud viivitusega, et vĂ€ltida vĂ”imaliku hosti ĂŒlekoormust. 

MÔÔdikud kogutakse töökoormuste (protsesside) kaupa konteinerites. KĂ”ik mĂ€rgistatakse siltidega: namespace, pod jne., ja seejĂ€rel konverteeritakse Prometheuse vormingusse – ning muutub kogumiseks kĂ€ttesaadavaks (vĂ€lja arvatud logid). Samuti saadame logisid, mÔÔdikuid ja sĂŒndmusi Kafka'sse ja edasi:

  • Logid on saadaval Graylogis (visuaalse analĂŒĂŒsi jaoks);
  • Logid, mÔÔdikud ja sĂŒndmused saadetakse Clickhouse’i pikaajaliseks sĂ€ilitamiseks.

Sama sĂŒsteem töötab ka AWS-is, lihtsalt asendame Graylogi Kafka ja Cloudwatchiga. Saadame sinna logid, mille tagajĂ€rjel on kĂ”ik vĂ€ga mugav: kohe on selge, millisele klastrile ja konteinerile need kuuluvad. Sama kehtib ka Google Stackdriveri kohta. Meie skeem töötab nii on-premise lahenduses Kafka'ga kui ka pilves. 

Kui meil pole Kubernetes'e pod'e, on skeem pisut keerulisem, kuid toimib samade pÔhimÔtete alusel.

Tootmisvalmis pildid k8s jaoks

Konteineri sees kĂ€ivad samad protsessid, mida orkestreeritakse S6 abil. KĂ”ik need protsessid on kĂ€ivitatud ĂŒhes konteineris.

KokkuvÔttes

Oleme loonud tervikliku lahenduse piltide koostamiseks ja kasutusele vÔtmiseks, logide ja mÔÔdikute kogumise ja edastamise vÔimalustega:

  • Oleme vĂ€lja töötanud standardiseeritud lĂ€henemise piltide koostamiseks ja selle alusel loonud CI-malle;
  • Andmete kogumise agendid on meie Telegrafi laiendused. Oleme neid hĂ€sti testinud tootmises;
  • Kasutame mutation webhook'i agendiga konteinerite sisestamiseks pod'desse; 
  • Oleme integreerunud Kubernetes’e/Rancheri ökosĂŒsteemi;
  • Saame kĂ€itada samu konteinereid erinevates orkestreerimissĂŒsteemides ja saavutada oodatud tulemuse;
  • Oleme loonud tĂ€iesti dĂŒnaamilise konteinerihalduskonfiguratsiooni. 

Kaastoimetaja: Ilya Prudnikov

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster