Delweddau parod ar gyfer k8s

Mae'r stori hon yn ymwneud â sut rydym yn defnyddio cynwysyddion mewn amgylchedd cynhyrchu, yn benodol Kubernetes. Mae'r erthygl wedi'i neilltuo i gasglu metrigau a logiau o gynwysyddion, yn ogystal ag adeiladu delweddau.

Delweddau parod ar gyfer k8s

Rydym yn dod o gwmni fintech Exness, sy'n datblygu gwasanaethau ar gyfer masnachu ar-lein a chynhyrchion fintech ar gyfer B2B a B2C. Mae gan ein Ymchwil a Datblygu lawer o wahanol dimau, mae gan yr adran ddatblygu 100+ o weithwyr.

Rydym yn cynrychioli'r tîm sy'n gyfrifol am y platfform i'n datblygwyr gasglu a rhedeg cod. Yn benodol, rydym yn gyfrifol am gasglu, storio ac adrodd ar fetrigau, logiau a digwyddiadau o geisiadau. Ar hyn o bryd rydym yn gweithredu tua thair mil o gynwysyddion Docker mewn amgylchedd cynhyrchu, yn cynnal ein storfa ddata fawr 50 TB, ac yn darparu atebion pensaernïol sy'n cael eu hadeiladu o amgylch ein seilwaith: Kubernetes, Rancher, a darparwyr cwmwl cyhoeddus amrywiol. 

Ein cymhelliant

Beth sy'n llosgi? Ni all neb ateb. Ble mae'r aelwyd? Mae'n anodd deall. Pryd aeth ar dân? Gallwch chi ddarganfod, ond nid ar unwaith. 

Delweddau parod ar gyfer k8s

Pam mae rhai cynwysyddion yn sefyll tra bod eraill wedi cwympo? Pa gynhwysydd oedd ar fai? Wedi'r cyfan, mae tu allan y cynwysyddion yr un peth, ond mae gan bob un ei Neo ei hun y tu mewn.

Delweddau parod ar gyfer k8s

Mae ein datblygwyr yn ddynion cymwys. Maent yn gwneud gwasanaethau da sy'n dod ag elw i'r cwmni. Ond mae methiannau pan fydd cynwysyddion â chymwysiadau'n mynd ar gyfeiliorn. Mae un cynhwysydd yn defnyddio gormod o CPU, mae un arall yn defnyddio'r rhwydwaith, mae traean yn defnyddio gweithrediadau I / O, ac mae'r pedwerydd yn gwbl aneglur beth mae'n ei wneud gyda socedi. Mae'r cyfan yn disgyn ac mae'r llong yn suddo. 

Asiantau

Er mwyn deall beth sy'n digwydd y tu mewn, fe wnaethom benderfynu gosod asiantau yn uniongyrchol mewn cynwysyddion.

Delweddau parod ar gyfer k8s

Mae'r asiantau hyn yn rhaglenni atal sy'n cadw cynwysyddion yn y fath gyflwr fel nad ydynt yn torri ei gilydd. Mae asiantau wedi'u safoni, ac mae hyn yn caniatáu dull safonol o wasanaethu cynwysyddion. 

Yn ein hachos ni, rhaid i asiantau ddarparu boncyffion mewn fformat safonol, wedi'u tagio a'u sbardunu. Dylent hefyd roi metrigau safonol inni sy'n estynadwy o safbwynt cymhwysiad busnes.

Mae asiantau hefyd yn golygu cyfleustodau ar gyfer gweithredu a chynnal a chadw a all weithio mewn gwahanol systemau cerddorfaol sy'n cefnogi gwahanol ddelweddau (Debian, Alpaidd, Centos, ac ati).

Yn olaf, rhaid i asiantau gefnogi CI / CD syml sy'n cynnwys ffeiliau Docker. Fel arall, bydd y llong yn disgyn yn ddarnau, oherwydd bydd cynwysyddion yn dechrau cael eu danfon ar hyd rheiliau “cam”.

Adeiladu proses a dyfais delwedd darged

Er mwyn cadw popeth yn safonol ac yn hylaw, mae angen dilyn rhyw fath o broses adeiladu safonol. Felly, penderfynasom gasglu cynwysyddion gan gynwysyddion - mae hyn yn dychwelyd.

Delweddau parod ar gyfer k8s

Yma cynrychiolir y cynwysyddion gan amlinelliadau solet. Ar yr un pryd, fe benderfynon nhw roi citiau dosbarthu ynddynt fel “nad yw bywyd yn ymddangos fel mafon.” Pam y gwnaed hyn, byddwn yn esbonio isod.
 
Y canlyniad yw offeryn adeiladu - cynhwysydd fersiwn-benodol sy'n cyfeirio at fersiynau dosbarthu penodol a fersiynau sgript penodol.

Sut ydyn ni'n ei ddefnyddio? Mae gennym ni Docker Hub sy'n cynnwys cynhwysydd. Rydym yn ei adlewyrchu y tu mewn i'n system i gael gwared ar ddibyniaethau allanol. Y canlyniad yw cynhwysydd wedi'i farcio mewn melyn. Rydym yn creu templed i osod yr holl ddosbarthiadau a sgriptiau sydd eu hangen arnom yn y cynhwysydd. Ar ôl hynny, rydym yn cydosod delwedd barod i'w defnyddio: datblygwyr yn rhoi cod a rhai o'u dibyniaethau arbennig eu hunain ynddo. 

Beth sy'n dda am y dull hwn? 

  • Yn gyntaf, rheolaeth fersiwn lawn o offer adeiladu - adeiladu fersiynau cynhwysydd, sgript a dosbarthu. 
  • Yn ail, rydym wedi cyflawni safoni: rydym yn creu templedi, canolradd a delwedd barod i'w defnyddio yn yr un modd. 
  • Yn drydydd, mae cynwysyddion yn rhoi hygludedd i ni. Heddiw rydym yn defnyddio Gitlab, ac yfory byddwn yn newid i TeamCity neu Jenkins a byddwn yn gallu rhedeg ein cynwysyddion yn yr un modd. 
  • Yn bedwerydd, lleihau dibyniaethau. Nid oedd yn gyd-ddigwyddiad i ni roi citiau dosbarthu yn y cynhwysydd, oherwydd mae hyn yn caniatáu inni osgoi eu llwytho i lawr o'r Rhyngrwyd bob tro. 
  • Yn bumed, mae'r cyflymder adeiladu wedi cynyddu - mae presenoldeb copïau lleol o ddelweddau yn caniatáu ichi osgoi gwastraffu amser ar lawrlwytho, gan fod delwedd leol. 

Mewn geiriau eraill, rydym wedi cyflawni proses gydosod rheoledig a hyblyg. Rydym yn defnyddio'r un offer i adeiladu unrhyw gynwysyddion fersiwn llawn. 

Sut mae ein trefn adeiladu yn gweithio

Delweddau parod ar gyfer k8s

Mae'r cynulliad yn cael ei lansio gydag un gorchymyn, mae'r broses yn cael ei gweithredu yn y ddelwedd (a amlygir mewn coch). Mae gan y datblygwr ffeil Docker (a amlygir mewn melyn), rydym yn ei rendro, gan ddisodli newidynnau â gwerthoedd. Ac ar hyd y ffordd rydym yn ychwanegu penawdau a throedynnau - dyma ein hasiantau. 

Mae'r pennawd yn ychwanegu dosbarthiadau o'r delweddau cyfatebol. Ac mae footer yn gosod ein gwasanaethau y tu mewn, yn ffurfweddu lansiad llwyth gwaith, logio ac asiantau eraill, yn disodli pwynt mynediad, ac ati. 

Delweddau parod ar gyfer k8s

Buom yn meddwl am amser hir a ddylid gosod goruchwyliwr. Yn y diwedd, fe benderfynon ni fod ei angen arnon ni. Dewisasom S6. Mae'r goruchwyliwr yn darparu rheolaeth cynhwysydd: yn caniatáu ichi gysylltu ag ef os bydd y brif broses yn chwalu ac yn darparu rheolaeth â llaw o'r cynhwysydd heb ei ail-greu. Mae logiau a metrigau yn brosesau sy'n rhedeg y tu mewn i'r cynhwysydd. Mae angen eu rheoli rywsut hefyd, ac rydym yn gwneud hyn gyda chymorth goruchwyliwr. Yn olaf, mae'r S6 yn gofalu am gadw tŷ, prosesu signal a thasgau eraill.

Gan ein bod yn defnyddio gwahanol systemau cerddorfaol, ar ôl adeiladu a rhedeg, rhaid i'r cynhwysydd ddeall ym mha amgylchedd y mae a gweithredu yn ôl y sefyllfa. Er enghraifft:
Mae hyn yn caniatáu inni adeiladu un ddelwedd a'i rhedeg mewn gwahanol systemau cerddorfaol, a bydd yn cael ei lansio gan ystyried manylion y system offeryniaeth hon.

 Delweddau parod ar gyfer k8s

Ar gyfer yr un cynhwysydd rydyn ni'n cael gwahanol goed proses yn Docker a Kubernetes:

Delweddau parod ar gyfer k8s

Gweithredir y llwyth tâl o dan oruchwyliaeth S6. Rhowch sylw i gasglwr a digwyddiadau - dyma ein hasiantau sy'n gyfrifol am logiau a metrigau. Nid oes gan Kubernetes nhw, ond mae gan Docker. Pam? 

Os edrychwn ar fanyleb y “pod” (o hyn ymlaen - pod Kubernetes), fe welwn fod y cynhwysydd digwyddiadau yn cael ei weithredu mewn pod, sydd â chynhwysydd casglu ar wahân sy'n cyflawni'r swyddogaeth o gasglu metrigau a logiau. Gallwn ddefnyddio galluoedd Kubernetes: rhedeg cynwysyddion mewn un pod, mewn un broses a/neu ofod rhwydwaith. Mewn gwirionedd yn cyflwyno eich asiantau a pherfformio rhai swyddogaethau. Ac os caiff yr un cynhwysydd ei lansio yn Docker, bydd yn derbyn yr un galluoedd ag allbwn, hynny yw, bydd yn gallu cyflwyno logiau a metrigau, gan y bydd yr asiantau yn cael eu lansio'n fewnol. 

Metrigau a logiau

Mae cyflwyno metrigau a logiau yn dasg gymhleth. Mae sawl agwedd ar ei phenderfyniad.
Mae'r seilwaith yn cael ei greu ar gyfer cyflawni'r llwyth tâl, ac nid ar gyfer dosbarthu boncyffion ar raddfa fawr. Hynny yw, rhaid cyflawni'r broses hon gyda gofynion adnoddau cynhwysydd lleiaf posibl. Rydym yn ymdrechu i helpu ein datblygwyr: “Cael cynhwysydd Docker Hub, ei redeg, a gallwn ddanfon y logiau.” 

Yr ail agwedd yw cyfyngu ar nifer y logiau. Os bydd ymchwydd yn nifer y boncyffion yn digwydd mewn sawl cynhwysydd (mae'r cymhwysiad yn allbynnu olrhain pentwr mewn dolen), mae'r llwyth ar y CPU, sianeli cyfathrebu a system prosesu boncyff yn cynyddu, ac mae hyn yn effeithio ar weithrediad y gwesteiwr fel a. cyfan a chynwysyddion eraill ar y gwesteiwr, yna weithiau mae hyn yn arwain at "syrthio" y gwesteiwr. 

Y drydedd agwedd yw bod angen cefnogi cymaint o ddulliau casglu metrigau allan o'r bocs. O ddarllen ffeiliau a phleidleisio-diweddbwynt Prometheus i ddefnyddio protocolau sy'n benodol i gymwysiadau.

A'r agwedd olaf yw lleihau'r defnydd o adnoddau.

Fe wnaethon ni ddewis datrysiad ffynhonnell agored Go o'r enw Telegraf. Mae hwn yn gysylltydd cyffredinol sy'n cefnogi mwy na 140 math o sianeli mewnbwn (ategion mewnbwn) a 30 math o sianeli allbwn (ategion allbwn). Rydym wedi ei gwblhau ac yn awr byddwn yn dweud wrthych sut rydym yn ei ddefnyddio gan ddefnyddio Kubernetes fel enghraifft. 

Delweddau parod ar gyfer k8s

Gadewch i ni ddweud bod datblygwr yn defnyddio llwyth gwaith ac mae Kubernetes yn derbyn cais i greu pod. Ar y pwynt hwn, mae cynhwysydd o'r enw Collector yn cael ei greu'n awtomatig ar gyfer pob pod (rydym yn defnyddio mutaniad webhook). Casglwr yw ein hasiant. Ar y dechrau, mae'r cynhwysydd hwn yn ffurfweddu ei hun i weithio gyda Prometheus a'r system casglu boncyffion.

  • I wneud hyn, mae'n defnyddio anodiadau pod, ac yn dibynnu ar ei gynnwys, mae'n creu, dyweder, diweddbwynt Prometheus; 
  • Yn seiliedig ar fanyleb y pod a gosodiadau cynhwysydd penodol, mae'n penderfynu sut i ddosbarthu logiau.

Rydyn ni'n casglu boncyffion trwy API Docker: does ond angen i ddatblygwyr eu rhoi mewn stdout neu stderr, a bydd Collector yn eu datrys. Cesglir boncyffion mewn talpiau gyda pheth oedi i atal gorlwytho gwesteiwr posibl. 

Cesglir metrigau ar draws achosion llwyth gwaith (prosesau) mewn cynwysyddion. Mae popeth yn cael ei dagio: gofod enw, o dan, ac yn y blaen, ac yna ei drawsnewid i fformat Prometheus - a dod ar gael i'w gasglu (ac eithrio ar gyfer logiau). Rydym hefyd yn anfon logiau, metrigau a digwyddiadau i Kafka ac ymhellach:

  • Mae boncyffion ar gael yn Graylog (ar gyfer dadansoddiad gweledol);
  • Anfonir logiau, metrigau, digwyddiadau i Clickhouse i'w storio yn y tymor hir.

Mae popeth yn gweithio'n union yr un peth yn AWS, dim ond rydyn ni'n disodli Graylog gyda Kafka gyda Cloudwatch. Rydyn ni'n anfon y boncyffion yno, ac mae popeth yn troi allan yn gyfleus iawn: mae'n amlwg ar unwaith i ba glwstwr a chynhwysydd maen nhw'n perthyn. Mae'r un peth yn wir am Google Stackdriver. Hynny yw, mae ein cynllun yn gweithio ar y safle gyda Kafka ac yn y cwmwl. 

Os nad oes gennym Kubernetes gyda codennau, mae'r cynllun ychydig yn fwy cymhleth, ond mae'n gweithio ar yr un egwyddorion.

Delweddau parod ar gyfer k8s

Mae'r un prosesau yn cael eu gweithredu y tu mewn i'r cynhwysydd, maent yn cael eu trefnu gan ddefnyddio S6. Mae'r un prosesau yn rhedeg y tu mewn i'r un cynhwysydd.

O ganlyniad,

Rydym wedi creu datrysiad cyflawn ar gyfer adeiladu a lansio delweddau, gydag opsiynau ar gyfer casglu a dosbarthu logiau a metrigau:

  • Fe wnaethom ddatblygu dull safonol o gydosod delweddau, ac yn seiliedig arno fe wnaethom ddatblygu templedi CI;
  • Asiantau casglu data yw ein hestyniadau Telegraf. Fe wnaethon ni eu profi'n dda wrth gynhyrchu;
  • Rydym yn defnyddio webhook treiglad i weithredu cynwysyddion gyda chyfryngau mewn codennau; 
  • Wedi'i integreiddio i ecosystem Kubernetes/Rancher;
  • Gallwn weithredu'r un cynwysyddion mewn gwahanol systemau cerddorfaol a chael y canlyniad a ddisgwyliwn;
  • Wedi creu cyfluniad rheoli cynhwysydd cwbl ddeinamig. 

Cyd-awdur: Ilya Prudnikov

Ffynhonnell: hab.com

Ychwanegu sylw