Teorainneacha LAP agus throttling ionsaitheach i Kubernetes

Nóta. aistrigh.: Tógann an stair oscailte súl seo de Omio - comhbhailitheoir taistil Eorpach - léitheoirí ón mbuntheoiric go dtí na castaí praiticiúla suimiúla a bhaineann le cumraíocht Kubernetes. Cuidíonn cur amach ar chásanna den sórt sin ní hamháin do dhearcadh a leathnú, ach freisin fadhbanna neamhfhánacha a chosc.

Teorainneacha LAP agus throttling ionsaitheach i Kubernetes

An raibh iarratas riamh i bhfostú agat, stop ag freagairt do sheiceálacha sláinte, agus gan a bheith in ann a dhéanamh amach cén fáth? Baineann míniú féideartha amháin le teorainneacha cuóta acmhainní LAP. Is é seo cad a bheidh muid ag caint faoi san Airteagal seo.

TL; DR:
Molaimid go láidir teorainneacha LAP a dhíchumasú i Kubernetes (nó cuótaí CFS a dhíchumasú i Kubelet) má tá tú ag baint úsáide as leagan den eithne Linux le fabht cuóta CFS. Sa chroílár ar fáil tromchúiseach agus ar eolas go maith fabht as a dtagann ró-throttling agus moilleanna
.

I Omio tá an bonneagar iomlán á bhainistiú ag Kubernetes. Is ar Kubernetes amháin a ritheann ár n-ualaí oibre stáit agus gan stát (úsáidimid Google Kubernetes Engine). Le sé mhí anuas, thosaigh muid ag breathnú ar moilliú randamach. Déanann feidhmchláir iad a reo nó a stopadh ag freagairt do sheiceálacha sláinte, cailleann siad nasc leis an líonra, etc. Chuir an t-iompar seo mearbhall orainn ar feadh i bhfad, agus ar deireadh shocraigh muid an fhadhb a ghlacadh dáiríre.

Achoimre ar an alt:

  • Cúpla focal faoi choimeádáin agus Kubernetes;
  • Conas a chuirtear iarratais agus teorainneacha LAP i bhfeidhm;
  • Conas a oibríonn teorainn LAP i dtimpeallachtaí illárnacha;
  • Conas throttling LAP a rianú;
  • Réiteach fadhbanna agus nuances.

Cúpla focal faoi coimeádáin agus Kubernetes

Go bunúsach is é Kubernetes an caighdeán nua-aimseartha i saol an bhonneagair. Is é an príomhthasc atá aige ná ceolfhoireann coimeádáin.

Coimeádáin

San am atá caite, bhí orainn déantáin a chruthú cosúil le Java JARs / WARs, Python Eggs, nó inrite a rith ar fhreastalaithe. Mar sin féin, chun iad a chur i bhfeidhm, b'éigean obair bhreise a dhéanamh: an timpeallacht ama rite (Java/Python) a shuiteáil, na comhaid riachtanacha a chur sna háiteanna cearta, comhoiriúnacht le leagan sonrach den chóras oibriúcháin a chinntiú, etc. I bhfocail eile, níor mhór aird chúramach a thabhairt ar bhainistíocht cumraíochta (rud a bhí ina ábhar conspóide go minic idir forbróirí agus riarthóirí córais).

Coimeádáin athraigh gach rud. Anois is íomhá coimeádán é an déantán. Is féidir é a léiriú mar chineál comhaid inrite leathnaithe ina bhfuil ní amháin an clár, ach freisin timpeallacht fhorghníomhaithe lán-chuimsitheach (Java/Python/...), chomh maith leis na comhaid/pacáistí riachtanacha, réamhshuiteáilte agus réidh le. rith. Is féidir coimeádáin a imscaradh agus a reáchtáil ar fhreastalaithe éagsúla gan aon chéimeanna breise.

Ina theannta sin, oibríonn coimeádáin ina dtimpeallacht bosca gainimh féin. Tá a n-adapter líonra fíorúil féin acu, a gcóras comhaid féin le rochtain theoranta, a n-ordlathas próisis féin, a gcuid teorainneacha féin ar LAP agus cuimhne, etc. Cuirtear seo go léir i bhfeidhm a bhuíochas le fochóras speisialta den eithne Linux - spásanna ainmneacha.

Kubernetes

Mar a dúradh níos luaithe, is ceolfhoireann coimeádán é Kubernetes. Oibríonn sé mar seo: tugann tú linn meaisíní dó, agus ansin deir: “Hey, Kubernetes, seolfaimis deich n-uaire de mo choimeádán le 2 phróiseálaí agus 3 GB de chuimhne an ceann, agus coinnigh ar siúl iad!” Tabharfaidh Kubernetes aire don chuid eile. Gheobhaidh sé acmhainn saor in aisce, seolfaidh sé coimeádáin agus déanfaidh sé iad a atosú más gá, rolladh amach nuashonrú nuair a bhíonn leaganacha á athrú, etc. Go bunúsach, ligeann Kubernetes duit an chomhpháirt crua-earraí a bhaint as agus déanann sé raon leathan córas atá oiriúnach chun feidhmchláir a imscaradh agus a rith.

Teorainneacha LAP agus throttling ionsaitheach i Kubernetes
Kubernetes ó thaobh an layman

Cad iad iarratais agus teorainneacha i Kubernetes

Ceart go leor, tá coimeádáin agus Kubernetes clúdaithe againn. Tá a fhios againn freisin gur féidir le coimeádáin iolracha cónaí ar an meaisín céanna.

Is féidir analaí a tharraingt le árasán comhchoiteann. Tógtar áitreabh fairsing (meaisíní/aonaid) agus ligtear ar cíos é do roinnt tionóntaí (coimeádáin). Feidhmíonn Kubernetes mar realtor. Éiríonn an cheist, conas tionóntaí a choinneáil ó choinbhleachtaí lena chéile? Cad a tharlaíonn má chinneann duine acu, abair, an seomra folctha a fháil ar iasacht ar feadh leath an lae?

Seo an áit a dtagann iarratais agus teorainneacha i bhfeidhm. LAP Iarratas ag teastáil chun críocha pleanála amháin. Is cosúil le “liosta mianta” an choimeádáin é seo, agus úsáidtear é chun an nód is oiriúnaí a roghnú. Ag an am céanna an LAP Teorainn Is féidir a chur i gcomparáid le comhaontú cíosa - chomh luath agus a roghnaíonn muid aonad le haghaidh an coimeádán, an ní féidir dul thar teorainneacha bunaithe. Agus seo nuair a thagann an fhadhb chun cinn ...

Conas a chuirtear iarratais agus teorainneacha i bhfeidhm i Kubernetes

Úsáideann Kubernetes meicníocht throttling (gan bacadh le timthriallta cloig) a tógadh isteach san eithne chun teorainneacha LAP a chur i bhfeidhm. Má sháraíonn feidhmchlár an teorainn, cumasaítear splancadh (i.e. faigheann sé níos lú timthriallta LAP). Eagraítear iarratais agus teorainneacha cuimhne ar bhealach difriúil, mar sin is fusa iad a bhrath. Chun seo a dhéanamh, níl le déanamh ach seiceáil ar stádas atosú deiridh an phota: cibé an bhfuil sé "OOMKilled". Níl an sníomh LAP chomh simplí sin, mar ní chuireann K8s méadracht ar fáil ach le húsáid, ní ag cgroups.

Iarratas LAP

Teorainneacha LAP agus throttling ionsaitheach i Kubernetes
Conas a chuirtear iarratas LAP i bhfeidhm

Ar mhaithe le simplíocht, déanaimis féachaint ar an bpróiseas ag baint úsáide as meaisín le LAP 4-lárnach mar shampla.

Úsáideann K8s meicníocht grúpa rialaithe (cgroups) chun leithdháileadh acmhainní (cuimhne agus próiseálaí) a rialú. Tá múnla ordlathach ar fáil dó: faigheann an leanbh oidhreacht teorainneacha an ghrúpa tuismitheora. Stóráiltear na sonraí dáileacháin i gcóras fíorúil comhaid (/sys/fs/cgroup). I gcás próiseálaí is é seo /sys/fs/cgroup/cpu,cpuacct/*.

Úsáideann K8s comhad cpu.share chun acmhainní próiseálaithe a leithdháileadh. Is é ár gcás, faigheann an fhréamh cgroup scaireanna 4096 d'acmhainní LAP - 100% den chumhacht próiseálaí atá ar fáil (1 croí = 1024; is luach seasta é seo). Dáileann an grúpa fréimhe acmhainní go comhréireach ag brath ar na scaireanna de shliocht cláraithe i cpu.share, agus déanann siadsan, ar a seal, an rud céanna lena sliocht, etc. Ar nód tipiciúil Kubernetes, tá triúr leanaí ag an fhréamh cgroup: system.slice, user.slice и kubepods. Úsáidtear an chéad dá fhoghrúpa chun acmhainní a dháileadh idir ualaí criticiúla córais agus cláir úsáideoirí lasmuigh de K8anna. Ceann deireanach - kubepods — cruthaithe ag Kubernetes chun acmhainní a dháileadh idir na pods.

Léiríonn an léaráid thuas go bhfuair an chéad fhoghrúpa agus an dara foghrúpa gach ceann díobh 1024 scaireanna, leis an bhfoghrúpa kuberpod leithdháilte 4096 scaireanna Conas is féidir é seo: tar éis an tsaoil, tá rochtain ag an ngrúpa fréimhe amháin 4096 scaireanna, agus sáraíonn suim scaireanna a sliocht go suntasach an uimhir seo (6144)? Is é an pointe go ndéanann an luach ciall loighciúil, mar sin úsáideann an sceidealóir Linux (CFS) é chun acmhainní LAP a leithdháileadh go comhréireach. Is é ár gcás, faigheann an chéad dá ghrúpa 680 scaireanna réadacha (16,6% de 4096), agus faigheann kubepod an chuid eile 2736 scaireanna I gcás aga neamhfhónaimh, ní bhainfidh an chéad dá ghrúpa úsáid as na hacmhainní leithdháilte.

Ar ámharaí an tsaoil, tá meicníocht ag an sceidealóir chun acmhainní LAP nár úsáideadh a sheachaint. Aistríonn sé acmhainn “díomhaoin” chuig linn domhanda, as a ndéantar é a dháileadh ar ghrúpaí a dteastaíonn cumhacht próiseálaí breise uathu (tarlaíonn an t-aistriú i mbaisceanna chun caillteanais slánúcháin a sheachaint). Cuirtear modh den chineál céanna i bhfeidhm ar gach sliocht sliocht.

Cinntíonn an mheicníocht seo dáileadh cothrom ar chumhacht próiseálaí agus cinntíonn sé nach ndéanann aon phróiseas “goid” acmhainní ó dhaoine eile.

Teorainn LAP

In ainneoin go bhfuil cuma comhchosúil ar chumraíochtaí na dteorainneacha agus na n-iarratas i K8anna, tá a gcur chun feidhme an-difriúil: seo is míthreorach agus an chuid is lú doiciméadaithe.

K8s ag gabháil Meicníocht cuóta CFS teorainneacha a chur i bhfeidhm. Tá a gcuid socruithe sonraithe i gcomhaid cfs_period_us и cfs_quota_us sa eolaire cgroup (tá an comhad suite ann freisin cpu.share).

Murab ionann agus cpu.share, tá an cuóta bunaithe ar tréimhse ama, agus ní ar an chumhacht próiseálaí atá ar fáil. cfs_period_us sonraítear fad na tréimhse (Aga) - tá sé i gcónaí 100000 μs (100 ms). Tá rogha ann an luach seo a athrú i K8anna, ach níl sé ar fáil ach in alfa faoi láthair. Úsáideann an sceidealóir an ré chun cuótaí úsáidte a atosú. Dara comhad cfs_quota_us, sonraítear an t-am atá ar fáil (cuóta) i ngach ré. Tabhair faoi deara go bhfuil sé sonraithe freisin i microseconds. Féadfaidh an cuóta dul thar an fad ré; i bhfocail eile, féadfaidh sé a bheith níos mó ná 100 ms.

Breathnaímid ar dhá chás ar mheaisíní 16-lárnach (an cineál ríomhaire is coitianta atá againn in Omio):

Teorainneacha LAP agus throttling ionsaitheach i Kubernetes
Cás 1: 2 snáithe agus teorainn 200 ms. Gan scata

Teorainneacha LAP agus throttling ionsaitheach i Kubernetes
Cás 2: 10 snáithe agus teorainn 200 ms. Tosaíonn an sracadh tar éis 20 ms, athchóirítear rochtain ar acmhainní próiseálaithe tar éis 80 ms eile

Ligean le rá shocraigh tú an teorainn LAP go 2 eithne ; Aistreoidh Kubernetes an luach seo go 200 ms. Ciallaíonn sé seo gur féidir leis an gcoimeádán uasmhéid de 200ms d'am LAP a úsáid gan sníomh.

Agus seo nuair a thosaíonn an spraoi. Mar a luadh thuas, is é 200 ms an cuóta atá ar fáil. Má tá tú ag obair go comhthreomhar deich snáitheanna ar mheaisín 12 chroí (féach an léaráid le haghaidh cás 2), cé go bhfuil gach pod eile díomhaoin, ídeofar an cuóta i díreach 20 ms (ó 10 * 20 ms = 200 ms), agus beidh snáitheanna uile an phod seo ar crochadh » (throttle) don chéad 80 ms. An a luadh cheana fabht sceidealóir, a dtarlaíonn scata iomarcach dá bharr agus ní féidir leis an gcoimeádán fiú an cuóta atá ann cheana a chomhlíonadh.

Conas a mheas throttling i pods?

Just logáil isteach ar an pod agus a fhorghníomhú cat /sys/fs/cgroup/cpu/cpu.stat.

  • nr_periods — líon iomlán na dtréimhsí sceidealaithe;
  • nr_throttled — líon na dtréimhsí throttled sa chomhdhéanamh nr_periods;
  • throttled_time — am carnach throttled i nana-soicindí.

Teorainneacha LAP agus throttling ionsaitheach i Kubernetes

Cad atá ar siúl i ndáiríre?

Mar thoradh air sin, a fháil againn throttling ard i ngach iarratas. Uaireanta bíonn sé isteach uair go leith níos láidre ná mar a ríomhtar!

Tagann earráidí éagsúla as seo - teipeanna seiceála ullmhachta, reo coimeádán, briseadh nasc líonra, amanna laistigh de ghlaonna seirbhíse. Mar thoradh air seo i ndeireadh na dála tá níos mó folaigh agus rátaí earráide níos airde.

Cinneadh agus iarmhairtí

Tá gach rud simplí anseo. Thréigeamar teorainneacha LAP agus thosaigh muid ag nuashonrú an eithne OS i gcnuasaigh go dtí an leagan is déanaí, inar socraíodh an fabht. Tháinig laghdú suntasach láithreach ar líon na n-earráidí (HTTP 5xx) inár seirbhísí:

Earráidí HTTP 5xx

Teorainneacha LAP agus throttling ionsaitheach i Kubernetes
Earráidí HTTP 5xx le haghaidh seirbhís ríthábhachtach amháin

Am freagartha p95

Teorainneacha LAP agus throttling ionsaitheach i Kubernetes
Foighne criticiúil iarratais ar sheirbhís, 95ú peircintíl

Costais oibriúcháin

Teorainneacha LAP agus throttling ionsaitheach i Kubernetes
Líon uaireanta mar shampla a chaitear

Cad é an ghabháil?

Mar a dúradh ag tús an ailt:

Is féidir analaí a tharraingt le hárasán pobail... Feidhmíonn Kubernetes mar réadóir. Ach conas tionóntaí a choinneáil ó choinbhleachtaí lena chéile? Cad a tharlaíonn má chinneann duine acu, abair, an seomra folctha a fháil ar iasacht ar feadh leath an lae?

Seo é an ghabháil. Is féidir le coimeádán míchúramach amháin na hacmhainní LAP go léir atá ar fáil a ithe ar mheaisín. Má tá stack feidhmchlár cliste agat (mar shampla, tá JVM, Go, Node VM cumraithe i gceart), ansin ní fadhb é seo: is féidir leat oibriú i cibé coinníollacha ar feadh i bhfad. Ach mura mbíonn feidhmchláir optamaithe go dona nó mura bhfuil siad optamaithe ar chor ar bith (FROM java:latest), d’fhéadfadh go n-éireodh an scéal as smacht. Ag Omio tá Dockerfiles bonn uathoibrithe againn le socruithe réamhshocraithe leordhóthanacha don mhórstack teanga, mar sin ní raibh an cheist seo ann.

Molaimid monatóireacht a dhéanamh ar an méadracht ÚSÁID (úsáid, sáithiú agus earráidí), moilleanna API agus rátaí earráide. A chinntiú go gcomhlíonann na torthaí ionchais.

tagairtí

Is é seo ár scéal. Chabhraigh na hábhair seo a leanas go mór le tuiscint a fháil ar cad a bhí ag tarlú:

Tuairiscí fabhtanna Kubernetes:

An bhfuil fadhbanna den chineál céanna agat i do chleachtas nó an bhfuil taithí agat a bhaineann le sní isteach i dtimpeallachtaí táirgthe coimeádáin? Comhroinn do scéal sna tuairimí!

PS ó aistritheoir

Léigh freisin ar ár mblag:

Foinse: will.com

Add a comment