Wêneyên amade-hilberîna ji bo k8s

Ev çîrok li ser vê yekê ye ku em çawa konteyneran di hawîrdorek hilberînê de bikar tînin, nemaze Kubernetes. Gotar ji berhevkirina metrîk û têketin ji konteyneran, û hem jî çêkirina wêneyan ve girêdayî ye.

Wêneyên amade-hilberîna ji bo k8s

Em ji pargîdaniya fintech Exness ne, ku karûbarên ji bo bazirganiya serhêl û hilberên fintech ji bo B2B û B2C pêş dixe. R&D me gelek tîmên cihêreng hene, beşa pêşkeftinê 100+ karmend hene.

Em tîmê ku berpirsiyarê platformê ye ji pêşdebirên me re temsîl dikin ku kodê berhev bikin û bimeşînin. Bi taybetî, em ji berhevkirin, hilanîn û raporkirina metrîk, têketin û bûyeran ji serîlêdanan berpirsiyar in. Em niha bi qasî sê hezar konteynerên Docker di hawîrdorek hilberînê de dixebitin, hilanîna daneyên mezin ên 50 TB diparêzin, û çareseriyên mîmarî yên ku li dora binesaziya me hatine çêkirin peyda dikin: Kubernetes, Rancher, û pêşkêşkerên ewr ên gelemperî. 

Motivasyona me

Çi dişewite? Kes nikare bersivê bide. Li ku derê ye ocax? Zehmet e ku meriv fêm bike. Kengî agir pê ket? Hûn dikarin fêr bibin, lê ne tavilê. 

Wêneyên amade-hilberîna ji bo k8s

Çima hin konteynir radiwestin hinên din ketine? Kîjan konteynir sûcdar bû? Jixwe, derveyî konteyneran yek in, lê di hundurê her yekê de Neo-ya xwe heye.

Wêneyên amade-hilberîna ji bo k8s

Pêşdebirên me mirovên jêhatî ne. Ew karûbarên baş çêdikin ku ji pargîdaniyê re qezencê tîne. Lê gava ku konteynerên bi sepanan ji rê derdikevin, têkçûn hene. Yek konteynir pir CPU dixwe, ya din torê dixwe, ya sêyemîn operasyonên I/O dixwe, û ya çaremîn bi tevahî ne diyar e ka ew bi soketan re çi dike. Hemû dikeve û keştî binav dibe. 

Agents

Ji bo ku em fêm bikin ka li hundur çi diqewime, me biryar da ku ajanan rasterast di konteyneran de bi cîh bikin.

Wêneyên amade-hilberîna ji bo k8s

Van ajanan bernameyên rêgirtinê ne ku konteyneran di rewşek wusa de dihêlin ku hevûdu neşkînin. Nûnerên standard têne kirin, û ev rê dide nêzîkatiyek standardkirî ya xizmetkirina konteyneran. 

Di doza me de, ajan divê têketinên bi formatek standard peyda bikin, tagkirin û qut kirin. Di heman demê de divê ew metrîkên standardkirî yên ku ji perspektîfa serîlêdana karsaziyê ve têne berfireh kirin jî peyda bikin.

Ajan di heman demê de tê wateya karûbarên ji bo xebitandin û domandin ku dikarin di pergalên orkestrasyonê yên cihêreng ên ku wêneyên cihêreng piştgirî dikin de bixebitin (Debian, Alpine, Centos, hwd.).

Di dawiyê de, ajan divê CI / CD-ya hêsan a ku pelên Docker-ê vedihewîne piştgirî bikin. Wekî din, keştî dê perçe bibe, ji ber ku konteynir dê li ser rêyên "xew" dest pê bikin.

Pêvajoyê ava bikin û amûrê wêneyê armanc bikin

Ji bo ku her tişt standardîzekirin û rêvebirin bimîne, pêdivî ye ku pêvajoyek avakirina standardek were şopandin. Ji ber vê yekê, me biryar da ku konteyneran bi konteyneran berhev bikin - ev veger e.

Wêneyên amade-hilberîna ji bo k8s

Li vir konteynir bi xêzên hişk têne temsîl kirin. Di heman demê de, wan biryar da ku kîteyên belavkirinê têxin nav wan da ku "jiyan wekî rîspî nexuya." Çima ev hat kirin, em ê li jêr rave bikin.
 
Encam amûrek çêkirinê ye - konteynirek guhertoyek taybetî ya ku guhertoyên belavkirinê yên taybetî û guhertoyên skrîptê yên taybetî vedibêje.

Em çawa bikar tînin? Me Docker Hub heye ku konteynir heye. Em wê di hundurê pergala xwe de neynikê dikin da ku ji girêdanên derveyî xilas bibin. Di encamê de konteynirek bi zer hatî nîşankirin. Em şablonek diafirînin da ku hemî belavok û nivîsarên ku em hewce ne di konteynerê de saz bikin. Piştî wê, em wêneyek amade-bikaranîna berhev dikin: pêşdebiran kod û hin girêdanên xwe yên taybetî tê de danîne. 

Di vê nêzîkbûnê de çi baş e? 

  • Pêşîn, kontrola guhertoya tevahî ya amûrên çêkirinê - guhertoyên konteynir, nivîsar û belavkirinê ava bikin. 
  • Ya duyemîn, me gihîştiye standardbûnê: em bi heman rengî şablon, wêneya navîn û amade-kar diafirînin. 
  • Sêyemîn, konteynir barkêşiyê dide me. Îro em Gitlab bikar tînin, û sibe em ê veguherînin TeamCity an Jenkins û em ê karibin konteynerên xwe bi heman rengî bimeşînin. 
  • Çaremîn, kêmkirina girêdanan. Ne tesaduf bû ku me kîtên belavkirinê di konteynerê de danîn, ji ber ku ev dihêle ku em her carê ji dakêşana wan ji Înternetê dûr bisekinin. 
  • Ya pêncemîn, leza çêkirinê zêde bûye - hebûna kopiyên herêmî yên wêneyan dihêle hûn ji wendakirina wextê li ser dakêşanê dûr bisekinin, ji ber ku wêneyek herêmî heye. 

Bi gotineke din, me pêvajoyek kombûnê ya kontrolkirî û nerm bi dest xist. Em heman amûran bikar tînin da ku konteynerên bi tevahî guhertoyî ava bikin. 

Pêvajoya avakirina me çawa dixebite

Wêneyên amade-hilberîna ji bo k8s

Civîn bi yek fermanê tê dest pê kirin, pêvajo di wêneyê de (bi rengê sor hatî ronî kirin) tê meşandin. Pêşdebir pelek Docker heye (bi zer hatî ronî kirin), em wê derdixin, guhêrbaran bi nirxan diguhezînin. Û di rê de em sernivîs û pêlavan lê zêde dikin - ev ajanên me ne. 

Header belavkirinên ji wêneyên têkildar zêde dike. Û footer karûbarên me li hundur saz dike, destpêkirina bargiraniya xebatê, têketin û ajanên din mîheng dike, cîhê têketinê vedigire, hwd. 

Wêneyên amade-hilberîna ji bo k8s

Em demek dirêj difikirîn ka em çavdêriyek saz bikin. Di dawiyê de, me biryar da ku em hewceyê wî ne. Me S6 hilbijart. Serperiştkar rêveberiya konteynerê peyda dike: dihêle hûn pê ve girêbidin ger pêvajoya sereke têk biçe û bêyî ku wê ji nû ve ava bike rêveberiya destan a konteynerê peyda dike. Têketin û metrîk pêvajoyên ku di hundurê konteynerê de dimeşin in. Divê ew jî bi awayekî bêne kontrol kirin, û em vê yekê bi alîkariya çavdêrek dikin. Di dawiyê de, S6 lênêrîna xanî, pêvajoyek nîşanê û karên din digire.

Ji ber ku em pergalên orkestrasyonê yên cihêreng bikar tînin, piştî çêkirin û xebitandinê, konteynir divê fêm bike ka ew di çi hawîrdorê de ye û li gorî rewşê tevbigere. Bo nimûne:
Ev rê dide me ku em yek wêne ava bikin û wê di pergalên orkestrasyonê yên cihêreng de bimeşînin, û ew ê li gorî taybetmendiyên vê pergala orkestrasyonê were destpêkirin.

 Wêneyên amade-hilberîna ji bo k8s

Ji bo heman konteynerê em di Docker û Kubernetes de darên pêvajoyê yên cûda digirin:

Wêneyên amade-hilberîna ji bo k8s

Pevçûn di bin çavdêriya S6 de têne darve kirin. Bala xwe bidin berhevkar û bûyeran - ev ajanên me yên ji têketin û metrikan berpirsiyar in. Kubernetes wan tune, lê Docker heye. Çima? 

Ger em li taybetmendiya "pod" (li vir - Kubernetes pod) mêze bikin, em ê bibînin ku konteynera bûyeran di podek de tête darve kirin, ku xwedan konteynirek berhevokê ya cihê ye ku fonksiyona berhevkirina metrîk û têketin pêk tîne. Em dikarin kapasîteyên Kubernetes bikar bînin: konteyneran di yek pod de, di yek pêvajoyek û / an cîhê torê de dimeşînin. Bi rastî nûnerên xwe bidin nasîn û hin fonksiyonan pêk bînin. Û heke heman konteynir di Docker de were destpêkirin, ew ê hemî kapasîteyên wekî derketinê bistîne, ango, ew ê bikaribe têketin û metrîkan radest bike, ji ber ku dê ajan di hundurê de bêne destpêkirin. 

Metrics û têketin

Radestkirina metrîk û têketin karekî tevlihev e. Gelek aliyên biryara wê hene.
Binesaziya ji bo pêkanîna bargiraniyê, û ne ji bo radestkirina girseyî ya têketinê tê afirandin. Ango, divê ev pêvajo bi hewcedariyên çavkaniya konteynerê hindik were meşandin. Em hewl didin ku alîkariya pêşdebirên xwe bikin: "Konteynirek Docker Hub bistînin, wê bimeşînin, û em dikarin têketinan radest bikin." 

Aliyê duyemîn sînordarkirina qebareya têketin e. Ger di çend konteyneran de zêdebûnek di hêjmara têketinê de çêbibe (serlêdan di lûkê de şop-şopek derdixe), barkirina li ser CPU, kanalên ragihandinê û pergala pêvajoyek têketinê zêde dibe, û ev yek bandorê li xebata mêvandar dike. tevahî û konteynerên din ên li ser mêvandar, wê hingê carinan ev dibe sedema "ketina" mêvandar. 

Aliyê sêyem ev e ku pêdivî ye ku meriv bi qasî ku pêkan ji rêgezên berhevkirina metrîkan piştgirî bike. Ji xwendina pelan û anketa Prometheus-endpoint heya karanîna protokolên taybetî yên serîlêdanê.

Û aliyê paşîn kêmkirina xerckirina çavkaniyê ye.

Me çareseriyek Go-çavkaniya vekirî ya bi navê Telegraf hilbijart. Ev girêdanek gerdûnî ye ku ji zêdetirî 140 celeb kanalên têketinê (pêvekên têketinê) û 30 celeb kanalên derketinê (pêvekên derketinê) piştgirî dike. Me ew qedand û naha em ê ji we re vebêjin ka em wê çawa wekî mînakek Kubernetes bikar tînin. 

Wêneyên amade-hilberîna ji bo k8s

Ka em bibêjin pêşdebirek barkêşek kar bi cih dike û Kubernetes daxwazek ji bo afirandina podek werdigire. Di vê nuqteyê de, konteynirek bi navê Collector bixweber ji bo her podek tê çêkirin (em webhookê mutasyonê bikar tînin). Berhevkarê me ye. Di destpêkê de, ev konteynir xwe mîheng dike ku bi Prometheus û pergala berhevkirina têketinê re bixebite.

  • Ji bo vê yekê, ew şîroveyên pod bikar tîne, û li gorî naveroka wê, xala dawiya Prometheus diafirîne; 
  • Li ser bingeha taybetmendiya pod û mîhengên konteynerê taybetî, ew biryar dide ka meriv çawa têketin radest dike.

Em bi navgîniya Docker API-yê têketin berhev dikin: pêşdebiran tenê hewce ne ku wan têxin stdout an stderr, û Kolekter dê wê ji hev veqetîne. Ji bo pêşîgirtina li bargiraniya muhtemel a mêvandar, têketin bi hin derengiyê bi perçeyan têne berhev kirin. 

Metrîk li ser bûyerên barkêşiya kar (pêvajoyên) di konteyneran de têne berhev kirin. Her tişt tê etîket kirin: cîhê nav, bin, û hwd, û dûv re vediguhezîne forma Prometheus - û ji bo berhevkirinê peyda dibe (ji bilî têketin). Em jî têketin, metrîk û bûyeran ji Kafka re û yên din re jî dişînin:

  • Têketin di Graylogê de hene (ji bo analîza dîtbar);
  • Têketin, metrîk, bûyer ji bo hilanîna demdirêj ji Clickhouse re têne şandin.

Her tişt di AWS-ê de bi heman rengî dixebite, tenê em Graylog bi Kafka re bi Cloudwatch veguherînin. Em qeydan dişînin wir, û her tişt pir hêsan derdikeve: tavilê diyar e ku ew ji kîjan kom û konteynerê ne. Heman tişt ji bo Google Stackdriver jî rast e. Ango plana me hem bi Kafka re hem jî di nav ewr de kar dike. 

Ger Kubernetes bi podsên me tune bin, nexşe hinekî tevlihevtir e, lê ew li ser heman prensîban dixebite.

Wêneyên amade-hilberîna ji bo k8s

Heman pêvajoyên di hundurê konteynerê de têne darve kirin, ew bi karanîna S6 ve têne rêve kirin. Hemî heman pêvajoyên di hundurê heman konteynerê de dimeşînin.

Di encama vê çalakiyê,

Me çareseriyek bêkêmasî ji bo çêkirin û destpêkirina wêneyan, digel vebijarkên berhevkirin û radestkirina têketin û metrîkan afirandiye:

  • Me ji bo berhevkirina wêneyan rêgezek standardkirî pêşxist, û li ser bingeha wê me şablonên CI pêşve xistin;
  • Nûnerên berhevkirina daneyan pêvekên me yên Telegraf in. Me wan di hilberînê de baş ceriband;
  • Em webhook-a mutasyonê bikar tînin da ku konteynerên bi ajanên di potan de bicîh bikin; 
  • Di ekosîstema Kubernetes/Rancher de yekbûyî;
  • Em dikarin heman konteyneran di pergalên orkestrasyonê yên cihêreng de bicîh bikin û encama ku em hêvî dikin bistînin;
  • Veavakirinek rêveberiya konteynerê bi tevahî dînamîkî afirand. 

Hev-nivîskar: Ilya Prudnikov

Source: www.habr.com

Add a comment