Crìochan CPU agus smeòrach ionnsaigheach ann an Kubernetes

Thoir an aire. eadar-theangachadh.: Tha an eachdraidh fosglaidh sùla seo de Omio - cruinneachadh siubhail Eòrpach - a’ toirt leughadairean bho theòiridh bhunaiteach gu iom-fhillteachd practaigeach inntinneach rèiteachadh Kubernetes. Bidh eòlas air a leithid de chùisean a’ cuideachadh chan ann a-mhàin gus do shealladh a leudachadh, ach cuideachd gus casg a chuir air duilgheadasan nach eil cho beag.

Crìochan CPU agus smeòrach ionnsaigheach ann an Kubernetes

An d’ fhuair thu a-riamh eòlas air tagradh a thèid an sàs, a stadas a bhith a’ freagairt sgrùdaidhean slàinte, agus nach urrainn dhut a-mach carson? Tha aon mhìneachadh comasach co-cheangailte ri crìochan cuota stòrais CPU. Is e seo na bhios sinn a’ bruidhinn san artaigil seo.

TL; DR:
Tha sinn a’ moladh gu làidir cuir às do chrìochan CPU ann an Kubernetes (no cuir à comas cuotathan CFS ann an Kubelet) ma tha thu a’ cleachdadh dreach den kernel Linux le bug cuota CFS. Anns a 'chridhe tha trom agus ainmeil bug a tha ag adhbhrachadh cus smeòrach agus dàil
.

Ann an Omio tha am bun-structar gu lèir air a riaghladh le Kubernetes. Bidh na h-uallaichean obrach stàiteil agus gun stàit againn a’ ruith a-mhàin air Kubernetes (bidh sinn a’ cleachdadh Google Kubernetes Engine). Anns na sia mìosan a dh’ fhalbh, thòisich sinn a’ faicinn slaodachadh air thuaiream. Bidh tagraidhean a’ reothadh no a’ stad a’ freagairt sgrùdaidhean slàinte, a’ call ceangal ris an lìonra, msaa. Chuir an giùlan seo dragh oirnn airson ùine mhòr, agus mu dheireadh chuir sinn romhainn an duilgheadas a ghabhail gu dona.

Geàrr-chunntas den artaigil:

  • Beagan fhaclan mu shoithichean agus Kubernetes;
  • Mar a tha iarrtasan agus crìochan CPU air an cur an gnìomh;
  • Mar a tha crìoch CPU ag obair ann an àrainneachdan ioma-cridhe;
  • Mar a nì thu sùil air smeòrach CPU;
  • Fuasgladh cheistean agus nuances.

Beagan fhaclan mu shoithichean agus Kubernetes

Is e Kubernetes gu bunaiteach an ìre ùr-nodha ann an saoghal bun-structair. Is e a phrìomh obair orchestration container.

Containers

San àm a dh’ fhalbh, bha againn ri artifacts a chruthachadh mar Java JARs / WARs, Python Eggs, no executables airson ruith air frithealaichean. Ach, gus toirt orra obrachadh, dh'fheumadh obair a bharrachd a dhèanamh: a' stàladh na h-àrainneachd runtime (Java/Python), a' cur na faidhlichean riatanach anns na h-àiteachan ceart, a' dèanamh cinnteach gu bheil iad co-chòrdail ri dreach sònraichte den t-siostam-obrachaidh, msaa. Ann am faclan eile, dh'fheumadh aire chùramach a thoirt do riaghladh rèiteachaidh (a bha gu tric na adhbhar connspaid eadar luchd-leasachaidh agus luchd-rianachd an t-siostaim).

Dh'atharraich na soithichean a h-uile càil. A-nis tha an artifact na ìomhaigh container. Faodar a riochdachadh mar sheòrsa de fhaidhle so-ghnìomhaichte leudaichte anns a bheil chan e a-mhàin am prògram, ach cuideachd àrainneachd cur gu bàs làn-chuimseach (Java / Python / ...), a bharrachd air na faidhlichean / pacaidean riatanach, ro-stàlaichte agus deiseil airson ruith. Faodar soithichean a chuir a-steach agus a ruith air diofar luchd-frithealaidh gun cheuman a bharrachd.

A bharrachd air an sin, bidh soithichean ag obair san àrainneachd bogsa gainmhich aca fhèin. Tha an inneal-atharrachaidh lìonra brìgheil aca fhèin, an siostam faidhle aca fhèin le ruigsinneachd cuibhrichte, an rangachd phròiseasan aca fhèin, na crìochan aca fhèin air CPU agus cuimhne, msaa.

Kubernetes

Mar a chaidh a ràdh na bu thràithe, tha Kubernetes na orcastra container. Bidh e ag obair mar seo: bidh thu a’ toirt grunn innealan dha, agus an uairsin ag ràdh: “Hey, Kubernetes, leig dhuinn deich eisimpleirean den t-soitheach agam a chuir air bhog le pròiseasairean 2 agus 3 GB de chuimhne gach fear, agus cùm iad a’ dol! ” Bidh Kubernetes a 'gabhail cùram den chòrr. Lorgaidh e comas an-asgaidh, cuiridh e soithichean air bhog agus ath-thòiseachadh iad ma tha sin riatanach, cuir a-mach ùrachadh nuair a dh’ atharraicheas e dreachan, msaa. Gu bunaiteach, leigidh Kubernetes leat am pàirt bathar-cruaidh a thoirt air falbh agus a ’dèanamh measgachadh farsaing de shiostaman a tha freagarrach airson a bhith a’ cleachdadh agus a ’ruith thagraidhean.

Crìochan CPU agus smeòrach ionnsaigheach ann an Kubernetes
Kubernetes bho shealladh an neach-laighe

Dè a th ’ann an iarrtasan agus crìochan ann an Kubernetes

Ceart gu leòr, tha sinn air soithichean agus Kubernetes a chòmhdach. Tha fios againn cuideachd gum faod grunn shoithichean fuireach air an aon inneal.

Faodar analogy a tharraing le àros coitcheann. Tha togalach farsaing (innealan / aonadan) air a thoirt agus air màl do ghrunn luchd-gabhail (soithichean). Tha Kubernetes ag obair mar realtor. Tha a 'cheist ag èirigh, ciamar a chumail luchd-gabhail bho strì ri chèile? Dè ma cho-dhùnas fear dhiubh, can, iasad a thoirt don t-seòmar-ionnlaid airson leth an latha?

Seo far a bheil iarrtasan agus crìochan a’ tighinn a-steach. CPU iarrtas a tha a dhìth airson adhbharan dealbhaidh a-mhàin. Is e seo rudeigin mar “liosta miann” den t-soitheach, agus tha e air a chleachdadh gus an nód as freagarraiche a thaghadh. Aig an aon àm an CPU Limit faodar a choimeas ri aonta màil - cho luath ‘s a thaghas sinn aonad airson a’ ghobhar, an chan urrainn dol seachad air crìochan stèidhichte. Agus seo far a bheil an duilgheadas ag èirigh ...

Mar a tha iarrtasan agus crìochan air an cur an gnìomh ann an Kubernetes

Bidh Kubernetes a’ cleachdadh inneal smeòrach (a’ leum air cearcallan gleoc) a chaidh a thogail a-steach don kernel gus crìochan CPU a chuir an gnìomh. Ma tha tagradh nas àirde na a’ chrìoch, tha smeòrach air a chomasachadh (ie bidh e a’ faighinn nas lugha de chuairtean CPU). Tha iarrtasan agus crìochan airson cuimhne air an eagrachadh ann an dòigh eadar-dhealaichte, agus mar sin tha iad nas fhasa an lorg. Gus seo a dhèanamh, dìreach thoir sùil air an inbhe ath-thòiseachadh mu dheireadh den pod: ge bith an e “OOMKilled” a th ’ann. Chan eil smeòrach CPU cho sìmplidh, leis nach eil K8s a’ toirt seachad ach meatrach le cleachdadh, chan ann le cgroups.

Iarrtas CPU

Crìochan CPU agus smeòrach ionnsaigheach ann an Kubernetes
Mar a thèid iarrtas CPU a chuir an gnìomh

Airson sìmplidh, leig dhuinn sùil a thoirt air a 'phròiseas a' cleachdadh inneal le CPU 4-core mar eisimpleir.

Bidh K8s a’ cleachdadh uidheamachd buidheann smachd (cgroups) gus smachd a chumail air riarachadh ghoireasan (cuimhne agus pròiseasar). Tha modail rangachd ri fhaighinn air a shon: tha an leanabh a 'sealbhachadh crìochan a' bhuidheann phàrant. Tha am mion-fhiosrachadh cuairteachaidh air a stòradh ann an siostam faidhle brìgheil (/sys/fs/cgroup). Ann an cùis pròiseasar tha seo /sys/fs/cgroup/cpu,cpuacct/*.

Bidh K8s a’ cleachdadh faidhle cpu.share gus goireasan pròiseasar a riarachadh. Anns a 'chùis againn, bidh an cgroup root a' faighinn earrannan 4096 de ghoireasan CPU - 100% den chumhachd pròiseasar a tha ri fhaighinn (1 core = 1024; is e luach stèidhichte a tha seo). Bidh am buidheann freumha a’ sgaoileadh ghoireasan gu co-rèireach a rèir earrannan sliochd a tha clàraichte ann cpu.share, agus tha iadsan, air an tionndadh, a' deanamh an ni ceudna le'n sliochd, etc. Air nòta àbhaisteach Kubernetes, tha triùir chloinne aig a’ root cgroup: system.slice, user.slice и kubepods. Bithear a’ cleachdadh a’ chiad dà fho-bhuidheann gus goireasan a sgaoileadh eadar luchdan siostam èiginneach agus prògraman luchd-cleachdaidh taobh a-muigh K8n. Am fear mu dheireadh - kubepods - air a chruthachadh le Kubernetes gus goireasan a sgaoileadh eadar pods.

Tha an dealbh gu h-àrd a’ sealltainn gun d’ fhuair a’ chiad agus an dàrna fo-bhuidhnean gach fear 1024 earrannan, leis an fho-bhuidheann kuberpod air a riarachadh 4096 earrainnean Ciamar a tha seo comasach: às deidh a h-uile càil, chan eil cothrom aig a ’bhuidheann freumhaich a-mhàin 4096 earrainnean, agus tha suim earrainnean a sliochd gu math nas àirde na an àireamh seo (6144)? Is e a’ phuing gu bheil an luach a ’dèanamh ciall loidsigeach, agus mar sin bidh an clàr-ama Linux (CFS) ga chleachdadh gus goireasan CPU a riarachadh gu co-rèireach. Anns a 'chùis againn, gheibh a' chiad dà bhuidheann 680 earrannan fìor (16,6% de 4096), agus gheibh kubepod an còrr 2736 earrainnean Ma bhios ùine downt ann, cha chleachd a’ chiad dà bhuidheann na goireasan ainmichte.

Gu fortanach, tha dòigh aig a’ chlàr-ama gus a bhith a’ seachnadh a bhith a’ caitheamh goireasan CPU nach eilear a’ cleachdadh. Bidh e a’ gluasad comas “dìomhair” gu amar cruinne, às am bi e air a chuairteachadh gu buidhnean a dh ’fheumas cumhachd pròiseasar a bharrachd (bidh an gluasad a’ tachairt ann an baidsean gus call cruinn a sheachnadh). Tha dòigh coltach ris air a chleachdadh airson a h-uile sliochd de shliochd.

Bidh an uidheamachd seo a’ dèanamh cinnteach à cuairteachadh cothromach de chumhachd pròiseasar agus a’ dèanamh cinnteach nach bi pròiseas sam bith a’ “goid” goireasan bho chàch.

Crìoch CPU

A dh'aindeoin 's gu bheil na rèiteachaidhean de chrìochan agus iarrtasan ann an K8 a' coimhead coltach, am buileachadh a tha gu tur eadar-dhealaichte: seo as meallta agus a' chuid a's lugha air a sgriobhadh.

Tha K8s an sàs Uidheam cuota CFS crìochan a chur an gnìomh. Tha na roghainnean aca air an sònrachadh ann am faidhlichean cfs_period_us и cfs_quota_us anns an eòlaire cgroup (tha am faidhle suidhichte an sin cuideachd cpu.share).

Eu-coltach ri cpu.share, tha an cuota stèidhichte air ùine ùine, agus chan ann air cumhachd pròiseasar a tha ri fhaighinn. cfs_period_us a 'sònrachadh fad na h-ùine (epoch) - tha e an-còmhnaidh 100000 μs (100 ms). Tha roghainn ann an luach seo atharrachadh ann an K8n, ach chan eil e ri fhaighinn ach ann an alpha airson a-nis. Cleachdaidh an clàr-ama an t-àm gus cuotathan cleachdte ath-thòiseachadh. An dàrna faidhle cfs_quota_us, a’ sònrachadh an ùine a tha ri fhaighinn (cuota) anns gach àm. Thoir fa-near gu bheil e cuideachd air a shònrachadh ann am microseconds. Faodaidh an cuota a bhith nas fhaide na an ùine epoch; ann am faclan eile, faodaidh e a bhith nas àirde na 100 ms.

Bheir sinn sùil air dà shuidheachadh air innealan 16-cridhe (an seòrsa coimpiutair as cumanta a th’ againn aig Omio):

Crìochan CPU agus smeòrach ionnsaigheach ann an Kubernetes
Scenario 1: 2 snàithlean agus crìoch 200 ms. Gun smocadh

Crìochan CPU agus smeòrach ionnsaigheach ann an Kubernetes
Scenario 2: 10 snàithleanan agus crìoch 200 ms. Bidh smeòrach a’ tòiseachadh às deidh 20 ms, bidh cothrom air goireasan giullachd a-rithist às deidh 80 ms eile

Canaidh sinn gun do shuidhich thu crìoch CPU gu 2 kernels; Eadar-theangaichidh Kubernetes an luach seo gu 200 ms. Tha seo a’ ciallachadh gum faod an soitheach suas ri 200ms de ùine CPU a chleachdadh gun a bhith a’ smeòrach.

Agus seo far a bheil an spòrs a 'tòiseachadh. Mar a chaidh ainmeachadh gu h-àrd, is e an cuota a tha ri fhaighinn 200 ms. Ma tha thu ag obair ann an co-shìnte deich snàithleanan air inneal 12-cridhe (faic an dealbh airson suidheachadh 2), fhad ‘s a tha a h-uile pod eile leisg, bidh an cuota a’ dol a-mach ann an dìreach 20 ms (bho 10 * 20 ms = 200 ms), agus bidh a h-uile snàithlean den pod seo crochte » (smeòrach) airson an ath 80 ms. Air ainmeachadh cheana bug clàr-ama, air sgàth gu bheil cus smeòrach a’ tachairt agus nach urrainn don ghobhar eadhon an cuota a th’ ann a choileanadh.

Ciamar a nì thu measadh air smeòrach ann am poitean?

Dìreach log a-steach don pod agus cuir an gnìomh cat /sys/fs/cgroup/cpu/cpu.stat.

  • nr_periods - an àireamh iomlan de amannan clàr-ama;
  • nr_throttled - an àireamh de amannan throttled anns an sgrìobhadh nr_periods;
  • throttled_time - ùine throttled tionalach ann an nanoseconds.

Crìochan CPU agus smeòrach ionnsaigheach ann an Kubernetes

Dè dha-rìribh a tha a’ dol?

Mar thoradh air an sin, bidh sinn a’ faighinn tòrr smeòrach anns a h-uile tagradh. Uaireannan tha e a-staigh uair gu leth nas làidire na chaidh a thomhas!

Bidh seo a’ leantainn gu grunn mhearachdan - fàilligidhean sgrùdaidh ullachaidh, reothadh shoithichean, briseadh ceangail lìonra, amannan taobh a-staigh gairmean seirbheis. Bidh seo aig a’ cheann thall a’ leantainn gu barrachd latency agus ìrean mearachd nas àirde.

Co-dhùnadh agus builean

Tha a h-uile dad sìmplidh an seo. Trèig sinn crìochan CPU agus thòisich sinn ag ùrachadh kernel an OS ann an cruinneachaidhean chun dreach as ùire, anns an deach am biast a shocrachadh. Thuit an àireamh mhearachdan (HTTP 5xx) anns na seirbheisean againn gu mòr sa bhad:

Mearachdan HTTP 5xx

Crìochan CPU agus smeòrach ionnsaigheach ann an Kubernetes
Mearachdan HTTP 5xx airson aon seirbheis èiginneach

Ùine freagairt p95

Crìochan CPU agus smeòrach ionnsaigheach ann an Kubernetes
Ùine iarrtas seirbheis èiginneach, 95mh sa cheud

Cosgaisean obrachaidh

Crìochan CPU agus smeòrach ionnsaigheach ann an Kubernetes
Eisimpleir de dh'uairean a chaidh a chosg

Dè a th ’ann?

Mar a chaidh a ràdh aig toiseach an artaigil:

Faodar samhlachas a tharraing le àros coitcheann... Tha Kubernetes ag obair mar realtor. Ach ciamar a chumas tu luchd-gabhail bho strì ri chèile? Dè ma cho-dhùnas fear dhiubh, can, iasad a thoirt don t-seòmar-ionnlaid airson leth an latha?

Seo an glacadh. Faodaidh aon inneal neo-chùramach na goireasan CPU gu lèir a tha rim faighinn air inneal ithe. Ma tha stac tagraidh snasail agad (mar eisimpleir, tha JVM, Go, Node VM air an rèiteachadh gu ceart), chan eil seo na dhuilgheadas: faodaidh tu obrachadh ann an leithid de shuidheachaidhean airson ùine mhòr. Ach ma tha tagraidhean air an droch leasachadh no gun a bhith air an ùrachadh idir (FROM java:latest), dh’ fhaodadh an suidheachadh a dhol a-mach à smachd. Aig Omio tha sinn air Dockerfiles bunaiteach fèin-ghluasadach le roghainnean bunaiteach iomchaidh airson a’ phrìomh stac cànain, agus mar sin cha robh a’ chùis seo ann.

Tha sinn a’ moladh sùil a chumail air na slatan-tomhais USE (cleachdadh, sùghaidh agus mearachdan), dàil API agus ìrean mearachd. Dèan cinnteach gu bheil na toraidhean a rèir dùil.

iomraidhean

Seo an sgeulachd againn. Chuidich na stuthan a leanas gu mòr ann a bhith a’ tuigsinn na bha a’ tachairt:

Tha Kubernetes ag aithris air bug:

An do thachair thu ri duilgheadasan coltach ris nad chleachdadh no an robh eòlas agad co-cheangailte ri smeòrach ann an àrainneachdan cinneasachaidh container? Roinn do sgeulachd anns na beachdan!

PS bhon eadar-theangair

Leugh cuideachd air ar blog:

Source: www.habr.com

Cuir beachd ann