Picha zilizo tayari kwa utengenezaji wa k8s

Hadithi hii inahusu jinsi tunavyotumia kontena katika mazingira ya uzalishaji, haswa Kubernetes. Nakala hiyo imejitolea kukusanya vipimo na kumbukumbu kutoka kwa vyombo, pamoja na picha za ujenzi.

Picha zilizo tayari kwa utengenezaji wa k8s

Sisi ni kutoka kampuni ya fintech Exness, ambayo inakuza huduma za biashara ya mtandaoni na bidhaa za fintech kwa B2B na B2C. R&D yetu ina timu nyingi tofauti, idara ya maendeleo ina wafanyikazi 100+.

Tunawakilisha timu ambayo inawajibika kwa jukwaa kwa wasanidi wetu kukusanya na kuendesha msimbo. Hasa, tuna jukumu la kukusanya, kuhifadhi na kuripoti vipimo, kumbukumbu na matukio kutoka kwa programu. Kwa sasa tunaendesha takriban kontena elfu tatu za Docker katika mazingira ya uzalishaji, kudumisha hifadhi yetu kubwa ya data ya TB 50, na kutoa masuluhisho ya usanifu ambayo yamejengwa karibu na miundombinu yetu: Kubernetes, Rancher, na watoa huduma mbalimbali wa wingu wa umma. 

Motisha yetu

Ni nini kinachowaka? Hakuna anayeweza kujibu. Makao iko wapi? Ni vigumu kuelewa. Ilishika moto lini? Unaweza kujua, lakini sio mara moja. 

Picha zilizo tayari kwa utengenezaji wa k8s

Mbona makontena mengine yamesimama huku mengine yameanguka? Ni kontena gani lilipaswa kulaumiwa? Baada ya yote, nje ya vyombo ni sawa, lakini ndani ya kila mmoja ana Neo yake mwenyewe.

Picha zilizo tayari kwa utengenezaji wa k8s

Watengenezaji wetu ni watu wenye uwezo. Wanafanya huduma nzuri zinazoleta faida kwa kampuni. Lakini kuna kushindwa wakati vyombo vilivyo na maombi vinapotoka. Chombo kimoja kinatumia CPU nyingi sana, kingine kinatumia mtandao, cha tatu kinatumia shughuli za I/O, na cha nne haijulikani kabisa kinafanya nini na soketi. Yote yaanguka na meli inazama. 

Mawakala

Ili kuelewa kinachotokea ndani, tuliamua kuweka mawakala moja kwa moja kwenye makontena.

Picha zilizo tayari kwa utengenezaji wa k8s

Mawakala hawa ni mipango ya kuzuia ambayo huweka makontena katika hali ambayo hayavunjiki. Mawakala ni sanifu, na hii inaruhusu mbinu sanifu ya kuhudumia kontena. 

Kwa upande wetu, mawakala lazima watoe kumbukumbu katika umbizo la kawaida, zilizowekwa lebo na zilizopigwa. Wanapaswa pia kutupatia vipimo vilivyosanifiwa ambavyo vinaweza kupanuliwa kutoka kwa mtazamo wa maombi ya biashara.

Mawakala pia humaanisha huduma za uendeshaji na matengenezo ambazo zinaweza kufanya kazi katika mifumo tofauti ya okestration inayoauni picha tofauti (Debian, Alpine, Centos, nk.).

Hatimaye, mawakala lazima watumie CI/CD rahisi inayojumuisha faili za Docker. Vinginevyo, meli itaanguka, kwa sababu vyombo vitaanza kutolewa kando ya reli "zilizopotoka".

Kuunda mchakato na kifaa cha picha lengwa

Ili kuweka kila kitu kiwe sanifu na kudhibitiwa, aina fulani ya mchakato wa kawaida wa uundaji unahitaji kufuatwa. Kwa hivyo, tuliamua kukusanya vyombo na vyombo - hii ni kujirudia.

Picha zilizo tayari kwa utengenezaji wa k8s

Hapa vyombo vinawakilishwa na muhtasari thabiti. Wakati huo huo, waliamua kuweka vifaa vya usambazaji ndani yao ili "maisha yasionekane kama raspberries." Kwa nini hii ilifanyika, tutaelezea hapa chini.
 
Matokeo yake ni zana ya kuundaβ€”chombo maalum cha toleo ambacho kinarejelea matoleo mahususi ya usambazaji na matoleo mahususi ya hati.

Je, tunaitumiaje? Tuna Docker Hub ambayo ina kontena. Tunaiakisi ndani ya mfumo wetu ili kuondokana na utegemezi wa nje. Matokeo yake ni chombo kilichowekwa alama ya njano. Tunaunda kiolezo cha kusanikisha usambazaji na maandishi yote tunayohitaji kwenye chombo. Baada ya hayo, tunakusanya picha iliyo tayari kutumia: watengenezaji huweka msimbo na baadhi ya utegemezi wao maalum ndani yake. 

Nini nzuri kuhusu mbinu hii? 

  • Kwanza, udhibiti wa toleo kamili la zana za ujenzi - chombo cha kujenga, hati na matoleo ya usambazaji. 
  • Pili, tumefikia viwango: tunaunda violezo, picha za kati na tayari kutumia kwa njia ile ile. 
  • Tatu, vyombo vinatupa uwezo wa kubebeka. Leo tunatumia Gitlab, na kesho tutabadilisha hadi TeamCity au Jenkins na tutaweza kuendesha vyombo vyetu kwa njia sawa. 
  • Nne, kupunguza utegemezi. Haikuwa bahati mbaya kwamba tuliweka vifaa vya usambazaji kwenye chombo, kwa sababu hii inaruhusu sisi kuzuia kupakua kutoka kwa mtandao kila wakati. 
  • Tano, kasi ya kujenga imeongezeka - kuwepo kwa nakala za ndani za picha inakuwezesha kuepuka kupoteza muda kwenye kupakua, kwa kuwa kuna picha ya ndani. 

Kwa maneno mengine, tumefanikisha mchakato wa mkusanyiko unaodhibitiwa na unaonyumbulika. Tunatumia zana zile zile ili kujenga vyombo vyovyote vilivyotolewa kikamilifu. 

Jinsi utaratibu wetu wa ujenzi unavyofanya kazi

Picha zilizo tayari kwa utengenezaji wa k8s

Mkutano umezinduliwa kwa amri moja, mchakato unafanywa kwenye picha (iliyoonyeshwa kwa nyekundu). Msanidi programu ana faili ya Docker (iliyoangaziwa kwa manjano), tunaitoa, tukibadilisha vijiti na maadili. Na njiani tunaongeza vichwa na vijachini - hawa ni mawakala wetu. 

Kijajuu huongeza usambazaji kutoka kwa picha zinazolingana. Na kijachini husakinisha huduma zetu ndani, husanidi uzinduzi wa mzigo wa kazi, kumbukumbu na mawakala wengine, kuchukua nafasi ya kiingilio, n.k. 

Picha zilizo tayari kwa utengenezaji wa k8s

Tulifikiria kwa muda mrefu ikiwa tutasakinisha msimamizi. Mwishowe, tuliamua kwamba tunamhitaji. Tulichagua S6. Msimamizi hutoa usimamizi wa kontena: hukuruhusu kuunganishwa nayo ikiwa mchakato mkuu utaanguka na kutoa usimamizi wa mwongozo wa kontena bila kuunda upya. Kumbukumbu na vipimo ni michakato inayoendeshwa ndani ya kontena. Pia zinahitaji kudhibitiwa kwa namna fulani, na tunafanya hivyo kwa msaada wa msimamizi. Hatimaye, S6 inachukua huduma ya uhifadhi wa nyumba, usindikaji wa ishara na kazi nyingine.

Kwa kuwa tunatumia mifumo tofauti ya ochestration, baada ya kujenga na kukimbia, chombo lazima kielewe ni mazingira gani na kutenda kulingana na hali hiyo. Kwa mfano:
Hii inaturuhusu kuunda picha moja na kuiendesha katika mifumo tofauti ya okestra, na itazinduliwa kwa kuzingatia mahususi ya mfumo huu wa okestration.

 Picha zilizo tayari kwa utengenezaji wa k8s

Kwa chombo kimoja tunapata miti tofauti ya mchakato huko Docker na Kubernetes:

Picha zilizo tayari kwa utengenezaji wa k8s

Mzigo wa malipo unatekelezwa chini ya usimamizi wa S6. Zingatia wakusanyaji na matukio - hawa ni mawakala wetu wanaowajibika kwa kumbukumbu na vipimo. Kubernetes hana, lakini Docker anayo. Kwa nini? 

Ikiwa tunatazama maelezo ya "pod" (hapa - pod ya Kubernetes), tutaona kwamba chombo cha matukio kinatekelezwa kwenye pod, ambayo ina chombo tofauti cha ushuru ambacho hufanya kazi ya kukusanya metrics na magogo. Tunaweza kutumia uwezo wa Kubernetes: kuendesha vyombo kwenye ganda moja, katika mchakato mmoja na/au nafasi ya mtandao. Kwa kweli watambulishe mawakala wako na utekeleze baadhi ya vipengele. Na ikiwa chombo sawa kitazinduliwa katika Docker, kitapokea uwezo wote sawa na pato, yaani, itaweza kutoa kumbukumbu na metriki, kwa kuwa mawakala watazinduliwa ndani. 

Vipimo na kumbukumbu

Kuwasilisha vipimo na kumbukumbu ni kazi ngumu. Kuna mambo kadhaa katika uamuzi wake.
Miundombinu imeundwa kwa ajili ya utekelezaji wa mzigo wa malipo, na si kwa utoaji wa wingi wa magogo. Hiyo ni, mchakato huu lazima ufanyike na mahitaji madogo ya rasilimali ya chombo. Tunajitahidi kusaidia wasanidi wetu: "Pata kontena la Docker Hub, liendeshe, na tunaweza kuwasilisha kumbukumbu." 

Kipengele cha pili ni kupunguza kiasi cha magogo. Ikiwa ongezeko la ujazo wa magogo hutokea katika vyombo kadhaa (programu itasababisha ufuatiliaji wa safu kwenye kitanzi), mzigo kwenye CPU, njia za mawasiliano, na mfumo wa usindikaji wa logi huongezeka, na hii inathiri utendakazi wa mwenyeji kama vyombo vyote na vingine kwenye mwenyeji, basi wakati mwingine hii inasababisha "kuanguka" kwa mwenyeji. 

Kipengele cha tatu ni kwamba ni muhimu kutumia mbinu nyingi za ukusanyaji wa metriki iwezekanavyo nje ya kisanduku. Kutoka kwa kusoma faili na upigaji kura Prometheus-endpoint hadi kutumia itifaki maalum za programu.

Na jambo la mwisho ni kupunguza matumizi ya rasilimali.

Tulichagua suluhisho la Go la chanzo-wazi linaloitwa Telegraf. Hiki ni kiunganishi cha ulimwengu wote ambacho kinaauni zaidi ya aina 140 za chaneli za ingizo (ingizo jalizi) na aina 30 za chaneli za kutoa (plugins za pato). Tumeikamilisha na sasa tutakuambia jinsi tunavyoitumia kwa kutumia Kubernetes kama mfano. 

Picha zilizo tayari kwa utengenezaji wa k8s

Wacha tuseme msanidi programu anatumia mzigo wa kazi na Kubernetes inapokea ombi la kuunda ganda. Katika hatua hii, chombo kinachoitwa Collector kinaundwa kiotomatiki kwa kila ganda (tunatumia webhook ya mutation). Mtoza ni wakala wetu. Mwanzoni, chombo hiki kinajisanidi kufanya kazi na Prometheus na mfumo wa kukusanya kumbukumbu.

  • Ili kufanya hivyo, hutumia maelezo ya pod, na kulingana na maudhui yake, huunda, sema, mwisho wa Prometheus; 
  • Kulingana na vipimo vya ganda na mipangilio mahususi ya kontena, huamua jinsi ya kutoa kumbukumbu.

Tunakusanya kumbukumbu kupitia API ya Docker: watengenezaji wanahitaji tu kuziweka kwenye stdout au stderr, na Mtoza ataitatua. Kumbukumbu hukusanywa kwa vipande na kucheleweshwa ili kuzuia uwezekano wa upakiaji wa mwenyeji. 

Vipimo hukusanywa katika matukio ya mzigo wa kazi (michakato) katika vyombo. Kila kitu kimetambulishwa: nafasi ya majina, chini, na kadhalika, na kisha kubadilishwa kuwa muundo wa Prometheus - na inapatikana kwa mkusanyiko (isipokuwa kwa kumbukumbu). Pia tunatuma kumbukumbu, vipimo na matukio kwa Kafka na zaidi:

  • Kumbukumbu zinapatikana katika Graylog (kwa uchambuzi wa kuona);
  • Kumbukumbu, vipimo, matukio hutumwa kwa Clickhouse kwa hifadhi ya muda mrefu.

Kila kitu hufanya kazi sawa katika AWS, ni sisi tu tunabadilisha Graylog na Kafka na Cloudwatch. Tunatuma magogo huko, na kila kitu kinageuka kuwa rahisi sana: ni wazi mara moja ambayo ni ya nguzo na chombo. Ndivyo ilivyo kwa Google Stackdriver. Hiyo ni, mpango wetu hufanya kazi kwa msingi na Kafka na katika wingu. 

Ikiwa hatuna Kubernetes na maganda, mpango huo ni ngumu zaidi, lakini unafanya kazi kwa kanuni sawa.

Picha zilizo tayari kwa utengenezaji wa k8s

Taratibu sawa zinatekelezwa ndani ya chombo, zimepangwa kwa kutumia S6. Michakato yote sawa inaendeshwa ndani ya chombo kimoja.

Mwishowe

Tumeunda suluhisho kamili la kuunda na kuzindua picha, na chaguzi za kukusanya na kuwasilisha kumbukumbu na vipimo:

  • Tulitengeneza mbinu sanifu ya kuunganisha picha, na kwa kuzingatia hilo tulitengeneza violezo vya CI;
  • Mawakala wa kukusanya data ni viendelezi vyetu vya Telegraf. Tuliwajaribu vizuri katika uzalishaji;
  • Tunatumia mutation webhook kutekeleza vyombo na mawakala katika maganda; 
  • Imejumuishwa katika mfumo ikolojia wa Kubernetes/Rancher;
  • Tunaweza kutekeleza vyombo sawa katika mifumo tofauti ya okestration na kupata matokeo tunayotarajia;
  • Imeunda usanidi wa usimamizi wa kontena unaobadilika kabisa. 

Mwandishi mwenza: Ilya Prudnikov

Chanzo: mapenzi.com

Kuongeza maoni