Autoscaling ak jesyon resous nan Kubernetes (apèsi sou lekòl la ak rapò videyo)

27 avril nan konferans lan Grèv 2019, kòm yon pati nan seksyon "DevOps", rapò "Autoscaling ak jesyon resous nan Kubernetes" te bay. Li pale sou fason ou ka itilize K8s pou asire gwo disponiblite aplikasyon ou yo epi asire pèfòmans maksimòm.

Autoscaling ak jesyon resous nan Kubernetes (apèsi sou lekòl la ak rapò videyo)

Dapre tradisyon, nou kontan prezante videyo rapò a (44 minit, pi plis enfòmasyon pase atik la) ak rezime prensipal la nan fòm tèks. Ale!

Ann analize sijè rapò a mo pa mo epi kòmanse depi nan fen.

Kubernetes

Ann di nou gen kontenè Docker sou lame nou an. Pou kisa? Pou asire repetibilite ak izolasyon, ki an vire pèmèt pou deplwaman senp ak bon, CI/CD. Nou gen anpil machin konsa ak kontenè.

Ki sa Kubernetes bay nan ka sa a?

  1. Nou sispann panse sou machin sa yo epi kòmanse travay ak "nwaj la" gwoup kontenè oswa gous (gwoup veso).
  2. Anplis, nou pa menm panse sou gous endividyèl, men jere plisоpi gwo gwoup yo. Sa yo primitif wo nivo pèmèt nou di ke gen yon modèl pou kouri yon sèten kantite travay, epi isit la se kantite sikonstans ki nesesè yo kouri li. Si nou chanje modèl la imedyatman, tout ka yo pral chanje.
  3. Avèk API deklaratif Olye pou nou egzekite yon sekans nan kòmandman espesifik, nou dekri "estrikti nan mond lan" (nan YAML), ki se kreye pa Kubernetes. Epi ankò: lè deskripsyon an chanje, ekspozisyon aktyèl li yo pral chanje tou.

Jesyon resous

CPU

Se pou nou kouri nginx, php-fpm ak mysql sou sèvè a. Sèvis sa yo pral gen menm plis pwosesis k ap kouri, chak nan yo ki mande resous enfòmatik:

Autoscaling ak jesyon resous nan Kubernetes (apèsi sou lekòl la ak rapò videyo)
(nimewo ki sou glisad la se "jako", bezwen abstrè chak pwosesis pou pouvwa informatique)

Pou fè li pi fasil pou travay ak sa a, li lojik pou konbine pwosesis yo an gwoup (pa egzanp, tout pwosesis nginx nan yon gwoup "nginx"). Yon fason ki senp epi evidan pou fè sa se mete chak gwoup nan yon veso:

Autoscaling ak jesyon resous nan Kubernetes (apèsi sou lekòl la ak rapò videyo)

Pou kontinye, ou bezwen sonje kisa yon veso ye (nan Linux). Aparisyon yo te fè posib gras a twa karakteristik kle nan nwayo a, ki te aplike byen lontan de sa: kapasite, espas non yo и cgroups. Ak plis devlopman te fasilite pa lòt teknoloji (ki gen ladan "kokiy" pratik tankou Docker):

Autoscaling ak jesyon resous nan Kubernetes (apèsi sou lekòl la ak rapò videyo)

Nan kontèks rapò a, nou sèlman enterese nan cgroups, paske gwoup kontwòl yo se yon pati nan fonksyonalite nan resipyan (Docker, elatriye) ki aplike jesyon resous. Pwosesis konbine an gwoup, jan nou te vle, se gwoup kontwòl.

Ann retounen nan kondisyon CPU pou pwosesis sa yo, epi kounye a pou gwoup pwosesis:

Autoscaling ak jesyon resous nan Kubernetes (apèsi sou lekòl la ak rapò videyo)
(Mwen repete ke tout nimewo yo se yon ekspresyon abstrè nan bezwen an pou resous)

An menm tan an, CPU a li menm gen yon sèten resous fini (nan egzanp sa a se 1000), ki tout moun ka manke (som bezwen tout gwoup yo se 150+850+460=1460). Kisa ki pral rive nan ka sa a?

Kernel la kòmanse distribye resous epi fè li "san patipri", bay chak gwoup menm kantite resous. Men, nan premye ka a, gen plis nan yo pase sa nesesè (333> 150), kidonk depase an (333-150 = 183) rete an rezèv, ki se tou egalman distribye ant de lòt resipyan:

Autoscaling ak jesyon resous nan Kubernetes (apèsi sou lekòl la ak rapò videyo)

Kòm yon rezilta: premye veso a te gen ase resous, dezyèm lan - li pa te gen ase resous, twazyèm lan - li pa t 'gen ase resous. Sa a se rezilta aksyon yo "onèt" pwogramè nan Linux - Ht. Operasyon li ka ajiste lè l sèvi avèk plasman an pwa chak nan resipyan yo. Pou egzanp, tankou sa a:

Autoscaling ak jesyon resous nan Kubernetes (apèsi sou lekòl la ak rapò videyo)

Ann gade ka yon mank de resous nan dezyèm veso a (php-fpm). Tout resous veso yo distribye egalman ant pwosesis. Kòm yon rezilta, pwosesis la mèt travay byen, men tout travayè yo ralanti, resevwa mwens pase mwatye nan sa yo bezwen:

Autoscaling ak jesyon resous nan Kubernetes (apèsi sou lekòl la ak rapò videyo)

Men ki jan orè CFS la ap travay. Nou pral plis rele pwa ke nou bay resipyan yo demann. Poukisa sa a se konsa - gade pi lwen.

Ann gade nan sitiyasyon an antye soti nan lòt bò a. Kòm ou konnen, tout wout mennen nan lavil Wòm, ak nan ka a nan yon òdinatè, nan CPU a. Yon CPU, anpil travay - ou bezwen yon limyè trafik. Fason ki pi senp pou jere resous yo se "trafik limyè": yo te bay yon pwosesis yon tan aksè fiks nan CPU a, Lè sa a, pwochen an, elatriye.

Autoscaling ak jesyon resous nan Kubernetes (apèsi sou lekòl la ak rapò videyo)

Apwòch sa a rele kota difisil (difisil limite). Ann sonje li tou senpleman kòm limit. Sepandan, si ou distribye limit nan tout resipyan, yon pwoblèm rive: mysql te kondwi sou wout la ak nan kèk pwen bezwen li pou CPU te fini, men tout lòt pwosesis yo oblije rete tann jiskaske CPU a. san fè anyen konsa.

Autoscaling ak jesyon resous nan Kubernetes (apèsi sou lekòl la ak rapò videyo)

Ann retounen nan nwayo Linux la ak entèraksyon li yo ak CPU a - foto an jeneral se jan sa a:

Autoscaling ak jesyon resous nan Kubernetes (apèsi sou lekòl la ak rapò videyo)

cgroup gen de paramèt - esansyèlman sa yo se de senp "tòde" ki pèmèt ou detèmine:

  1. pwa pou veso (demann) se aksyon;
  2. pousantaj nan tan total CPU pou travay sou travay veso (limit) se pataje.

Ki jan yo mezire CPU?

Gen diferan fason:

  1. Ki sa ki peroke, pèsonn pa konnen - ou bezwen negosye chak fwa.
  2. Enterè pi klè, men relatif: 50% nan yon sèvè ki gen 4 nwayo ak ak 20 am yo se bagay konplètman diferan.
  3. Ou ka itilize sa yo deja mansyone pwa, ki Linux konnen, men yo tou relatif.
  4. Opsyon ki pi adekwat se pou mezire resous informatique nan segonn. Moun sa yo. an segonn nan tan processeur parapò ak segonn nan tan reyèl: yo te bay 1 segonn nan tan processeur pou chak 1 segonn reyèl - sa a se yon sèl nwayo CPU antye.

Pou fè li menm pi fasil pou pale, yo te kòmanse mezire dirèkteman nan nwayo, sa vle di pa yo menm tan an CPU relatif nan yon sèl la reyèl. Depi Linux konprann pwa, men se pa tèlman CPU tan / nwayo, yo te bezwen yon mekanis pou tradwi soti nan youn nan lòt la.

Ann konsidere yon egzanp senp ak yon sèvè ki gen 3 nwayo CPU, kote twa gous yo pral bay pwa (500, 1000 ak 1500) ki fasil konvèti nan pati ki koresponn nan nwayo yo atribye ba yo (0,5, 1 ak 1,5).

Autoscaling ak jesyon resous nan Kubernetes (apèsi sou lekòl la ak rapò videyo)

Si ou pran yon dezyèm sèvè, kote pral gen de fwa plis nwayo (6), epi mete gous yo menm la, distribisyon an nan nwayo ka fasil pou kalkile pa tou senpleman miltipliye pa 2 (1, 2 ak 3, respektivman). Men, yon moman enpòtan rive lè yon katriyèm gous parèt sou sèvè sa a, ki gen pwa, pou konvenyans, yo pral 3000. Li retire yon pati nan resous CPU yo (mwatye nwayo yo), ak pou gous ki rete yo yo rekalkile (mwatye):

Autoscaling ak jesyon resous nan Kubernetes (apèsi sou lekòl la ak rapò videyo)

Kubernetes ak resous CPU

Nan Kubernetes, resous CPU yo anjeneral mezire nan miliadrax, i.e. 0,001 nwayo yo pran kòm pwa baz la. (Se menm bagay la nan tèminoloji Linux/cgroups yo rele yon pati CPU, byenke, pi jisteman, 1000 millicores = 1024 pataje CPU.) K8s asire ke li pa mete plis gous sou sèvè a pase gen resous CPU pou sòm total pwa yo nan tout gous.

Ki jan sa rive? Lè ou ajoute yon sèvè nan yon gwoup Kubernetes, yo rapòte konbyen nwayo CPU li genyen. Epi lè w ap kreye yon nouvo gous, pwogramè Kubernetes la konnen konbyen nwayo gous sa a pral bezwen. Kidonk, yo pral plase gous la nan yon sèvè kote gen ase nwayo.

Kisa ki pral rive si pa gen okenn demann yo espesifye (sa vle di gous la pa gen yon kantite nwayo defini li bezwen)? Ann chèche konnen ki jan Kubernetes konte resous yo.

Pou yon gous ou ka presize tou de demann (CFS orè) ak limit (sonje limyè trafik la?):

  • Si yo espesifye egal, Lè sa a, gous la asiyen yon klas QoS garanti. Nimewo sa a nan nwayo toujou disponib pou li garanti.
  • Si demann lan se mwens pase limit la - klas QoS pete. Moun sa yo. Nou espere yon gous, pou egzanp, toujou sèvi ak 1 nwayo, men valè sa a se pa yon limit pou li: pafwa gous ka itilize plis (lè sèvè a gen resous gratis pou sa).
  • Genyen tou yon klas QoS pi bon efò — li gen ladann gous sa yo pou demann yo pa espesifye. Resous yo bay yo dènye.

memwa

Avèk memwa, sitiyasyon an sanble, men yon ti kras diferan - apre tout, nati resous sa yo diferan. An jeneral, analoji a se jan sa a:

Autoscaling ak jesyon resous nan Kubernetes (apèsi sou lekòl la ak rapò videyo)

Ann wè ki jan demann yo aplike nan memwa. Kite gous yo viv sou sèvè a, chanje konsomasyon memwa, jiskaske youn nan yo vin tèlman gwo ke li kouri soti nan memwa. Nan ka sa a, asasen an OOM parèt epi touye pi gwo pwosesis la:

Autoscaling ak jesyon resous nan Kubernetes (apèsi sou lekòl la ak rapò videyo)

Sa a pa toujou kostim nou, kidonk li posib pou kontwole ki pwosesis ki enpòtan pou nou epi yo pa ta dwe touye. Pou fè sa, sèvi ak paramèt la oom_score_adj.

Ann retounen nan klas QoS CPU a epi trase yon analoji ak valè oom_score_adj ki detèmine priyorite konsomasyon memwa pou gous:

  • Valè oom_score_adj ki pi ba a pou yon gous - -998 - vle di ke yon gous konsa ta dwe touye dènye, sa a. garanti.
  • Pi wo a - 1000 - se pi bon efò, gous sa yo yo touye an premye.
  • Pou kalkile valè ki rete yo (pete) gen yon fòmil, sans nan ki bouyi nan lefèt ke plis resous yon gous te mande, mwens chans pou yo touye li.

Autoscaling ak jesyon resous nan Kubernetes (apèsi sou lekòl la ak rapò videyo)

Dezyèm "tòde" - limit_in_bytes - pou limit. Avèk li, tout bagay se pi senp: nou tou senpleman bay kantite maksimòm memwa bay, ak isit la (kontrèman ak CPU a) pa gen okenn kesyon sou ki jan yo mezire li (memwa).

Nan total

Yo bay chak gous nan Kubernetes requests и limits - tou de paramèt pou CPU ak memwa:

  1. baze sou demann, pwogramasyon Kubernetes travay, ki distribye gous nan mitan sèvè yo;
  2. baze sou tout paramèt, yo detèmine klas QoS gous la;
  3. Pwa relatif yo kalkile baze sou demann CPU;
  4. se orè CFS la configuré ki baze sou demann CPU;
  5. OOM asasen se configuré ki baze sou demann memwa;
  6. yon "trafik limyè" konfigirasyon ki baze sou limit CPU;
  7. Ki baze sou limit memwa, se yon limit configuré pou cgroup la.

Autoscaling ak jesyon resous nan Kubernetes (apèsi sou lekòl la ak rapò videyo)

An jeneral, foto sa a reponn tout kesyon sou fason pati prensipal jesyon resous yo fèt nan Kubernetes.

Autoscaling

K8s cluster-autoscaler

Ann imajine ke tout gwoup la deja okipe epi yo bezwen kreye yon nouvo gous. Pandan ke gous la pa ka parèt, li pandye nan estati Annatandan. Pou li parèt, nou ka konekte yon nouvo sèvè nan gwoup la oswa... enstale cluster-autoscaler, ki pral fè li pou nou: kòmande yon machin vityèl nan men founisè nwaj la (itilize yon demann API) epi konekte li nan gwoup la. , apre sa yo pral ajoute gous la .

Autoscaling ak jesyon resous nan Kubernetes (apèsi sou lekòl la ak rapò videyo)

Sa a se autoscaling nan gwoup Kubernetes, ki travay gwo (nan eksperyans nou an). Sepandan, menm jan ak lòt kote, gen kèk nuans isit la ...

Osi lontan ke nou ogmante gwosè gwoup la, tout bagay te byen, men sa k ap pase lè gwoup la te kòmanse libere tèt li? Pwoblèm lan se ke migrasyon gous (pou libere lame) trè teknikman difisil ak chè an tèm de resous. Kubernetes itilize yon apwòch konplètman diferan.

Konsidere yon gwoup 3 sèvè ki gen Deplwaman. Li gen 6 gous: kounye a gen 2 pou chak sèvè. Pou kèk rezon nou te vle fèmen youn nan serveurs yo. Pou fè sa nou pral sèvi ak lòd la kubectl drain, ki:

  • pral entèdi voye nouvo gous sou sèvè sa a;
  • pral efase gous ki egziste deja sou sèvè a.

Depi Kubernetes responsab pou kenbe kantite gous (6), li tou senpleman pral rkree yo sou lòt nœuds, men se pa sou youn nan yo te andikape, paske li deja make kòm disponib pou hosting gous nouvo. Sa a se yon mekanisyen fondamantal pou Kubernetes.

Autoscaling ak jesyon resous nan Kubernetes (apèsi sou lekòl la ak rapò videyo)

Sepandan, gen yon nuans isit la tou. Nan yon sitiyasyon ki sanble, pou StatefulSet (olye de Deplwaman), aksyon yo pral diferan. Koulye a, nou deja gen yon aplikasyon eta - pou egzanp, twa gous ak MongoDB, youn nan yo ki gen kèk kalite pwoblèm (done yo vin pèvèti oswa yon lòt erè ki anpeche gous la kòmanse kòrèkteman). Epi nou deside ankò enfim yon sèl sèvè. Kisa ki pral rive?

Autoscaling ak jesyon resous nan Kubernetes (apèsi sou lekòl la ak rapò videyo)

MongoDB te kapab mouri paske li bezwen yon kowòm: pou yon gwoup twa enstalasyon, omwen de dwe fonksyone. Sepandan, sa a pa rive - Gras a PodDisruptionBudget. Paramèt sa a detèmine kantite minimòm ki nesesè nan gous k ap travay. Lè w konnen youn nan gous MongoDB yo pa travay ankò, epi w wè PodDisruptionBudget fikse pou MongoDB. minAvailable: 2, Kubernetes pa pral pèmèt ou efase yon gous.

Anba liy: nan lòd pou mouvman an (e an reyalite, re-kreyasyon an) nan gous yo travay kòrèkteman lè gwoup la lage, li nesesè yo konfigirasyon PodDisruptionBudget.

Dekale orizontal

Ann konsidere yon lòt sitiyasyon. Gen yon aplikasyon ki kouri kòm Deplwaman nan Kubernetes. Trafik itilizatè vini nan gous li yo (pa egzanp, gen twa nan yo), epi nou mezire yon sèten endikatè nan yo (di, chaj CPU). Lè chaj la ogmante, nou anrejistre li sou yon orè epi ogmante kantite gous pou distribye demann yo.

Jodi a nan Kubernetes sa a pa bezwen fè manyèlman: yon ogmantasyon / diminisyon otomatik nan kantite gous yo configuré depann sou valè yo nan endikatè chaj yo mezire.

Autoscaling ak jesyon resous nan Kubernetes (apèsi sou lekòl la ak rapò videyo)

Kesyon prensipal yo isit la se: ki sa egzakteman pou mezire и kijan pou entèprete jwenn valè (pou pran yon desizyon sou chanje kantite gous). Ou ka mezire anpil:

Autoscaling ak jesyon resous nan Kubernetes (apèsi sou lekòl la ak rapò videyo)

Ki jan fè sa teknikman - kolekte mezi, elatriye. — Mwen te pale an detay nan rapò a sou Siveyans ak Kubernetes. Ak konsèy prensipal la pou chwazi paramèt yo pi bon se eksperyans!

Gen USE metòd (Saturasyon Itilizasyon ak Erè), siyifikasyon an nan ki se jan sa a. Sou ki baz li fè sans pou echèl, pou egzanp, php-fpm? Baze sou lefèt ke travayè yo ap kouri soti, sa a se itilizasyon. Men, si travayè yo fini ak nouvo koneksyon yo pa aksepte, sa a deja saturation. Tou de paramèt sa yo dwe mezire, epi tou depann de valè yo, dekale dwe fèt.

Olye pou yo yon konklizyon

Rapò a gen yon kontinyasyon: sou dekale vètikal ak ki jan yo chwazi resous yo dwa. Mwen pral pale sou sa nan pwochen videyo sou YouTube nou an - abòne pou w pa rate!

Videyo ak glisad

Videyo nan pèfòmans lan (44 minit):

Prezantasyon rapò a:

PS

Lòt rapò sou Kubernetes sou blog nou an:

Sous: www.habr.com

Add nouvo kòmantè