Di Kubernetes de hevsengkirin û pîvandina girêdanên demdirêj barkirin

Di Kubernetes de hevsengkirin û pîvandina girêdanên demdirêj barkirin
Ev gotar dê ji we re bibe alîkar ku hûn fêm bikin ka hevsengiya barkirinê li Kubernetes çawa dixebite, çi diqewime dema ku pêwendiyên dirêj-dirêj têne pîvandin, û çima hûn hewce ne ku hevsengiya alîgirê xerîdar bifikirin ger hûn HTTP/2, gRPC, RSockets, AMQP, an protokolên din ên demdirêj bikar bînin. . 

Piçek li ser ka seyrûsefer çawa li Kubernetes ji nû ve tê dabeş kirin 

Kubernetes ji bo bicîhkirina serîlêdanan du abstraksyonên hêsan peyda dike: Karûbar û Sazkirin.

Dabeşkirin diyar dike ka çawa û çend kopiyên serîlêdana we divê di her kêliyê de were xebitandin. Her serîlêdan wekî Pod tête bicîh kirin û navnîşek IP-ê jê re tê veqetandin.

Karûbar di fonksiyonê de mîna hevsengek barkirinê ne. Ew ji bo belavkirina seyrûseferê li ser gelek podan hatine çêkirin.

Ka em bibînin ka ew çawa xuya dike.

  1. Di diagrama jêrîn de hûn dikarin sê mînakên heman serîlêdanê û balansek barkirinê bibînin:

    Di Kubernetes de hevsengkirin û pîvandina girêdanên demdirêj barkirin

  2. Balansa barkirinê jê re Karûbar tê gotin û navnîşek IP-yê jê re tê destnîşankirin. Her daxwazek hatî beralîkirî ji yek ji podokan re tê rêve kirin:

    Di Kubernetes de hevsengkirin û pîvandina girêdanên demdirêj barkirin

  3. Senaryoya bicihkirinê hejmara mînakên serîlêdanê diyar dike. Hûn ê hema qet ne hewce ne ku rasterast li jêr berfireh bikin:

    Di Kubernetes de hevsengkirin û pîvandina girêdanên demdirêj barkirin

  4. Her pod navnîşana IP-ya xwe tê veqetandin:

    Di Kubernetes de hevsengkirin û pîvandina girêdanên demdirêj barkirin

Kêrhatî ye ku meriv karûbaran wekî berhevokek navnîşanên IP-yê bifikire. Her gava ku hûn gihîştin karûbarê, yek ji navnîşanên IP-yê ji navnîşê tê hilbijartin û wekî navnîşana mebestê tê bikar anîn.

Wisa xuya dike.

  1. Daxwazek curl 10.96.45.152 ji karûbar re tê wergirtin:

    Di Kubernetes de hevsengkirin û pîvandina girêdanên demdirêj barkirin

  2. Karûbar yek ji sê navnîşanên pod wekî meqsed hildibijêre:

    Di Kubernetes de hevsengkirin û pîvandina girêdanên demdirêj barkirin

  3. Trafîk ber bi podek taybetî ve tê verast kirin:

    Di Kubernetes de hevsengkirin û pîvandina girêdanên demdirêj barkirin

Ger serîlêdana we ji pêşek û paşvekêşek pêk tê, wê hingê hûn ê ji bo her yekê hem karûbarek û hem jî veqetandinek hebe.

Dema ku pêşê daxwazek ji paşîn re dike, ne hewce ye ku ew bi rastî bizanibe ka paşîn çend podan xizmet dike: dibe ku yek, deh, an sed hebin.

Di heman demê de, pêşangeh di derbarê navnîşanên podên ku ji paşîn re xizmet dikin tiştek nizane.

Dema ku pêşê daxwazek ji paşîn re dike, ew navnîşana IP-ya karûbarê paşerojê bikar tîne, ku nayê guhertin.

Ev e ku ew xuya dike.

  1. Di bin 1-ê de pêkhateya paşiya hundurîn daxwaz dike. Li şûna ku yek taybetî ji bo paşîn hilbijêrin, ew daxwazek ji karûbarê re dike:

    Di Kubernetes de hevsengkirin û pîvandina girêdanên demdirêj barkirin

  2. Karûbar yek ji paçikên paşîn wekî navnîşana armancê hildibijêre:

    Di Kubernetes de hevsengkirin û pîvandina girêdanên demdirêj barkirin

  3. Trafîk ji Pod 1 ber Pod 5 diçe, ku ji hêla karûbarê ve hatî hilbijartin:

    Di Kubernetes de hevsengkirin û pîvandina girêdanên demdirêj barkirin

  4. Di bin 1-ê de bi rastî nizane ka çend pêlên mîna di binê 5-an de li pişt karûbarê veşartî ne:

    Di Kubernetes de hevsengkirin û pîvandina girêdanên demdirêj barkirin

Lê çawa bi rastî karûbar daxwazan belav dike? Wusa dixuye ku hevsengiya dor-robin tê bikar anîn? Werin em wê bihesibînin. 

Di karûbarên Kubernetes de balansek

Karûbarên Kubernetes tune. Ji bo karûbarê ku navnîşek IP û portê jê re tê veqetandin pêvajoyek tune.

Hûn dikarin vê yekê bi ketina nav her girêkek di komê de verast bikin û fermana netstat -ntlp bimeşînin.

Hûn ê nikaribin navnîşana IP-ya ku ji karûbarê re hatî veqetandin jî bibînin.

Navnîşana IP ya karûbar di qata kontrolê de, di kontrolkerê de ye û di databasê de tê tomar kirin - etcd. Heman navnîşan ji hêla pêkhateyek din ve tê bikar anîn - kube-proxy.
Kube-proxy ji bo hemî karûbaran navnîşek navnîşanên IP-yê distîne û li ser her girêkek di komê de komek rêzikên iptables diafirîne.

Van qaîdeyan dibêjin: "Heke em navnîşana IP-ya karûbarê bibînin, pêdivî ye ku em navnîşana mebesta daxwazê ​​biguhezînin û wê ji yek ji potan re bişînin."

Navnîşana IP-ya karûbarê tenê wekî xalek têketinê tê bikar anîn û ji hêla ti pêvajoyek ku li wê navnîşana IP-yê û portê guhdarî dike nayê xizmet kirin.

Ka em li vê binêrin

  1. Komek ji sê girêkan bifikirin. Her girêk xwedan potan e:

    Di Kubernetes de hevsengkirin û pîvandina girêdanên demdirêj barkirin

  2. Kulîlkên girêdayî yên bi bej boyaxkirî beşek ji karûbarê ne. Ji ber ku karûbar wekî pêvajoyek tune, ew bi gewr tê nîşandan:

    Di Kubernetes de hevsengkirin û pîvandina girêdanên demdirêj barkirin

  3. Podê yekem karûbarek daxwaz dike û divê biçin yek ji podên têkildar:

    Di Kubernetes de hevsengkirin û pîvandina girêdanên demdirêj barkirin

  4. Lê xizmet nîne, pêvajo namîne. Çawa dixebite?

    Di Kubernetes de hevsengkirin û pîvandina girêdanên demdirêj barkirin

  5. Berî ku daxwaz ji nodê derkeve, ew di qaîdeyên iptables re derbas dibe:

    Di Kubernetes de hevsengkirin û pîvandina girêdanên demdirêj barkirin

  6. Qaîdeyên iptables dizanin ku karûbar tune ye û navnîşana IP-ya wê bi yek ji navnîşanên IP-ê yên podên ku bi wê karûbarê ve girêdayî ne veguherînin:

    Di Kubernetes de hevsengkirin û pîvandina girêdanên demdirêj barkirin

  7. Daxwaz navnîşanek IP-ya derbasdar wekî navnîşana mebestê distîne û bi gelemperî tê pêvajo kirin:

    Di Kubernetes de hevsengkirin û pîvandina girêdanên demdirêj barkirin

  8. Bi topolojiya torê ve girêdayî, daxwaz di dawiyê de digihîje pod:

    Di Kubernetes de hevsengkirin û pîvandina girêdanên demdirêj barkirin

Ma iptables dikare balansa barkirinê bar bike?

Na, iptables ji bo fîlterkirinê têne bikar anîn û ji bo hevsengiyê nehatine sêwirandin.

Lêbelê, gengaz e ku meriv komek qaîdeyên ku mîna kar dikin binivîsin pseudo-balansek.

Û ev bi rastî ya ku di Kubernetes de tête kirin.

Ger sê podên we hene, kube-proxy dê qaîdeyên jêrîn binivîse:

  1. Bi îhtimaleke 33% binavê yekem hilbijêrin, wekî din herin qaîdeya din.
  2. Ya duyemîn bi îhtimaleke 50% hilbijêrin, wekî din herin qaîdeya din.
  3. Di binê sêyemîn de hilbijêre.

Ev pergal di encamê de her podek bi îhtimalek 33% tê hilbijartin.

Di Kubernetes de hevsengkirin û pîvandina girêdanên demdirêj barkirin

Û garantî tune ku Pod 2 dê li dû Pod 1 were hilbijartin.

bingotin: iptables modulek statîstîkî bi dabeşkirina rasthatî bikar tîne. Bi vî rengî, algorîtmaya hevsengiyê li ser bingeha hilbijartina rasthatî ye.

Naha ku hûn fêm dikin ka karûbar çawa dixebitin, werin em li senaryoyên karûbarê balkêştir binêrin.

Têkiliyên demdirêj ên li Kubernetes ji hêla xwerû ve nayê pîvandin

Her daxwazek HTTP-ê ji pêşê heya paşîn ji hêla pêwendiyek TCP-ê veqetandî ve tê xizmet kirin, ku tê vekirin û girtin.

Ger pêşê di çirkeyê de 100 daxwazan ji piştê re bişîne, wê hingê 100 girêdanên TCP yên cihê têne vekirin û girtin.

Hûn dikarin bi vekirina yek pêwendiya TCP-ê û karanîna wê ji bo hemî daxwazên HTTP-ê yên paşîn dema pêvajoyê û barkirinê kêm bikin.

Protokola HTTP xwedan taybetmendiyek e ku jê re dibêjin HTTP keep-live, an ji nû ve karanîna girêdanê. Di vê rewşê de, girêdanek TCP-ê ya yekane tête bikar anîn ku gelek daxwaz û bersivên HTTP bişîne û bistîne:

Di Kubernetes de hevsengkirin û pîvandina girêdanên demdirêj barkirin

Ev taybetmendî ji hêla xwerû ve nayê çalak kirin: hem server û hem jî xerîdar divê li gorî vê bêne mîheng kirin.

Sazkirin bixwe ji bo piraniya ziman û hawîrdorên bernamesaziyê sade û gihîştî ye.

Li vir çend lînkên mînakên bi zimanên cuda hene:

Ger em di karûbarek Kubernetes de bimînin-live bikar bînin, çi dibe?
Werin em texmîn bikin ku hem eniya pêş û hem jî piştgir piştgirî-zindî dikin.

Yek kopiyek pêşiyê û sê kopiyên paşiya me hene. Pêşî daxwaza yekem dike û pêwendiyek TCP-ê ji paşverûyê re vedike. Daxwaz digihîje karûbarê, yek ji paşînên paşîn wekî navnîşana armancê tê hilbijartin. Piştgir bersivek dişîne, û pêşiya wê distîne.

Berevajî rewşa asayî ku pêwendiya TCP piştî wergirtina bersivê girtî ye, ew naha ji bo daxwazên HTTP yên din vekirî tê girtin.

Çi diqewime ger pêşangeh bêtir daxwaznameyên paşîn bişîne?

Ji bo şandina van daxwazan, pêwendiyek TCP-ya vekirî dê were bikar anîn, hemî daxwaz dê biçin heman paşîn ku daxwaza yekem lê çû.

Ma ne pêdivî ye ku iptables trafîkê ji nû ve belav bike?

Di vê rewşê de ne.

Dema ku pêwendiyek TCP-ê tê afirandin, ew di nav qaîdeyên iptables-ê de derbas dibe, ku paşînek taybetî ya ku dê seyrûsefer biçe hilbijêrin.

Ji ber ku hemî daxwazên paşerojê li ser pêwendiyek TCP-ê ya jixwe vekirî ne, êdî qaîdeyên iptables nayên gazî kirin.

Ka em bibînin ka ew çawa xuya dike.

  1. Podê yekem daxwazek ji karûbarê re dişîne:

    Di Kubernetes de hevsengkirin û pîvandina girêdanên demdirêj barkirin

  2. Hûn jixwe dizanin ku dê paşê çi bibe. Karûbar tune ye, lê qaîdeyên iptables hene ku dê daxwazê ​​bişopînin:

    Di Kubernetes de hevsengkirin û pîvandina girêdanên demdirêj barkirin

  3. Yek ji paçikên paşîn dê wekî navnîşana armancê were hilbijartin:

    Di Kubernetes de hevsengkirin û pîvandina girêdanên demdirêj barkirin

  4. Daxwaz digihêje podê. Di vê nuqteyê de, têkiliyek TCP-ya domdar di navbera her du pods de dê were saz kirin:

    Di Kubernetes de hevsengkirin û pîvandina girêdanên demdirêj barkirin

  5. Daxwaza paşîn a ji podê yekem dê bi pêwendiya ku jixwe hatî damezrandin re derbas bibe:

    Di Kubernetes de hevsengkirin û pîvandina girêdanên demdirêj barkirin

Encam dema bersivê zûtir û berbi bilindtir e, lê hûn şiyana pîvandina paşîn winda dikin.

Tewra ku di paşiya paşîn de du pod hebin, bi pêwendiyek domdar, dê seyrûsefer her gav biçe yek ji wan.

Ma ev dikare were rast kirin?

Ji ber ku Kubernetes nizane ka meriv çawa têkiliyên domdar hevseng dike, ev peywir dikeve destê we.

Karûbar berhevokek navnîşanên IP-yê û portên ku jê re xalên dawî têne gotin in.

Serlêdana we dikare navnîşek xalên paşîn ji karûbarê bistîne û biryar bide ka meriv çawa daxwazan di navbera wan de belav dike. Hûn dikarin pêwendiyek domdar ji her podê re vekin û daxwazên hevsengiyê di navbera van girêdanan de bi karanîna dor-robin vekin.

An jî bêtir serlêdan bikin algorîtmayên hevsengiya tevlihev.

Koda alîgirê xerîdar ku berpirsiyariya hevsengiyê ye divê vê mantiqê bişopîne:

  1. Ji karûbarê navnîşek xalên dawî bistînin.
  2. Ji bo her xala dawîyê têkiliyek domdar vekin.
  3. Dema ku daxwazek pêdivî ye, yek ji girêdanên vekirî bikar bînin.
  4. Bi rêkûpêk navnîşa xalên dawîn nûve bikin, yên nû biafirînin an girêdanên domdar ên kevn bigrin ger navnîş biguhere.

Ev ê çawa xuya bike.

  1. Li şûna ku podê yekem daxwazê ​​ji karûbarê re bişîne, hûn dikarin daxwazên li ser milê xerîdar hevseng bikin:

    Di Kubernetes de hevsengkirin û pîvandina girêdanên demdirêj barkirin

  2. Pêdivî ye ku hûn kodek binivîsin ku dipirse ka kîjan pod beşek karûbar in:

    Di Kubernetes de hevsengkirin û pîvandina girêdanên demdirêj barkirin

  3. Carekê navnîşê we hebe, wê li ser milê xerîdar hilînin û wê bikar bînin da ku hûn bi pêçan ve girêdin:

    Di Kubernetes de hevsengkirin û pîvandina girêdanên demdirêj barkirin

  4. Hûn ji algorîtmaya hevsengiya barkirinê berpirsiyar in:

    Di Kubernetes de hevsengkirin û pîvandina girêdanên demdirêj barkirin

Naha pirs derdikeve holê: gelo ev pirsgirêk tenê ji bo HTTP-a zindî dimîne?

Hevsengkirina barkirina milê xerîdar

HTTP ne protokola tenê ye ku dikare girêdanên TCP-ya domdar bikar bîne.

Ger serîlêdana we databasek bikar tîne, wê hingê her gava ku hûn hewce ne ku daxwazek bikin an belgeyek ji databasê bistînin pêwendiyek TCP nayê vekirin. 

Di şûna wê de, pêwendiyek TCP-ya domdar bi databasê re tê vekirin û bikar anîn.

Ger databasa we li ser Kubernetes were bicîh kirin û gihîştin wekî karûbar tê peyda kirin, wê hingê hûn ê bi heman pirsgirêkên ku di beşa berê de hatine destnîşan kirin re rû bi rû bibin.

Dê kopiyek databasê ji yên din bêtir barkirî be. Kube-proxy û Kubernetes dê alîkariya girêdanên hevsengiyê nekin. Pêdivî ye ku hûn baldar bin ku pirsên li ser databasa xwe hevseng bikin.

Bi ve girêdayî ye ku hûn kîjan pirtûkxaneyê bikar tînin ku hûn bi databasê ve girêbidin, dibe ku hûn ji bo çareserkirina vê pirsgirêkê vebijarkên cûda hebin.

Li jêr mînakek gihîştina komek databasa MySQL ji Node.js heye:

var mysql = require('mysql');
var poolCluster = mysql.createPoolCluster();

var endpoints = /* retrieve endpoints from the Service */

for (var [index, endpoint] of endpoints) {
  poolCluster.add(`mysql-replica-${index}`, endpoint);
}

// Make queries to the clustered MySQL database

Gelek protokolên din hene ku girêdanên TCP-ya domdar bikar tînin:

  • WebSockets û WebSocketên ewledar
  • HTTP / 2
  • gRPC
  • RSockets
  • AMQP

Divê hûn jixwe bi piraniya van protokolan re nas bikin.

Lê heke ev protokol ew qas populer in, çima çareseriyek hevsengiya standardkirî tune? Çima pêdivî ye ku mantiqa xerîdar were guhertin? Ma çareseriyek xwecî ya Kubernetes heye?

Kube-proxy û iptables têne sêwirandin ku dema ku li Kubernetes têne bicîh kirin pir rewşên karanîna gelemperî vedigirin. Ev ji bo rehetiyê ye.

Ger hûn karûbarek malperê bikar tînin ku API-ya REST eşkere dike, hûn bi şens in - di vê rewşê de, girêdanên TCP-ya domdar nayên bikar anîn, hûn dikarin karûbarê Kubernetes bikar bînin.

Lê gava ku hûn dest bi karanîna girêdanên TCP-ya domdar bikin, hûn ê fêr bibin ka meriv çawa barkirinê li ser piştan bi rengek wekhev belav dike. Kubernetes ji bo vê dozê çareseriyên amade nagire.

Lêbelê, bê guman vebijarkên ku dikarin bibin alîkar hene.

Di Kubernetes de hevsengkirina têkiliyên demdirêj

Di Kubernetes de çar celeb karûbar hene:

  1. ClusterIP
  2. NodePort
  3. LoadBalancer
  4. Bê serî

Sê karûbarên yekem li ser bingeha navnîşana IP-ya virtual, ku ji hêla kube-proxy ve tê bikar anîn da ku qaîdeyên iptables ava bike, dixebitin. Lê bingeha bingehîn a hemû xizmetan xizmeteke bê serî ye.

Karûbarê bêserûber bi wê re navnîşana IP-ya têkildar tune û tenê mekanîzmayek peydakirina navnîşek navnîşanên IP-yê û portên pods (xalên dawîn) yên pê re têkildar peyda dike.

Hemî karûbar li ser bingeha karûbarê bêserî ne.

Karûbarê ClusterIP karûbarek bêserûber e ku bi hin pêvekan re heye: 

  1. Parçeya rêveberiyê wê navnîşek IP-ê destnîşan dike.
  2. Kube-proxy qaîdeyên iptables yên pêwîst diafirîne.

Bi vî rengî hûn dikarin kube-proxy paşguh bikin û rasterast navnîşa xalên dawî yên ku ji karûbarê bêserûber hatine wergirtin bikar bînin da ku serîlêdana xwe hevseng bar bikin.

Lê em çawa dikarin mantiqa wekhev li hemî serîlêdanên ku di komê de hatine bicîh kirin zêde bikin?

Ger serîlêdana we jixwe hatî bicîh kirin, dibe ku ev kar ne mumkun xuya bike. Lêbelê, vebijarkek alternatîf heye.

Service Mesh dê alîkariya we bike

We belkî jixwe pê hesiyaye ku stratejiya hevsengiya bargiraniyê ji aliyê xerîdar ve pir standard e.

Dema ku serîlêdanê dest pê dike, ew:

  1. Ji karûbarê navnîşek navnîşanên IP-ê digire.
  2. Hewza pêwendiyê vedike û diparêze.
  3. Dem bi dem hewzê bi lê zêdekirin an rakirina xalên dawiyê nûve dike.

Dema ku serîlêdan bixwaze daxwazek bike, ew:

  1. Têkiliyek berdest bi karanîna hin mantiqê hildibijêre (mînak dor-robin).
  2. Daxwazê ​​pêk tîne.

Van gavan hem ji bo girêdanên WebSockets, gRPC, û AMQP dixebitin.

Hûn dikarin vê mantiqê di pirtûkxaneyek cihê de veqetînin û wê di serîlêdanên xwe de bikar bînin.

Lêbelê, hûn dikarin li şûna wan tevnên karûbarê mîna Istio an Linkerd bikar bînin.

Service Mesh serîlêdana we bi pêvajoyek ku:

  1. Xweser li navnîşanên IP-ya karûbarê digere.
  2. Têkiliyên wekî WebSockets û gRPC ceribandin.
  3. Daxwazan bi karanîna protokola rast hevseng dike.

Xizmet Mesh ji rêvebirina seyrûseferê di nav komê de dibe alîkar, lê ew pir çavkaniyek zexm e. Vebijarkên din pirtûkxaneyên sêyemîn ên mîna Netflix Ribbon an proxeyên bernamekirî yên mîna Envoy bikar tînin.

Ger hûn pirsgirêkên hevsengiyê paşguh nekin, çi dibe?

Hûn dikarin hilbijêrin ku hevsengiya barkirinê bikar neynin û dîsa jî tu guhertinan ferq nekin. Ka em li çend senaryoyên xebatê binêrin.

Ger xerîdarên we ji pêşkêşkeran bêtir hene, ev ne pirsgirêkek wusa mezin e.

Ka em bibêjin pênc xerîdar hene ku bi du serveran ve girêdayî ne. Tewra hevsengî tune be, dê her du server jî werin bikar anîn:

Di Kubernetes de hevsengkirin û pîvandina girêdanên demdirêj barkirin

Têkilî dibe ku bi rengek wekhev neyê belav kirin: dibe ku çar xerîdar bi heman serverê ve girêdayî ne, lê şansek baş heye ku dê her du server jî werin bikar anîn.

Ya ku pirsgirêktir e senaryoya berevajî ye.

Ger kêm xerîdarên we û bêtir serverên we hebin, dibe ku çavkaniyên we kêm werin bikar anîn û dê tengahiyek potansiyel xuya bibe.

Em bibêjin du xerîdar û pênc server hene. Di rewşek çêtirîn de, dê du girêdanên daîmî ji du serveran ji pênc hebin.

Pêşkêşkerên mayî dê bêkar bin:

Di Kubernetes de hevsengkirin û pîvandina girêdanên demdirêj barkirin

Ger van her du pêşkêşker nikaribin daxwazên xerîdar bi rê ve bibin, pîvana horizontî dê alîkariyê neke.

encamê

Karûbarên Kubernetes têne sêwirandin ku di piraniya senaryoyên serîlêdana malperê yên standard de bixebitin.

Lêbelê, gava ku hûn bi protokolên serîlêdanê yên ku girêdanên TCP-ya domdar bikar tînin, wek databases, gRPC an WebSockets bikar tînin dest bi xebatê bikin, karûbar êdî ne guncaw in. Kubernetes ji bo hevsengkirina girêdanên TCP-ya domdar mekanîzmayên hundurîn peyda nake.

Ev tê vê wateyê ku divê hûn serîlêdanan di hişê xwe de bi hevsengiya xerîdar binivîsin.

Werger ji aliyê komê ve hatiye amadekirin Kubernetes aaS ji Mail.ru.

Çi din li ser mijarê bixwînin:

  1. Di Kubernetes de sê astên xweseriya xweseriyê û meriv çawa wan bi bandor bikar tîne
  2. Kubernetes di ruhê korsaniyê de bi şablonek ji bo pêkanîna.
  3. Kanala me ya Telegram di derbarê veguherîna dîjîtal de.

Source: www.habr.com

Add a comment