ProHoster > Blog > Rianachd > Autoscaling agus stiùireadh ghoireasan ann an Kubernetes (aithisg ath-bhreithneachaidh agus bhidio)
Autoscaling agus stiùireadh ghoireasan ann an Kubernetes (aithisg ath-bhreithneachaidh agus bhidio)
27 Giblean aig a’ cho-labhairt Stailc 2019, mar phàirt den roinn “DevOps”, chaidh an aithisg “Fèin-sgèileadh agus riaghladh ghoireasan ann an Kubernetes” a thoirt seachad. Tha e a’ bruidhinn air mar as urrainn dhut K8n a chleachdadh gus dèanamh cinnteach gu bheil cothrom àrd air na tagraidhean agad agus gus dèanamh cinnteach à àrd-choileanadh.
Le traidisean, tha sinn toilichte a thaisbeanadh bhidio den aithisg (44 mionaidean, mòran nas fiosrachail na an artaigil) agus am prìomh gheàrr-chunntas ann an cruth teacsa. Rach!
Nì sinn sgrùdadh air cuspair na h-aithisg facal air fhacal agus tòisichidh sinn bhon deireadh.
Kubernetes
Canaidh sinn gu bheil soithichean Docker againn air an aoigh againn. Airson dè? Gus dèanamh cinnteach à ath-aithris agus aonaranachd, a tha an uair sin a’ ceadachadh cleachdadh sìmplidh agus math, CI/CD. Tha mòran de na carbadan sin againn le soithichean.
Dè a bheir Kubernetes seachad sa chùis seo?
Bidh sinn a’ stad a bhith a’ smaoineachadh mu na h-innealan sin agus a’ tòiseachadh ag obair leis an “sgòth” cruinneachadh de shoithichean no pods (buidhnean de shoithichean).
A bharrachd air an sin, cha bhith sinn eadhon a ’smaoineachadh air pods fa leth, ach a’ riaghladh barrachdоbuidhnean nas motha. A leithid primitives àrd-ìre leig leinn a ràdh gu bheil teamplaid ann airson eallach obrach sònraichte a ruith, agus seo an àireamh de shuidheachaidhean a tha a dhìth airson a ruith. Ma dh'atharraicheas sinn an teamplaid an dèidh sin, atharraichidh a h-uile suidheachadh.
Le cuideachadh bho API dearbhach An àite a bhith a’ cur an gnìomh sreath de dh’ àitheantan sònraichte, tha sinn a’ toirt cunntas air “structar an t-saoghail” (ann an YAML), a tha air a chruthachadh le Kubernetes. Agus a-rithist: nuair a dh’ atharraicheas an tuairisgeul, atharraichidh an fhìor thaisbeanadh aige cuideachd.
Stiùireadh ghoireasan
CPU
Leig leinn ruith nginx, php-fpm agus mysql air an fhrithealaiche. Bidh eadhon barrachd phròiseasan gan ruith aig na seirbheisean sin, agus feumaidh gach fear dhiubh goireasan coimpiutaireachd:
(Is e “parrots” na h-àireamhan air an t-sleamhnag, feum eas-chruthach gach pròiseas airson cumhachd coimpiutaireachd)
Gus a dhèanamh nas fhasa obrachadh le seo, tha e loidsigeach pròiseasan a chur còmhla ann am buidhnean (mar eisimpleir, a h-uile pròiseas nginx ann an aon bhuidheann “nginx”). Is e dòigh shìmplidh agus fhollaiseach air seo a dhèanamh gach buidheann a chur ann an soitheach:
Gus leantainn air adhart, feumaidh tu cuimhneachadh dè a th’ ann an soitheach (ann an Linux). Chaidh an coltas a dhèanamh comasach le taing do thrì prìomh fheartan anns an kernel, a chaidh a chuir an gnìomh o chionn fhada: Comasan, ainmean-àite и cgroups. Agus chaidh tuilleadh leasachaidh a dhèanamh comasach le teicneòlasan eile (a’ gabhail a-steach “sligean” goireasach mar Docker):
Ann an co-theacs na h-aithisg, chan eil ùidh againn ach ann cgroups, leis gu bheil buidhnean smachd mar phàirt de ghnìomhachd shoithichean (Docker, msaa) a bhios a’ cur an gnìomh riaghladh ghoireasan. Tha pròiseasan air an cur còmhla ann am buidhnean, mar a bha sinn ag iarraidh, nam buidhnean smachd.
Tillidh sinn gu riatanasan CPU airson na pròiseasan sin, agus a-nis airson buidhnean de phròiseasan:
(Tha mi ag ràdh a-rithist gu bheil na h-àireamhan gu lèir nan abairt eas-chruthach air an fheum air goireasan)
Aig an aon àm, tha goireas sònraichte aig an CPU fhèin (anns an eisimpleir seo 1000), a dh’ fhaodadh a bhith a dhìth air a h-uile duine (is e suim feumalachdan a h-uile buidheann 150+850+460=1460). Dè thachras sa chùis seo?
Bidh an kernel a’ tòiseachadh a’ sgaoileadh ghoireasan agus ga dhèanamh “gu cothromach”, a’ toirt an aon uiread de ghoireasan do gach buidheann. Ach anns a 'chiad chùis, tha barrachd dhiubh ann na tha a dhìth (333> 150), agus mar sin tha an còrr (333-150 = 183) fhathast ann an tèarmann, a tha cuideachd air a chuairteachadh gu cothromach eadar dà shoitheach eile:
Mar thoradh air an sin: bha goireasan gu leòr aig a’ chiad shoitheach, an dàrna fear - cha robh goireasan gu leòr aige, an treas fear - cha robh goireasan gu leòr ann. Tha seo mar thoradh air gnìomhan Clàr-ama “onarach” ann an Linux - CFS. Faodar an obrachadh aige atharrachadh le bhith a’ cleachdadh an t-sònrachadh cuideaman gach aon de na soithichean. Mar eisimpleir, mar seo:
Bheir sinn sùil air cùis gainnead ghoireasan san dàrna soitheach (php-fpm). Tha a h-uile goireas container air a chuairteachadh gu cothromach eadar pròiseasan. Mar thoradh air an sin, tha am prìomh phròiseas ag obair gu math, ach bidh a h-uile neach-obrach a 'slaodadh sìos, a' faighinn nas lugha na leth de na tha a dhìth orra:
Seo mar a tha clàr-ama CFS ag obair. Canaidh sinn tuilleadh ris na cuideaman a bhios sinn a’ sònrachadh do shoithichean iarrtasan. Carson a tha seo fìor - faic tuilleadh.
Bheir sinn sùil air an t-suidheachadh gu lèir bhon taobh eile. Mar a tha fios agad, tha a h-uile rathad a 'dol chun Ròimh, agus ann an cùis coimpiutair, chun an CPU. Aon CPU, mòran ghnìomhan - feumaidh tu solas trafaic. Is e “solas trafaic” an dòigh as sìmplidh air goireasan a riaghladh: thug iad seachad aon phròiseas ùine ruigsinneachd stèidhichte air an CPU, an uairsin an ath fhear, msaa.
Canar cuota cruaidh ris an dòigh-obrach seo (cuingealachadh cruaidh). Cuimhnichidh sinn e dìreach mar crìochan. Ach, ma sgaoileas tu crìochan air a h-uile inneal, bidh duilgheadas ag èirigh: bha mysql a’ draibheadh air an rathad agus aig àm air choreigin thàinig an fheum air CPU gu crìch, ach feumaidh a h-uile pròiseas eile feitheamh gus an CPU diomhain.
Tillidh sinn chun kernel Linux agus an eadar-obrachadh leis an CPU - tha an dealbh iomlan mar a leanas:
Tha dà shuidheachadh aig cgroup - gu bunaiteach is iad seo dà “thwists” sìmplidh a leigeas leat faighinn a-mach:
is e an àireamh sa cheud den ùine CPU iomlan airson a bhith ag obair air gnìomhan container (crìochan). cuota.
Ciamar a thomhas CPU?
Tha diofar dhòighean ann:
Dè pitheidean, chan eil fios aig duine - feumaidh tu co-rèiteachadh a h-uile turas.
Ùidh nas soilleire, ach càirdeach: tha 50% de fhrithealaiche le 4 cores agus le 20 cores nan rudan gu tur eadar-dhealaichte.
Faodaidh tu an fheadhainn a chaidh ainmeachadh roimhe a chleachdadh cuideaman, air a bheil Linux eòlach, ach tha iad càirdeach cuideachd.
Is e an roghainn as iomchaidh goireasan coimpiutaireachd a thomhas ann an diogan. An fheadhainn sin. ann an diogan de ùine pròiseasar an coimeas ri diogan fìor-ùine: chaidh 1 diog de ùine pròiseasar a thoirt seachad gach 1 diog fìor - is e seo aon chridhe CPU iomlan.
Gus a dhèanamh eadhon nas fhasa bruidhinn, thòisich iad air tomhas dìreach a-steach kernels, a’ ciallachadh leotha an aon ùine CPU an coimeas ris an fhìor fhear. Leis gu bheil Linux a’ tuigsinn cuideaman, ach nach eil uimhir de dh’ ùine / coraichean CPU ann, bha feum air uidheamachd airson eadar-theangachadh bho aon gu fear eile.
Beachdaichidh sinn air eisimpleir shìmplidh le frithealaiche le coraichean 3 CPU, far an tèid cuideaman a thoirt do thrì pods (500, 1000 agus 1500) a tha furasta an atharrachadh gu na pàirtean co-fhreagarrach de na coraichean a chaidh a thoirt dhaibh (0,5, 1 agus 1,5).
Ma ghabhas tu dàrna frithealaiche, far am bi a dhà uimhir de choraichean (6), agus ma chuireas tu na h-aon pods an sin, faodar cuairteachadh coraichean a thomhas gu furasta le bhith dìreach ag iomadachadh le 2 (1, 2 agus 3, fa leth). Ach tha àm cudromach a 'tachairt nuair a nochdas ceathramh pod air an t-seirbheisiche seo, aig a bheil cuideam, airson goireasachd, bidh 3000. Bidh e a 'toirt air falbh pàirt de na goireasan CPU (leth na coraichean), agus airson na pods a tha air fhàgail bidh iad air an ath-àireamhachadh (leth):
Kubernetes agus goireasan CPU
Ann an Kubernetes, mar as trice bidh goireasan CPU air an tomhas ann an milliadrax, i.e. Thathas a’ gabhail 0,001 cores mar an cuideam bunaiteach. (Is e roinn CPU a chanar ris an aon rud ann am briathrachas Linux / cgroups, ged, nas mionaidiche, 1000 millicores = earrannan 1024 CPU.) Bidh K8s a’ dèanamh cinnteach nach cuir e barrachd pods air an fhrithealaiche na tha goireasan CPU ann airson suim cuideaman a h-uile pod.
Ciamar a tha seo a’ tachairt? Nuair a chuireas tu frithealaiche ri cruinneachadh Kubernetes, thathas ag aithris cia mheud cores CPU a tha aige. Agus nuair a chruthaicheas tu pod ùr, tha fios aig clàr-ama Kubernetes cia mheud cores a bhios a dhìth air a’ pod seo. Mar sin, thèid am pod a shònrachadh do fhrithealaiche far a bheil coraichean gu leòr.
Dè thachras ma tha chan eil tha iarrtas air a shònrachadh (ie chan eil àireamh shònraichte de choraichean aig a’ pod a dh’ fheumas e)? Feuch an obraich sinn a-mach mar a bhios Kubernetes san fharsaingeachd a’ cunntadh ghoireasan.
Airson pod faodaidh tu an dà iarrtas (clàr-ama CFS) agus crìochan a shònrachadh (cuimhnich air an t-solas trafaic?):
Ma tha iad air an sònrachadh co-ionann, thèid clas QoS a thoirt don pod an urras. Tha an àireamh seo de choraichean an-còmhnaidh ri fhaighinn dha cinnteach.
Ma tha an t-iarrtas nas lugha na a’ chrìoch - clas QoS burstach. An fheadhainn sin. Tha sinn an dùil gun cleachd pod, mar eisimpleir, 1 cridhe an-còmhnaidh, ach chan eil an luach seo na chuingealachadh air a shon: uaireannan faodaidh pod barrachd a chleachdadh (nuair a tha goireasan an-asgaidh aig an fhrithealaiche airson seo).
Tha clas QoS ann cuideachd oidhirp as fheàrr - tha e a’ toirt a-steach na dearbh pods air nach eil iarrtas air a shònrachadh. Tha goireasan air an toirt dhaibh mu dheireadh.
Cuimhne
Le cuimhne, tha an suidheachadh coltach, ach beagan eadar-dhealaichte - às deidh a h-uile càil, tha nàdar nan goireasan sin eadar-dhealaichte. San fharsaingeachd, tha an analogy mar a leanas:
Chì sinn mar a tha iarrtasan air an cur an gnìomh mar chuimhneachan. Leig leis na pods a bhith beò air an t-seirbheisiche, ag atharrachadh caitheamh cuimhne, gus am bi aon dhiubh cho mòr is gun ruith e a-mach à cuimhne. Anns a 'chùis seo, tha am marbhadh OOM a' nochdadh agus a 'marbhadh a' phròiseas as motha:
Chan eil seo an-còmhnaidh freagarrach dhuinn, agus mar sin tha e comasach riaghladh dè na pròiseasan a tha cudromach dhuinn agus nach bu chòir a mharbhadh. Gus seo a dhèanamh, cleachd am paramadair oom_sgòr_adj.
Tillidh sinn gu clasaichean QoS an CPU agus tarraing sinn samhlachas leis na luachan oom_score_adj a cho-dhùineas prìomhachasan caitheamh cuimhne airson pods:
Tha an luach oom_score_adj as ìsle airson pod - -998 - a’ ciallachadh gum bu chòir pod mar sin a mharbhadh mu dheireadh, seo an urras.
Tha an ìre as àirde - 1000 - tha oidhirp as fheàrr, thèid na pods sin a mharbhadh an toiseach.
Gus na luachan a tha air fhàgail obrachadh a-mach (burstach) tha foirmle ann, agus tha brìgh na fìrinn sin a’ ciallachadh mar as motha de ghoireasan a dh’ iarras pod, is ann as dualtaiche a tha e a bhith air a mharbhadh.
Tha an dàrna "twist" - crìoch_ann_bytes - airson crìochan. Leis, tha a h-uile dad nas sìmplidh: bidh sinn dìreach a ’sònrachadh an ìre as motha de chuimhne a chaidh a thoirt a-mach, agus an seo (eu-coltach ris an CPU) chan eil ceist sam bith ann mu mar a thomhaiseas tu e (cuimhne).
Iomlan
Tha gach pod ann an Kubernetes air a thoirt seachad requests и limits - an dà pharamadair airson CPU agus cuimhne:
stèidhichte air iarrtasan, bidh clàr-ama Kubernetes ag obair, a bhios a’ sgaoileadh pods am measg luchd-frithealaidh;
stèidhichte air a h-uile paramadair, tha clas QoS an pod air a dhearbhadh;
Tha cuideaman coimeasach air an tomhas a rèir iarrtasan CPU;
tha an clàr-ama CFS air a rèiteachadh a rèir iarrtasan CPU;
Tha OOM killer air a rèiteachadh stèidhichte air iarrtasan cuimhne;
tha “solas trafaic” air a rèiteachadh stèidhichte air crìochan CPU;
Stèidhichte air crìochan cuimhne, tha crìoch air a rèiteachadh airson cgroup.
San fharsaingeachd, tha an dealbh seo a 'freagairt a h-uile ceist mu mar a tha am prìomh phàirt de stiùireadh ghoireasan a' tachairt ann an Kubernetes.
Sgèileadh fèin-ghluasadach
Luchdaich a-nuas am brabhsair K8s fèin-obrachail
Smaoinich gu bheil an cruinneachadh gu lèir air a chleachdadh mar-thà agus feumar pod ùr a chruthachadh. Ged nach urrainn don pod nochdadh, tha e crochte ann an inbhe feitheamh. Airson gun nochd e, is urrainn dhuinn frithealaiche ùr a cheangal ris a’ bhuidheann no... cluster-autoscaler a stàladh, a nì sin dhuinne: òrdaich inneal brìgheil bhon t-solaraiche sgòthan (a’ cleachdadh iarrtas API) agus ga cheangal ris a’ bhuidheann , às deidh sin thèid am pod a chuir ris.
Is e seo fèin-sgèileadh buidheann Kubernetes, a tha ag obair gu math (nar n-eòlas). Ach, mar ann an àiteachan eile, tha cuid de nuances an seo ...
Cho fad ‘s a mheudaich sinn meud a’ chnuasachd, bha a h-uile dad gu math, ach dè thachras nuair a bhios an cruinneachadh thòisich e air e fèin a shaoradh? Is e an duilgheadas a th’ ann gu bheil pods imrich (gus luchd-aoigheachd a shaoradh) gu math duilich gu teicnigeach agus daor a thaobh ghoireasan. Bidh Kubernetes a 'cleachdadh dòigh-obrach gu tur eadar-dhealaichte.
Beachdaich air cruinneachadh de 3 frithealaichean aig a bheil cleachdadh. Tha 6 pods ann: a-nis tha 2 ann airson gach frithealaiche. Airson adhbhar air choireigin bha sinn airson aon de na frithealaichean a chuir dheth. Gus seo a dhèanamh cleachdaidh sinn an àithne kubectl drain, a tha:
cuir casg air pods ùra a chuir chun t-seirbheisiche seo;
sguabaidh e às na pods a tha ann mu thràth air an fhrithealaiche.
Leis gu bheil uallach air Kubernetes airson an àireamh de pods (6) a chumail suas, gu sìmplidh bidh ath-chruthachadh iad air nodan eile, ach chan ann air an fhear a tha ciorramach, leis gu bheil e air a chomharrachadh mar nach eil e ri fhaighinn airson pods ùra a chumail. Tha seo na mheacanaig bunaiteach airson Kubernetes.
Ach, tha nuance an seo cuideachd. Ann an suidheachadh coltach ris, airson StatefulSet (an àite Cleachdadh), bidh na gnìomhan eadar-dhealaichte. A-nis tha tagradh stàiteil againn mu thràth - mar eisimpleir, trì pods le MongoDB, agus tha duilgheadas de sheòrsa air choreigin aig aon dhiubh (tha an dàta air a thruailleadh no mearachd eile a chuireas casg air a’ pod tòiseachadh ceart). Agus tha sinn a-rithist a’ co-dhùnadh aon fhrithealaiche a chur à comas. Dè thachras?
MongoDB b ’urrainn bàsachadh leis gu bheil feum aige air cuòram: airson cruinneachadh de thrì ionadan, feumaidh co-dhiù dhà obrachadh. Ge-tà, seo nach eil a 'tachairt - taing dha Buidseit Pod Disruption. Bidh am paramadair seo a’ dearbhadh an àireamh as lugha de phodan obrach a tha a dhìth. A bhith mothachail nach eil aon de na pods MongoDB ag obair tuilleadh, agus faicinn gu bheil PodDisruptionBudget air a shuidheachadh airson MongoDB minAvailable: 2, cha leig Kubernetes leat pod a sguabadh às.
Gu h-ìosal: gus am bi gluasad (agus gu dearbh, ath-chruthachadh) pods ag obair gu ceart nuair a thèid an cruinneachadh a leigeil ma sgaoil, feumar PodDisruptionBudget a rèiteachadh.
Sgèileadh còmhnard
Beachdaichidh sinn air suidheachadh eile. Tha tagradh a’ ruith mar Cleachdadh ann an Kubernetes. Bidh trafaic luchd-cleachdaidh a ’tighinn gu na pods aige (mar eisimpleir, tha trì dhiubh ann), agus bidh sinn a’ tomhas comharra sònraichte annta (can, luchd CPU). Nuair a bhios an luchd ag àrdachadh, bidh sinn ga chlàradh air clàr-ama agus ag àrdachadh an àireamh de pods gus iarrtasan a sgaoileadh.
An-diugh ann an Kubernetes chan fheumar seo a dhèanamh le làimh: tha àrdachadh / lùghdachadh fèin-ghluasadach anns an àireamh de pods air a rèiteachadh a rèir luachan nan comharran luchdan tomhaiste.
Is iad na prìomh cheistean an seo: dè dìreach a thomhas и ciamar a mhìneachadh luachan fhaighinn (airson co-dhùnadh mu bhith ag atharrachadh an àireamh de pods). Faodaidh tu tòrr a thomhas:
Mar a nì thu seo gu teicnigeach - cruinnich metrics, msaa. - Bhruidhinn mi gu mionaideach san aithisg mu dheidhinn Sgrùdadh agus Kubernetes. Agus is e am prìomh chomhairle airson na paramadairean as fheàrr a thaghadh deuchainn!
tha Modh CLEACHDADH(Saturation Cleachdadh agus Mearachdan), tha a bhrìgh mar a leanas. Dè a’ bhunait a tha e ciallach sgèile a dhèanamh, mar eisimpleir, php-fpm? Stèidhichte air an fhìrinn gu bheil luchd-obrach a 'ruith a-mach, tha seo cleachdadh. Agus ma tha an luchd-obrach seachad agus nach gabhar ri ceanglaichean ùra, tha seo mar-thà sùghaidh. Feumar an dà pharamadair sin a thomhas, agus a rèir nan luachan, feumar sgèileadh a dhèanamh.
An àite a bhith co-dhùnadh
Tha an aithisg a’ leantainn: mu dheidhinn sgèileadh dìreach agus mar a roghnaicheas tu na goireasan ceart. Bruidhnidh mi mu dheidhinn seo ann am bhideothan san àm ri teachd air ar YouTube - fo-sgrìobhadh gus nach caill thu a-mach!