Autoscaling u ġestjoni tar-riżorsi f'Kubernetes (ħarsa ġenerali u rapport tal-vidjo)

27 ta’ April fil-konferenza Strike 2019, bħala parti mit-taqsima "DevOps", ingħata r-rapport "Auto-scaling u ġestjoni tar-riżorsi f'Kubernetes". Jitkellem dwar kif tista 'tuża K8s biex tiżgura disponibbiltà għolja tal-applikazzjonijiet tiegħek u tiżgura l-ogħla prestazzjoni.

Autoscaling u ġestjoni tar-riżorsi f'Kubernetes (ħarsa ġenerali u rapport tal-vidjo)

Bi tradizzjoni, bi pjaċir nippreżentaw vidjo tar-rapport (44 minuta, ħafna aktar informattiv mill-artiklu) u s-sommarju prinċipali f'forma ta' test. Mur!

Ejja nanalizzaw is-suġġett tar-rapport kelma b'kelma u nibdew mill-aħħar.

Kubernetes

Ejja ngħidu li għandna kontenituri Docker fuq il-host tagħna. Għalxiex? Biex tiġi żgurata r-ripetibbiltà u l-iżolament, li mbagħad jippermettu skjerament sempliċi u tajjeb, CI/CD. Għandna ħafna vetturi bħal dawn b'kontenituri.

X'jipprovdi Kubernetes f'dan il-każ?

  1. Nibqgħu naħsbu dwar dawn il-magni u nibdew naħdmu bis-“sħaba” grupp ta' kontenituri jew imżiewed (gruppi ta’ kontenituri).
  2. Barra minn hekk, lanqas biss naħsbu dwar imżiewed individwali, iżda nimmaniġġjaw aktarоgruppi akbar. Tali primittivi ta’ livell għoli inessu ngħidu li hemm mudell għat-tmexxija ta 'ċertu ammont ta' xogħol, u hawnhekk huwa n-numru meħtieġ ta 'istanzi biex titmexxa. Jekk sussegwentement nibdlu l-mudell, l-istanzi kollha jinbidlu.
  3. Bil API dikjarattiv Minflok ma tesegwixxi sekwenza ta 'kmandi speċifiċi, aħna niddeskrivu l-"istruttura tad-dinja" (f'YAML), li hija maħluqa minn Kubernetes. U għal darb'oħra: meta d-deskrizzjoni tinbidel, il-wirja attwali tagħha tinbidel ukoll.

Ġestjoni tar-riżorsi

CPU

Ejjew inħaddmu nginx, php-fpm u mysql fuq is-server. Dawn is-servizzi fil-fatt se jkollhom saħansitra aktar proċessi għaddejjin, li kull wieħed minnhom jeħtieġ riżorsi tal-kompjuter:

Autoscaling u ġestjoni tar-riżorsi f'Kubernetes (ħarsa ġenerali u rapport tal-vidjo)
(in-numri fuq il-pjastra huma "pappagalli", il-ħtieġa astratta ta 'kull proċess għall-qawwa tal-kompjuters)

Biex tagħmilha aktar faċli li taħdem ma 'dan, huwa loġiku li tgħaqqad il-proċessi fi gruppi (pereżempju, il-proċessi kollha nginx fi grupp wieħed "nginx"). Mod sempliċi u ovvju biex tagħmel dan huwa li tpoġġi kull grupp f'kontenitur:

Autoscaling u ġestjoni tar-riżorsi f'Kubernetes (ħarsa ġenerali u rapport tal-vidjo)

Biex tkompli, trid tiftakar x'inhu kontenitur (fil-Linux). Id-dehra tagħhom saret possibbli grazzi għal tliet karatteristiċi ewlenin fil-qalba, implimentati żmien twil ilu: kapaċitajiet, spazji tal-ismijiet и cgroups. U żvilupp ulterjuri kien iffaċilitat minn teknoloġiji oħra (inklużi "qxur" konvenjenti bħal Docker):

Autoscaling u ġestjoni tar-riżorsi f'Kubernetes (ħarsa ġenerali u rapport tal-vidjo)

Fil-kuntest tar-rapport, aħna biss interessati cgroups, minħabba li l-gruppi ta 'kontroll huma l-parti tal-funzjonalità tal-kontenituri (Docker, eċċ.) li timplimenta l-ġestjoni tar-riżorsi. Proċessi magħquda fi gruppi, kif ridna, huma gruppi ta 'kontroll.

Ejja nerġgħu lura għar-rekwiżiti tas-CPU għal dawn il-proċessi, u issa għal gruppi ta 'proċessi:

Autoscaling u ġestjoni tar-riżorsi f'Kubernetes (ħarsa ġenerali u rapport tal-vidjo)
(Nrepeti li n-numri kollha huma espressjoni astratta tal-ħtieġa għar-riżorsi)

Fl-istess ħin, is-CPU innifsu għandu ċertu riżors finit (fl-eżempju dan huwa 1000), li kulħadd jista' jkun nieqes (is-somma tal-bżonnijiet tal-gruppi kollha hija 150+850+460=1460). X'se jiġri f'dan il-każ?

Il-kernel jibda jqassam ir-riżorsi u jagħmel dan "b'mod ġust", jagħti l-istess ammont ta 'riżorsi lil kull grupp. Iżda fl-ewwel każ, hemm aktar milli meħtieġ (333>150), għalhekk l-eċċess (333-150=183) jibqa 'f'riżerva, li huwa wkoll imqassam indaqs bejn żewġ kontenituri oħra:

Autoscaling u ġestjoni tar-riżorsi f'Kubernetes (ħarsa ġenerali u rapport tal-vidjo)

Bħala riżultat: l-ewwel kontenitur kellu biżżejjed riżorsi, it-tieni - ma kellux biżżejjed riżorsi, it-tielet - ma kellux biżżejjed riżorsi. Dan huwa r-riżultat ta 'azzjonijiet Scheduler "onest" fil-Linux - CFS. It-tħaddim tiegħu jista 'jiġi aġġustat bl-użu tal-assenjazzjoni piżijiet kull wieħed mill-kontenituri. Per eżempju, bħal dan:

Autoscaling u ġestjoni tar-riżorsi f'Kubernetes (ħarsa ġenerali u rapport tal-vidjo)

Ejja nħarsu lejn il-każ ta 'nuqqas ta' riżorsi fit-tieni kontenitur (php-fpm). Ir-riżorsi kollha tal-kontejners huma mqassma b'mod ugwali bejn il-proċessi. Bħala riżultat, il-proċess prinċipali jaħdem tajjeb, iżda l-ħaddiema kollha jonqsu, jirċievu inqas minn nofs dak li għandhom bżonn:

Autoscaling u ġestjoni tar-riżorsi f'Kubernetes (ħarsa ġenerali u rapport tal-vidjo)

Dan huwa kif jaħdem is-CFS scheduler. Inkomplu nsejħu l-piżijiet li nassenjaw lill-kontenituri talbiet. Għaliex dan huwa hekk - ara aktar.

Ejja nħarsu lejn is-sitwazzjoni kollha min-naħa l-oħra. Kif tafu, it-toroq kollha jwasslu għal Ruma, u fil-każ ta’ kompjuter, lejn is-CPU. CPU wieħed, ħafna kompiti - għandek bżonn dawl tat-traffiku. L-aktar mod sempliċi biex jimmaniġġjaw ir-riżorsi huwa "dawl tat-traffiku": huma taw proċess wieħed ħin ta 'aċċess fiss għas-CPU, imbagħad dak li jmiss, eċċ.

Autoscaling u ġestjoni tar-riżorsi f'Kubernetes (ħarsa ġenerali u rapport tal-vidjo)

Dan l-approċċ jissejjaħ kwoti iebsa (limitazzjoni diffiċli). Ejja niftakruha sempliċement bħala limiti. Madankollu, jekk tqassam il-limiti għall-kontenituri kollha, tqum problema: mysql kien qed isuq tul it-triq u f'xi punt il-ħtieġa tiegħu għal CPU intemmet, iżda l-proċessi l-oħra kollha huma sfurzati jistennew sakemm is-CPU idle.

Autoscaling u ġestjoni tar-riżorsi f'Kubernetes (ħarsa ġenerali u rapport tal-vidjo)

Ejja nerġgħu lura għall-qalba tal-Linux u l-interazzjoni tiegħu mas-CPU - l-istampa ġenerali hija kif ġej:

Autoscaling u ġestjoni tar-riżorsi f'Kubernetes (ħarsa ġenerali u rapport tal-vidjo)

cgroup għandu żewġ settings - essenzjalment dawn huma żewġ "brim" sempliċi li jippermettulek tiddetermina:

  1. piż għall-kontenitur (talbiet) huwa ishma;
  2. perċentwal tal-ħin totali tas-CPU għax-xogħol fuq il-kompiti tal-kontejners (limiti) huwa kwota.

Kif tkejjel is-CPU?

Hemm modi differenti:

  1. X'inhu pappagalli, ħadd ma jaf - għandek bżonn tinnegozja kull darba.
  2. Interess aktar ċara, iżda relattiva: 50% ta 'server b'4 qlub u b'20 qlub huma affarijiet kompletament differenti.
  3. Tista' tuża dawk diġà msemmija piżijiet, li Linux jaf, iżda huma wkoll relattivi.
  4. L-iktar għażla adegwata hija li jitkejlu r-riżorsi tal-kompjuter fi sekondi. Dawk. f'sekondi ta 'ħin tal-proċessur relattiv għal sekondi ta' ħin reali: 1 sekonda ta 'ħin tal-proċessur ingħata għal kull 1 sekonda reali - din hija qalba waħda sħiħa tas-CPU.

Biex jagħmluha saħansitra aktar faċli biex jitkellmu, bdew ikejlu direttament ġewwa qlub, jiġifieri minnhom l-istess ħin CPU relattiv għal dak reali. Peress li l-Linux jifhem il-piżijiet, iżda mhux daqstant ħin/core tas-CPU, kien meħtieġ mekkaniżmu biex jittraduċi minn wieħed għall-ieħor.

Ejja nikkunsidraw eżempju sempliċi b'server b'3 CPU cores, fejn tliet imżiewed se jingħataw piżijiet (500, 1000 u 1500) li huma faċilment konvertiti fil-partijiet korrispondenti tal-cores allokati lilhom (0,5, 1 u 1,5).

Autoscaling u ġestjoni tar-riżorsi f'Kubernetes (ħarsa ġenerali u rapport tal-vidjo)

Jekk tieħu t-tieni server, fejn se jkun hemm id-doppju ta 'qlub (6), u tpoġġi l-istess imżiewed hemmhekk, id-distribuzzjoni tal-qlub tista' tiġi kkalkulata faċilment billi sempliċement timmultiplika b'2 (1, 2 u 3, rispettivament). Iżda jseħħ mument importanti meta jidher ir-raba 'pods fuq dan is-server, li l-piż tiegħu, għall-konvenjenza, se jkun ta' 3000. Jneħħi parti mir-riżorsi tas-CPU (nofs il-qlub), u għall-pods li jifdal huma kkalkulati mill-ġdid (imnaqqsa bin-nofs):

Autoscaling u ġestjoni tar-riżorsi f'Kubernetes (ħarsa ġenerali u rapport tal-vidjo)

Kubernetes u riżorsi tas-CPU

F'Kubernetes, ir-riżorsi tas-CPU normalment jitkejlu milliadrax, i.e. 0,001 qlub jittieħdu bħala l-piż bażi. (L-istess ħaġa fit-terminoloġija Linux/cgroups tissejjaħ sehem CPU, għalkemm, b'mod aktar preċiż, 1000 millicores = 1024 sehem CPU.) K8s jiżgura li ma jpoġġix aktar imżiewed fuq is-server milli hemm riżorsi tas-CPU għas-somma tal-piżijiet tal-imżiewed kollha.

Kif jiġri dan? Meta żżid server ma' cluster Kubernetes, jiġi rrappurtat kemm għandu CPU cores disponibbli. U meta toħloq pod ġdid, l-iskeder tal-Kubernetes jaf kemm se jkollu bżonn din il-qlub. Għalhekk, il-pod se jiġi assenjat lil server fejn hemm biżżejjed qlub.

X'se jiġri jekk ebda it-talba hija speċifikata (jiġifieri l-pod m'għandux numru definit ta' cores li jeħtieġ)? Ejja nsemmu kif Kubernetes ġeneralment jgħodd ir-riżorsi.

Għal pod, tista' tispeċifika kemm it-talbiet (CFS scheduler) kif ukoll il-limiti (tiftakar id-dawl tat-traffiku?):

  • Jekk huma speċifikati ugwali, allura l-pod jiġi assenjat klassi QoS garantit. Dan in-numru ta 'cores dejjem disponibbli għalih huwa garantit.
  • Jekk it-talba hija inqas mil-limitu - klassi QoS jinfaqa. Dawk. Nistennew li pod, pereżempju, dejjem juża 1 qalba, iżda dan il-valur mhuwiex limitazzjoni għalih: kultant pod jista 'juża aktar (meta s-server ikollu riżorsi b'xejn għal dan).
  • Hemm ukoll klassi QoS aħjar sforz — tinkludi dawk l-istess imżiewed li għalihom it-talba mhix speċifikata. Ir-riżorsi jingħataw lilhom l-aħħar.

Memorja

Bil-memorja, is-sitwazzjoni hija simili, iżda kemmxejn differenti - wara kollox, in-natura ta 'dawn ir-riżorsi hija differenti. B'mod ġenerali, l-analoġija hija kif ġej:

Autoscaling u ġestjoni tar-riżorsi f'Kubernetes (ħarsa ġenerali u rapport tal-vidjo)

Ejja naraw kif it-talbiet jiġu implimentati fil-memorja. Ħalli l-imżiewed jgħixu fuq is-server, ibiddlu l-konsum tal-memorja, sakemm wieħed minnhom isir tant kbir li jispiċċa bla memorja. F'dan il-każ, il-qattiel OOM jidher u joqtol l-akbar proċess:

Autoscaling u ġestjoni tar-riżorsi f'Kubernetes (ħarsa ġenerali u rapport tal-vidjo)

Dan mhux dejjem jaqblilna, għalhekk huwa possibbli li nirregolaw liema proċessi huma importanti għalina u m'għandhomx jinqatlu. Biex tagħmel dan, uża l-parametru oom_score_adj.

Ejja nerġgħu lura għall-klassijiet QoS tas-CPU u iġbed analoġija mal-valuri oom_score_adj li jiddeterminaw il-prijoritajiet tal-konsum tal-memorja għall-imżiewed:

  • L-inqas valur oom_score_adj għal pod - -998 - ifisser li pod bħal dan għandu jinqatel l-aħħar, dan huwa garantit.
  • L-ogħla - 1000 - hija aħjar sforz, imżiewed bħal dawn jinqatlu l-ewwel.
  • Biex tikkalkula l-valuri li jifdal (jinfaqa) teżisti formula, li l-essenza tagħha tirriżulta mill-fatt li aktar ma pod talab riżorsi, anqas ikun probabbli li jinqatel.

Autoscaling u ġestjoni tar-riżorsi f'Kubernetes (ħarsa ġenerali u rapport tal-vidjo)

It-tieni "brim" - limit_in_bytes - għal-limiti. Magħha, kollox huwa aktar sempliċi: aħna sempliċement jassenjaw l-ammont massimu ta 'memorja maħruġa, u hawn (b'differenza mis-CPU) m'hemm l-ebda kwistjoni ta' kif titkejjel (memorja).

B'kollox

Kull pod f'Kubernetes jingħata requests и limits - iż-żewġ parametri għas-CPU u l-memorja:

  1. Ibbażat fuq talbiet, jaħdem l-iskeder Kubernetes, li jqassam il-miżwed fost is-servers;
  2. ibbażat fuq il-parametri kollha, il-klassi QoS tal-pod hija determinata;
  3. Il-piżijiet relattivi huma kkalkulati abbażi tat-talbiet tas-CPU;
  4. l-iskedar tas-CFS huwa kkonfigurat ibbażat fuq it-talbiet tas-CPU;
  5. OOM killer huwa kkonfigurat ibbażat fuq talbiet tal-memorja;
  6. "dawl tat-traffiku" huwa kkonfigurat abbażi tal-limiti tas-CPU;
  7. Ibbażat fuq il-limiti tal-memorja, limitu huwa kkonfigurat għas-cgroup.

Autoscaling u ġestjoni tar-riżorsi f'Kubernetes (ħarsa ġenerali u rapport tal-vidjo)

B'mod ġenerali, din l-istampa twieġeb il-mistoqsijiet kollha dwar kif isseħħ il-parti ewlenija tal-ġestjoni tar-riżorsi f'Kubernetes.

Autoscaling

K8s cluster-autoscaler

Ejja nimmaġinaw li l-cluster kollu huwa diġà okkupat u jeħtieġ li jinħoloq pod ġdid. Filwaqt li l-powd ma jistax jidher, huwa prekarja fl-istatus Fl-istennija. Biex jidher, nistgħu nqabbdu server ġdid mal-cluster jew... ninstallaw cluster-autoscaler, li jagħmel dan għalina: ordna magna virtwali mill-fornitur tas-sħab (bl-użu ta' talba API) u qabbadha mal-cluster , wara li l - pod se jiġi miżjud .

Autoscaling u ġestjoni tar-riżorsi f'Kubernetes (ħarsa ġenerali u rapport tal-vidjo)

Dan huwa autoscaling tal-cluster Kubernetes, li jaħdem tajjeb ħafna (fl-esperjenza tagħna). Madankollu, bħal band'oħra, hawn xi sfumaturi...

Sakemm żidna d-daqs tal-cluster, kollox kien tajjeb, imma x'jiġri meta l-cluster beda jeħles lilu nnifsu? Il-problema hija li l-immigrazzjoni tal-miżwed (biex tillibera l-hosts) hija teknikament diffiċli ħafna u għalja f'termini ta 'riżorsi. Kubernetes juża approċċ kompletament differenti.

Ikkunsidra raggruppament ta' 3 servers li għandu Deployment. Għandu 6 imżiewed: issa hemm 2 għal kull server. Għal xi raġuni ridna nitfi wieħed mis-servers. Biex nagħmlu dan se nużaw il-kmand kubectl drain, li:

  • se jipprojbixxi li jintbagħtu pods ġodda lil dan is-server;
  • se tħassar il-miżwed eżistenti fuq is-server.

Peress li Kubernetes huwa responsabbli għaż-żamma tan-numru ta 'miżwed (6), sempliċement se toħloq mill-ġdid minnhom fuq nodi oħra, iżda mhux fuq dik li tkun diżattivata, peress li hija diġà mmarkata bħala mhux disponibbli biex tospita pods ġodda. Dan huwa mekkanik fundamentali għal Kubernetes.

Autoscaling u ġestjoni tar-riżorsi f'Kubernetes (ħarsa ġenerali u rapport tal-vidjo)

Madankollu, hawn ukoll sfumatura. F'sitwazzjoni simili, għal StatefulSet (minflok Deployment), l-azzjonijiet se jkunu differenti. Issa diġà għandna applikazzjoni stateful - pereżempju, tliet imżiewed b'MongoDB, li wieħed minnhom għandu xi tip ta 'problema (id-dejta saret korrotta jew żball ieħor li jipprevjeni l-pod milli jibda b'mod korrett). U nerġgħu niddeċiedu li tiddiżattiva server wieħed. X'se jiġri?

Autoscaling u ġestjoni tar-riżorsi f'Kubernetes (ħarsa ġenerali u rapport tal-vidjo)

MongoDB setgħet die minħabba li jeħtieġ kworum: għal raggruppament ta 'tliet installazzjonijiet, mill-inqas tnejn għandhom jiffunzjonaw. Madankollu, dan ma jiġrix - Grazzi lil PodDisruptionBudget. Dan il-parametru jiddetermina n-numru minimu meħtieġ ta 'miżwed tax-xogħol. Jafu li wieħed mill-imżiewed MongoDB m'għadux jaħdem, u jara li PodDisruptionBudget huwa stabbilit għal MongoDB minAvailable: 2, Kubernetes mhux se jippermettilek tħassar pod.

Bottom line: sabiex il-moviment (u fil-fatt, il-ħolqien mill-ġdid) ta 'miżwed jaħdem b'mod korrett meta l-cluster jiġi rilaxxat, huwa meħtieġ li jiġi kkonfigurat PodDisruptionBudget.

Skalar orizzontali

Ejja nikkunsidraw sitwazzjoni oħra. Hemm applikazzjoni li taħdem bħala Deployment f'Kubernetes. It-traffiku tal-utent jasal għall-imżiewed tiegħu (per eżempju, hemm tlieta minnhom), u nkejlu ċertu indikatur fihom (jiġifieri, tagħbija tas-CPU). Meta t-tagħbija tiżdied, nirreġistraw dan fuq skeda u nżidu n-numru ta 'miżwed biex iqassmu t-talbiet.

Illum f'Kubernetes dan m'għandux għalfejn isir manwalment: żieda/tnaqqis awtomatiku fin-numru ta 'miżwed hija kkonfigurata skont il-valuri tal-indikaturi tat-tagħbija mkejla.

Autoscaling u ġestjoni tar-riżorsi f'Kubernetes (ħarsa ġenerali u rapport tal-vidjo)

Il-mistoqsijiet ewlenin hawn huma: x'għandek tkejjel eżattament и kif tinterpreta valuri miksuba (biex tieħu deċiżjoni dwar il-bidla tan-numru ta 'miżwed). Tista' tkejjel ħafna:

Autoscaling u ġestjoni tar-riżorsi f'Kubernetes (ħarsa ġenerali u rapport tal-vidjo)

Kif tagħmel dan teknikament - iġbor metriċi, eċċ. — Tkellimt fid-dettall fir-rapport dwar Monitoraġġ u Kubernetes. U l-parir ewlieni għall-għażla tal-parametri ottimali huwa esperiment!

Hemm uża l-metodu (Saturazzjoni tal-Użu u Żbalji), li t-tifsira tagħha hija kif ġej. Fuq liema bażi jagħmel sens li tiskala, pereżempju, php-fpm? Ibbażat fuq il-fatt li l-ħaddiema qed jispiċċaw, dan hu użu. U jekk il-ħaddiema jispiċċaw u ma jiġux aċċettati konnessjonijiet ġodda, dan diġà hu saturazzjoni. Dawn iż-żewġ parametri għandhom jitkejlu, u skond il-valuri, għandu jitwettaq skalar.

Minflok ma tikkonkludi

Ir-rapport għandu kontinwazzjoni: dwar skala vertikali u kif tagħżel ir-riżorsi t-tajba. Se nitkellem dwar dan fil-videos futuri fuq YouTube tagħna - abbona sabiex ma titlifx!

Vidjows u slides

Vidjow mill-prestazzjoni (44 minuta):

Preżentazzjoni tar-rapport:

PS

Rapporti oħra dwar Kubernetes fuq il-blog tagħna:

Sors: www.habr.com

Żid kumment