Imaj pwodiksyon-pare pou k8s

Istwa sa a se sou fason nou itilize resipyan nan yon anviwònman pwodiksyon, espesyalman Kubernetes. Atik la konsakre nan kolekte mezi ak mòso bwa ki soti nan resipyan, osi byen ke bati imaj.

Imaj pwodiksyon-pare pou k8s

Nou soti nan konpayi fintech Exness, ki devlope sèvis pou komès sou entènèt ak pwodwi fintech pou B2B ak B2C. R&D nou an gen anpil ekip diferan, depatman devlopman gen plis pase 100 anplwaye.

Nou reprezante ekip ki responsab platfòm la pou devlopè nou yo kolekte epi kouri kòd. An patikilye, nou responsab pou kolekte, estoke ak rapòte mezi, mòso bwa, ak evènman ki soti nan aplikasyon yo. Kounye a nou opere apeprè twa mil kontenè Docker nan yon anviwònman pwodiksyon, kenbe 50 TB gwo depo done nou yo, epi bay solisyon achitekti ki bati alantou enfrastrikti nou an: Kubernetes, Rancher, ak divès founisè nwaj piblik. 

Motivasyon nou

kisa kap boule? Pèsonn pa ka reponn. Kote fwaye a? Li difisil pou konprann. Ki lè li pran dife? Ou ka jwenn, men pa touswit. 

Imaj pwodiksyon-pare pou k8s

Poukisa gen kèk veso ki kanpe pandan ke lòt yo tonbe? Ki veso ki te blame? Apre yo tout, deyò nan resipyan yo se menm bagay la, men andedan chak youn gen pwòp Neo li yo.

Imaj pwodiksyon-pare pou k8s

Devlopè nou yo se nèg konpetan. Yo fè bon sèvis ki pote pwofi nan konpayi an. Men, gen echèk lè resipyan ki gen aplikasyon yo ale pèdi. Yon veso konsome twòp CPU, yon lòt konsome rezo a, yon twazyèm konsome operasyon I / O, ak katriyèm lan se konplètman klè ki sa li fè ak sipò. Li tout tonbe ak bato a koule. 

Ajan

Pou konprann sa k ap pase andedan, nou deside mete ajan dirèkteman nan resipyan.

Imaj pwodiksyon-pare pou k8s

Ajan sa yo se pwogram kontrent ki kenbe veso yo nan yon eta konsa ke yo pa kraze youn ak lòt. Ajan yo estanda, e sa pèmèt yon apwòch estanda pou sèvis resipyan yo. 

Nan ka nou an, ajan yo dwe bay mòso bwa nan yon fòma estanda, tagged ak throttled. Yo ta dwe tou ba nou estanda metriz ki extensible nan yon pèspektiv aplikasyon biznis.

Ajan yo vle di tou sèvis piblik pou operasyon ak antretyen ki ka travay nan diferan sistèm orchestration ki sipòte imaj diferan (Debian, Alpine, Centos, elatriye).

Finalman, ajan yo dwe sipòte senp CI/CD ki gen ladann fichye Docker. Sinon, bato a pral tonbe apa, paske veso yo pral kòmanse delivre sou ray "kwochi".

Bati pwosesis ak aparèy imaj sib

Pou kenbe tout bagay estanda ak jere, yo dwe swiv kèk kalite pwosesis estanda bati. Se poutèt sa, nou deside kolekte resipyan pa resipyan - sa a se recursion.

Imaj pwodiksyon-pare pou k8s

Isit la resipyan yo reprezante pa deskripsyon solid. An menm tan, yo deside mete twous distribisyon yo pou "lavi pa sanble franbwazye." Poukisa sa a te fè, nou pral eksplike anba a.
 
Rezilta a se yon zouti konstriksyon—yon veso ki espesifik pou vèsyon ki fè referans a vèsyon distribisyon espesifik ak vèsyon script espesifik.

Ki jan nou sèvi ak li? Nou gen yon Docker Hub ki gen yon veso. Nou glas li andedan sistèm nou an pou debarase m de depandans ekstèn. Rezilta a se yon veso ki make an jòn. Nou kreye yon modèl pou enstale tout distribisyon ak scripts nou bezwen nan veso a. Apre sa, nou rasanble yon imaj ki pare pou itilize: devlopè mete kòd ak kèk nan pwòp depandans espesyal yo nan li. 

Ki sa ki bon nan apwòch sa a? 

  • Premyèman, kontwòl vèsyon konplè sou zouti bati - bati veso, script ak vèsyon distribisyon. 
  • Dezyèmman, nou te reyalize normalisation: nou kreye modèl, imaj entèmedyè ak pare pou itilize nan menm fason an. 
  • Twazyèmman, kontenè yo ban nou portabilite. Jodi a nou itilize Gitlab, epi demen nou pral chanje nan TeamCity oswa Jenkins epi nou pral kapab kouri kontenè nou yo menm jan an. 
  • Katriyèm, minimize depandans. Se pa yon konyensidans ke nou mete kit distribisyon nan veso a, paske sa pèmèt nou evite telechaje yo sou entènèt la chak fwa. 
  • Senkyèmman, vitès la bati ogmante - prezans nan kopi lokal imaj pèmèt ou evite gaspiye tan sou telechaje, paske gen yon imaj lokal yo. 

Nan lòt mo, nou te reyalize yon pwosesis asanble kontwole ak fleksib. Nou itilize menm zouti yo pou konstwi nenpòt resipyan konplètman vèsyon. 

Ki jan pwosedi bati nou an ap travay

Imaj pwodiksyon-pare pou k8s

Se asanble a te lanse ak yon sèl kòmand, pwosesis la egzekite nan imaj la (ak make an wouj). Pwomotè a gen yon dosye Docker (akliye an jòn), nou rann li, ranplase varyab ak valè. Ak sou wout la nou ajoute tèt ak pye - sa yo se ajan nou yo. 

Header ajoute distribisyon soti nan imaj korespondan yo. Ak footer enstale sèvis nou yo andedan, konfigirasyon lansman chaj travay, anrejistreman ak lòt ajan, ranplase entrypoint, elatriye. 

Imaj pwodiksyon-pare pou k8s

Nou te panse pou yon tan long si yo enstale yon sipèvizè. Finalman, nou te deside ke nou te bezwen li. Nou te chwazi S6. Sipèvizè a bay jesyon veso a: pèmèt ou konekte ak li si pwosesis prensipal la aksidan epi li bay jesyon manyèl veso a san yo pa rekreye li. Jounal ak mezi yo se pwosesis k ap kouri andedan veso a. Yo tou bezwen kontwole yon jan kanmenm, epi nou fè sa avèk èd nan yon sipèvizè. Finalman, S6 a pran swen nan antretyen, pwosesis siyal ak lòt travay.

Depi nou itilize diferan sistèm orchestration, apre yo fin bati ak kouri, veso a dwe konprann nan ki anviwònman li ye epi aji selon sitiyasyon an. Pa egzanp:
Sa a pèmèt nou bati yon imaj epi kouri li nan diferan sistèm òkestrasyon, epi li pral lanse an konsiderasyon spesifik yo nan sistèm òkestrasyon sa a.

 Imaj pwodiksyon-pare pou k8s

Pou menm veso a nou jwenn diferan pye bwa pwosesis nan Docker ak Kubernetes:

Imaj pwodiksyon-pare pou k8s

Se chaj la egzekite anba sipèvizyon S6. Peye atansyon sou pèseptè ak evènman - sa yo se ajan nou yo ki responsab pou mòso bwa ak mezi. Kubernetes pa genyen yo, men Docker genyen. Poukisa? 

Si nou gade spesifikasyon "gous la" (apwe sa - Kubernetes gous), nou pral wè ke veso evènman an egzekite nan yon gous, ki gen yon veso pèseptè separe ki fè fonksyon pou kolekte metrik ak mòso bwa. Nou ka itilize kapasite Kubernetes: kouri kontenè nan yon sèl gous, nan yon sèl pwosesis ak / oswa espas rezo. Aktyèlman prezante ajan ou yo ak fè kèk fonksyon. Men, si se menm veso a te lanse nan Docker, li pral resevwa tout kapasite yo menm jan ak pwodiksyon, se sa ki, li pral kapab delivre mòso bwa ak mezi, depi ajan yo pral lanse intern. 

Metrik ak mòso bwa

Livre mesures Et journaux se yon travay konplèks. Gen plizyè aspè nan desizyon li.
Se enfrastrikti a kreye pou ekzekisyon chaj la, epi yo pa pou livrezon an mas mòso bwa. Sa vle di, pwosesis sa a dwe fèt ak kondisyon minimòm resous veso. Nou fè efò pou ede devlopè nou yo: "Jwenn yon veso Docker Hub, kouri li, epi nou ka delivre mòso bwa yo." 

Dezyèm aspè a se limite volim nan mòso bwa. Si yon ogmantasyon nan volim mòso bwa yo rive nan plizyè resipyan (aplikasyon an bay yon tras nan yon bouk), chaj la sou CPU a, chanèl kominikasyon yo, ak sistèm pwosesis boutèy demi lit la ogmante, e sa afekte operasyon an nan lame a kòm yon. kontenè antye ak lòt sou lame a, Lè sa a, pafwa sa a mennen nan "tonbe" nan lame a. 

Twazyèm aspè a se ke li nesesè pou sipòte otan metòd koleksyon mezi posib soti nan bwat la. Soti nan lekti dosye ak sondaj Prometheus-endpoint pou itilize pwotokòl espesifik aplikasyon an.

Ak dènye aspè a se pou minimize konsomasyon resous.

Nou te chwazi yon solisyon Go open-source ki rele Telegraf. Sa a se yon konektè inivèsèl ki sipòte plis pase 140 kalite chanèl opinyon (plugin antre) ak 30 kalite chanèl pwodiksyon (plugin pwodiksyon). Nou te finalize li epi kounye a nou pral di w kouman nou itilize li lè l sèvi avèk Kubernetes kòm yon egzanp. 

Imaj pwodiksyon-pare pou k8s

Ann di yon pwomotè deplwaye yon kantite travay epi Kubernetes resevwa yon demann pou kreye yon gous. Nan pwen sa a, yon veso ki rele Pèseptè otomatikman kreye pou chak gous (nou itilize webhook mitasyon). Pèseptè se ajan nou an. Nan kòmansman an, veso sa a konfigirasyon tèt li pou travay avèk Prometheus ak sistèm koleksyon boutèy demi lit la.

  • Pou fè sa, li sèvi ak anotasyon gous, epi depann sou kontni li yo, kreye, di, yon pwen final Prometheus; 
  • Dapre spesifikasyon gous la ak paramèt veso espesifik yo, li deside ki jan yo delivre mòso bwa.

Nou kolekte mòso bwa atravè API Docker: devlopè yo jis bezwen mete yo nan stdout oswa stderr, epi Pèseptè a pral regle li. Mòso bwa yo kolekte an fragman ak kèk reta pou anpeche posib surcharge lame. 

Paramèt yo kolekte atravè ka travay (pwosesis) nan resipyan yo. Tout bagay make: espas non, anba, ak sou sa, ak Lè sa a, konvèti nan fòma Prometheus - epi li vin disponib pou koleksyon (eksepte pou mòso bwa). Nou menm tou nou voye mòso bwa, mezi ak evènman bay Kafka ak plis ankò:

  • Jounal yo disponib nan Graylog (pou analiz vizyèl);
  • Yo voye mòso bwa, mezi, evènman yo bay Clickhouse pou depo alontèm.

Tout bagay ap travay egzakteman menm jan an nan AWS, sèlman nou ranplase Graylog ak Kafka ak Cloudwatch. Nou voye mòso bwa yo la, ak tout bagay vin trè pratik: li imedyatman klè ki gwoup ak veso yo fè pati. Menm bagay la tou vre pou Google Stackdriver. Sa vle di, konplo nou an travay tou de sou lokal ak Kafka ak nan nwaj la. 

Si nou pa gen Kubernetes ak gous, konplo a se yon ti kras pi konplike, men li travay sou menm prensip yo.

Imaj pwodiksyon-pare pou k8s

Pwosesis yo menm yo egzekite andedan veso a, yo òkestre lè l sèvi avèk S6. Tout menm pwosesis yo ap kouri andedan menm veso a.

Nan fen an

Nou te kreye yon solisyon konplè pou bati ak lanse imaj, ak opsyon pou kolekte ak livrezon mòso bwa ak mezi:

  • Nou devlope yon apwòch estanda pou rasanble imaj, epi baze sou li nou devlope modèl CI;
  • Ajan koleksyon done yo se ekstansyon Telegraf nou an. Nou teste yo byen nan pwodiksyon;
  • Nou itilize webhook mitasyon pou aplike resipyan ak ajan nan gous; 
  • Entegre nan ekosistèm Kubernetes/Rancher;
  • Nou ka egzekite menm kontenè yo nan diferan sistèm orchestration epi jwenn rezilta nou espere a;
  • Kreye yon konfigirasyon jesyon veso konplètman dinamik. 

Ko-otè: Ilya Prudnikov

Sous: www.habr.com

Add nouvo kòmantè