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.

Autoscaling agus stiùireadh ghoireasan ann an Kubernetes (aithisg ath-bhreithneachaidh agus bhidio)

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?

  1. 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).
  2. 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.
  3. 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:

Autoscaling agus stiùireadh ghoireasan ann an Kubernetes (aithisg ath-bhreithneachaidh agus bhidio)
(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:

Autoscaling agus stiùireadh ghoireasan ann an Kubernetes (aithisg ath-bhreithneachaidh agus bhidio)

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):

Autoscaling agus stiùireadh ghoireasan ann an Kubernetes (aithisg ath-bhreithneachaidh agus bhidio)

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:

Autoscaling agus stiùireadh ghoireasan ann an Kubernetes (aithisg ath-bhreithneachaidh agus bhidio)
(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:

Autoscaling agus stiùireadh ghoireasan ann an Kubernetes (aithisg ath-bhreithneachaidh agus bhidio)

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:

Autoscaling agus stiùireadh ghoireasan ann an Kubernetes (aithisg ath-bhreithneachaidh agus bhidio)

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:

Autoscaling agus stiùireadh ghoireasan ann an Kubernetes (aithisg ath-bhreithneachaidh agus bhidio)

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.

Autoscaling agus stiùireadh ghoireasan ann an Kubernetes (aithisg ath-bhreithneachaidh agus bhidio)

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.

Autoscaling agus stiùireadh ghoireasan ann an Kubernetes (aithisg ath-bhreithneachaidh agus bhidio)

Tillidh sinn chun kernel Linux agus an eadar-obrachadh leis an CPU - tha an dealbh iomlan mar a leanas:

Autoscaling agus stiùireadh ghoireasan ann an Kubernetes (aithisg ath-bhreithneachaidh agus bhidio)

Tha dà shuidheachadh aig cgroup - gu bunaiteach is iad seo dà “thwists” sìmplidh a leigeas leat faighinn a-mach:

  1. tha cuideam airson container (iarrtasan). earrannan;
  2. 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:

  1. pitheidean, chan eil fios aig duine - feumaidh tu co-rèiteachadh a h-uile turas.
  2. Ùidh nas soilleire, ach càirdeach: tha 50% de fhrithealaiche le 4 cores agus le 20 cores nan rudan gu tur eadar-dhealaichte.
  3. Faodaidh tu an fheadhainn a chaidh ainmeachadh roimhe a chleachdadh cuideaman, air a bheil Linux eòlach, ach tha iad càirdeach cuideachd.
  4. 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).

Autoscaling agus stiùireadh ghoireasan ann an Kubernetes (aithisg ath-bhreithneachaidh agus bhidio)

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):

Autoscaling agus stiùireadh ghoireasan ann an Kubernetes (aithisg ath-bhreithneachaidh agus bhidio)

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:

Autoscaling agus stiùireadh ghoireasan ann an Kubernetes (aithisg ath-bhreithneachaidh agus bhidio)

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:

Autoscaling agus stiùireadh ghoireasan ann an Kubernetes (aithisg ath-bhreithneachaidh agus bhidio)

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.

Autoscaling agus stiùireadh ghoireasan ann an Kubernetes (aithisg ath-bhreithneachaidh agus bhidio)

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:

  1. stèidhichte air iarrtasan, bidh clàr-ama Kubernetes ag obair, a bhios a’ sgaoileadh pods am measg luchd-frithealaidh;
  2. stèidhichte air a h-uile paramadair, tha clas QoS an pod air a dhearbhadh;
  3. Tha cuideaman coimeasach air an tomhas a rèir iarrtasan CPU;
  4. tha an clàr-ama CFS air a rèiteachadh a rèir iarrtasan CPU;
  5. Tha OOM killer air a rèiteachadh stèidhichte air iarrtasan cuimhne;
  6. tha “solas trafaic” air a rèiteachadh stèidhichte air crìochan CPU;
  7. Stèidhichte air crìochan cuimhne, tha crìoch air a rèiteachadh airson cgroup.

Autoscaling agus stiùireadh ghoireasan ann an Kubernetes (aithisg ath-bhreithneachaidh agus bhidio)

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.

Autoscaling agus stiùireadh ghoireasan ann an Kubernetes (aithisg ath-bhreithneachaidh agus bhidio)

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.

Autoscaling agus stiùireadh ghoireasan ann an Kubernetes (aithisg ath-bhreithneachaidh agus bhidio)

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?

Autoscaling agus stiùireadh ghoireasan ann an Kubernetes (aithisg ath-bhreithneachaidh agus bhidio)

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.

Autoscaling agus stiùireadh ghoireasan ann an Kubernetes (aithisg ath-bhreithneachaidh agus bhidio)

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:

Autoscaling agus stiùireadh ghoireasan ann an Kubernetes (aithisg ath-bhreithneachaidh agus bhidio)

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!

Bhidiothan agus slides

Bhidio bhon taisbeanadh (44 mionaidean):

Taisbeanadh na h-aithisg:

PS

Aithisgean eile mu Kubernetes air ar blog:

Source: www.habr.com

Cuir beachd ann