Autoscaling ma le puleaina o punaoa i Kubernetes (vaaiga lautele ma lipoti vitio)

Aperila 27 i le konafesi Strike 2019, o se vaega o le "DevOps" vaega, o le lipoti "Auto-scaling ma le puleaina o punaoa i Kubernetes" na tuʻuina atu. O lo'o talanoa pe fa'apefea ona e fa'aogaina K8s e fa'amautinoa ai le maualuga o le avanoa o au talosaga ma fa'amautinoa le maualuga o le fa'atinoga.

Autoscaling ma le puleaina o punaoa i Kubernetes (vaaiga lautele ma lipoti vitio)

E tusa ai ma tu ma aga, matou te fiafia e tuʻuina atu vitio o le lipoti (44 minute, e sili atu le malamalama nai lo le tusiga) ma le aotelega autu i tusitusiga. Alu!

Sei o tatou iloiloina le autu o le lipoti i lea upu ma lea upu ma amata mai le faaiuga.

Kubernetes

Fa'apea o lo'o i ai a matou koneteina Docker i luga o la matou talimalo. Mo le a? Ina ia mautinoa le toe faʻaleleia ma le faʻaesea, lea e mafai ai ona faʻaogaina faigofie ma lelei, CI / CD. E tele a matou ta'avale fa'apenei ma pusa.

O le a le mea e saunia e Kubernetes i lenei tulaga?

  1. Matou te le toe mafaufau e uiga i nei masini ma amata galue ma le "ao" fuifui o koneteina po'o pusa (vaega o koneteina).
  2. E le gata i lea, matou te le mafaufau e uiga i pods taʻitoʻatasi, ae pulea atiliоvaega tetele. E faapena tulaga maualuga muamua fa'atagaina matou e fai atu o lo'o i ai se fa'ata'ita'iga mo le fa'atinoina o se galuega fa'apitoa, ma o le numera mana'omia lea o taimi e fa'atino ai. Afai tatou te suia mulimuli ane le mamanu, o mea uma o le a suia.
  3. Faatasi ai ma le fesoasoani a fa'ailoa API Nai lo le faʻatinoina o se faʻasologa o poloaiga faʻapitoa, matou te faʻamatalaina le "faatulagaga o le lalolagi" (i le YAML), lea na faia e Kubernetes. Ma le isi: pe a suia le faʻamatalaga, o lona faʻaaliga moni o le a suia foi.

Pulega o punaoa

CPU

Sei o tatou tamoe i le nginx, php-fpm ma mysql i luga o le server. O nei 'au'aunaga o le a sili atu le tele o fa'agasologa o lo'o fa'agaoioia, o ia mea ta'itasi e mana'omia ai punaoa fa'akomepiuta:

Autoscaling ma le puleaina o punaoa i Kubernetes (vaaiga lautele ma lipoti vitio)
(o numera o lo'o i luga o le fa'ase'e o le "parrots", o le mana'oga fa'apitoa o faiga ta'itasi mo le mana fa'akomepiuta)

Ina ia faafaigofieina le galue i lenei mea, e talafeagai le tuʻufaʻatasia o faiga i vaega (mo se faʻataʻitaʻiga, o faiga uma o le nginx i le tasi vaega "nginx"). O se auala faigofie ma manino e fai ai lenei mea o le tuʻuina lea o vaega taʻitasi i totonu o se atigipusa:

Autoscaling ma le puleaina o punaoa i Kubernetes (vaaiga lautele ma lipoti vitio)

Ina ia faʻaauau, e tatau ona e manatua pe o le a le pusa (i Linux). O latou foliga na mafai ona faʻafetai i vaega taua e tolu i totonu o le fatu, na faʻatinoina i se taimi ua leva: mafai gafatia, igoa igoa и kulupu. Ma o isi atinaʻe na faʻafaigofieina e isi tekinolosi (e aofia ai "pepa" talafeagai e pei o Docker):

Autoscaling ma le puleaina o punaoa i Kubernetes (vaaiga lautele ma lipoti vitio)

I le tulaga o le lipoti, matou te fiafia i ai kulupu, aua o vaega faʻatonutonu o vaega ia o le faʻatinoga o koneteina (Docker, ma isi) e faʻatinoina le puleaina o punaoa. Fa'agasologa tu'ufa'atasia i vaega, e pei ona matou mana'o ai, o vaega fa'atonutonu.

Sei o tatou toe foʻi i le CPU manaʻomia mo nei faʻagasologa, ma le taimi nei mo vaega o faiga:

Autoscaling ma le puleaina o punaoa i Kubernetes (vaaiga lautele ma lipoti vitio)
(Ou te toe fai atu o numera uma o se faʻaaliga manino o le manaʻomia mo punaoa)

I le taimi lava e tasi, o le PPU lava ia o loʻo i ai se punaoa faʻapitoa (i le faʻataʻitaʻiga o le 1000), atonu e le maua e tagata uma (o le aofaʻi o manaʻoga o vaega uma e 150+850+460=1460). O le a le mea o le a tupu i lenei tulaga?

O le fatu e amata ona tufatufaina atu punaoa ma faia "saʻo", tuʻuina atu le aofaʻi tutusa o punaoa i vaega taʻitasi. Ae i le tulaga muamua, e sili atu nai lo le manaʻomia (333> 150), o lea o le sili atu (333-150=183) o loʻo tumau pea i le faʻaagaga, lea e tutusa foi le tufatufaina i le va o isi pusa e lua:

Autoscaling ma le puleaina o punaoa i Kubernetes (vaaiga lautele ma lipoti vitio)

O se taunuuga: o le pusa muamua na lava punaoa, o le lona lua - e leʻi lava punaoa, lona tolu - e leʻi lava punaoa. O le taunuuga lea o gaioiga "faʻamaoni" faʻatulagaina i Linux - CFS. E mafai ona fetuutuunai lona faagaoioiga e faaaoga ai le tofiga fuataga o pusa taitasi. Mo se faʻataʻitaʻiga, pei o lenei:

Autoscaling ma le puleaina o punaoa i Kubernetes (vaaiga lautele ma lipoti vitio)

Sei o tatou tilotilo i le tulaga o le le lava o punaoa i le pusa lona lua (php-fpm). O punaoa uma o pusa e tufatufa tutusa i le va o faiga. O le iʻuga, e lelei le faiga o le matai, ae faʻagesegese uma tagata faigaluega, maua lalo ifo o le afa o mea latou te manaʻomia:

Autoscaling ma le puleaina o punaoa i Kubernetes (vaaiga lautele ma lipoti vitio)

O le auala lea e galue ai le CFS scheduler. O le a matou faʻaigoaina atili le mamafa matou te tuʻuina atu i containers talosaga. Aisea ua faapea ai - va'ai atili.

Sei o tatou tilotilo i le tulaga atoa mai le isi itu. E pei ona e iloa, o auala uma e tau atu i Roma, ma i le tulaga o se komepiuta, i le PPU. Tasi le PPU, tele galuega - e te manaʻomia se moli auala. O le auala pito sili ona faigofie e faʻatautaia ai punaoa o le "malamalama o feoaiga": na latou tuʻuina atu se tasi faʻagasologa o se taimi avanoa i le PPU, ona sosoo ai lea ma le isi, ma isi.

Autoscaling ma le puleaina o punaoa i Kubernetes (vaaiga lautele ma lipoti vitio)

O lea faiga ua ta'ua o le quotas faigata (faigata tapula'a). Sei o tatou manatua faigofie lava tapula'a. Ae peitaʻi, afai e te tufatufa atu tapulaʻa i pusa uma, e tulaʻi mai se faʻafitauli: mysql o loʻo taʻavale i luga o le auala ma i se taimi na muta ai lona manaʻoga mo le PPU, ae o isi faiga uma e faʻatali seʻia oʻo i le PPU. fa'anofonofo.

Autoscaling ma le puleaina o punaoa i Kubernetes (vaaiga lautele ma lipoti vitio)

Sei o tatou toe foi i le fatu Linux ma ana fegalegaleaiga ma le PPU - o le ata atoa e faapea:

Autoscaling ma le puleaina o punaoa i Kubernetes (vaaiga lautele ma lipoti vitio)

cgroup e lua tulaga - o le mea moni o ni "mimilo" faigofie e lua e mafai ai ona e fuafuaina:

  1. mamafa mo pusa (talosaga) o sea;
  2. pasene o le taimi atoa PPU mo le galue i luga o koneteina galuega (tapunia) o quota.

E fa'afefea ona fua le PPU?

E eseese auala:

  1. ā sega, e leai se tasi na te iloa - e tatau ona e feutagai i taimi uma.
  2. Tului manino, ae faʻatatau: 50% o se 'auʻaunaga ma 4 cores ma faʻatasi ai ma 20 cores o mea e matua ese lava.
  3. E mafai ona e faʻaogaina mea ua uma ona taʻua fuataga, lea e iloa e Linux, ae e fa'atatau foi.
  4. O le filifiliga pito sili ona talafeagai o le fuaina o punaoa faakomepiuta i sekone. O na. i sekone o le taimi o le gaosiga e fa'atatau i sekone o le taimi moni: 1 lona lua o le taimi o le gaosiga na tu'uina atu i le 1 lona lua - o le tasi lea o le CPU atoa.

Ina ia faafaigofie le tautala, na amata ona latou fua saʻo i totonu fatu, o lona uiga latou te tutusa le taimi CPU e faʻatatau i le mea moni. Talu ai e malamalama Linux i le mamafa, ae le o le tele o le CPU taimi / cores, na manaʻomia se masini e faʻaliliu mai le tasi i le isi.

Sei o tatou mafaufau i se faʻataʻitaʻiga faigofie ma se 'auʻaunaga ma 3 CPU cores, lea e tolu pods o le a tuʻuina atu le mamafa (500, 1000 ma 1500) e faigofie ona liua i vaega tutusa o 'au e tuʻuina atu ia i latou (0,5, 1 ma 1,5).

Autoscaling ma le puleaina o punaoa i Kubernetes (vaaiga lautele ma lipoti vitio)

Afai e te ave se server lona lua, lea o le a faaluaina le tele o cores (6), ma tuʻu tutusa pods iina, o le tufatufaina o cores e faigofie ona fuafua i le na o le faʻateleina i le 2 (1, 2 ma le 3, faasologa). Ae o se taimi taua e tupu pe a faʻaalia le fa o pod i luga o lenei 'auʻaunaga, o lona mamafa, mo le faʻaogagofie, o le a 3000. E aveesea ai se vaega o punaʻoa o le PPU (afa o fatu), ma mo isi pusa e toe faʻatatauina (afa):

Autoscaling ma le puleaina o punaoa i Kubernetes (vaaiga lautele ma lipoti vitio)

Kubernetes ma punaoa CPU

I Kubernetes, o punaoa CPU e masani ona fua i totonu miliadrax, i.e. 0,001 cores ua ave e fai ma faavae mamafa. (O le mea lava e tasi i le Linux/cgroups terminology e taʻua o le CPU share, e ui lava, sili atu, 1000 milicores = 1024 CPU sea.) K8s faʻamautinoa e le tuʻuina atu ni pusa sili atu i luga o le 'auʻaunaga nai lo le i ai o punaoa CPU mo le aofaʻi o le mamafa o pusa uma.

E faapefea ona tupu lenei mea? A e fa'aopoopoina se 'au'aunaga i se fa'aputuga Kubernetes, e fa'ailoa mai pe fia le aofa'i o le CPU o lo'o maua. Ma pe a fatuina se pod fou, e iloa e le Kubernetes scheduler le tele o cores e manaʻomia e lenei pod. O le mea lea, o le pod o le a tuʻuina atu i se 'auʻaunaga lea e lava 'au.

O le a le mea e tupu pe a o lo'o fa'amaoti mai le talosaga (o lona uiga o le pod e leai se numera fa'amalamalamaina o 'au e mana'omia)? Se'i tatou va'ai pe fa'afefea ona faitau e Kubernetes punaoa.

Mo se pod e mafai ona e faʻamaonia uma talosaga (CFS scheduler) ma tapulaʻa (manatua le moli auala?):

  • Afai e faʻamaonia tutusa, ona tuʻuina atu lea o le pod i se vasega QoS faʻamaonia. O lenei numera o cores e avanoa i taimi uma e faʻamaonia.
  • Afai o le talosaga e itiiti ifo nai lo le tapulaa - QoS vasega pa'u. O na. Matou te faʻamoemoe o se pod, mo se faʻataʻitaʻiga, e faʻaaoga i taimi uma le 1 autu, ae o lenei tau e le o se tapulaa mo ia: o nisi taimi pod e mafai ona faʻaoga atili (pe a maua fua e le 'auʻaunaga mo lenei mea).
  • E iai fo'i le vasega QoS sili taumafaiga - o lo'o aofia ai fo'i pusa ia e le'o fa'ailoa mai ai le talosaga. O punaoa e tuuina atu ia i latou mulimuli.

manatua

Faatasi ai ma le manatua, o le tulaga e tutusa, ae teisi ese - pe a uma, o le natura o nei punaoa e ese. I se tulaga lautele, o le talafaatusa e faapea:

Autoscaling ma le puleaina o punaoa i Kubernetes (vaaiga lautele ma lipoti vitio)

Se'i va'ai pe fa'apefea ona fa'atino talosaga i le manatua. Tuu le pods e ola i luga o le server, suia le taumafaina manatua, seʻia oʻo ina matua tele se tasi e leai se manatua. I lenei tulaga, o le OOM killer e aliali mai ma faʻaumatia le tele o gaioiga:

Autoscaling ma le puleaina o punaoa i Kubernetes (vaaiga lautele ma lipoti vitio)

E le fetaui lenei mea ia i tatou i taimi uma, o lea e mafai ai ona faʻatonutonu po o fea faiga e taua ia i tatou ma e le tatau ona fasiotia. Ina ia faia lenei mea, faʻaaoga le parakalafa oom_score_adj.

Sei o tatou toe foʻi i vasega QoS o le PPU ma tusi se faʻataʻitaʻiga ma le oom_score_adj faʻatatau e fuafua ai mea e ave i ai mea e ave i ai le mafaufau mo pods:

  • Ole tau maualalo ole oom_score_adj mo se pod - -998 - o lona uiga e tatau ona faʻaumatia se mea mulimuli, lea faʻamaonia.
  • Le maualuga - 1000 - o sili taumafaiga, e muamua mate ia poti.
  • E fa'atatau le tau o totoe (pa'u) o loʻo i ai se fua faʻatatau, o lona uiga e faʻapipiʻi i lalo i le mea moni o le tele o punaoa na talosagaina e se pod, o le itiiti ifo lea o le a fasiotia.

Autoscaling ma le puleaina o punaoa i Kubernetes (vaaiga lautele ma lipoti vitio)

O le "mimilo" lona lua - limit_in_bytes - mo tapula'a. Faʻatasi ai, e faigofie mea uma: matou te tuʻuina atu le aofaʻi maualuga o le manatuaina, ma iinei (e le pei o le PPU) e leai se fesili pe faʻafefea ona fuaina (manatua).

Aofaʻi

O pod ta'itasi ile Kubernetes ua tu'uina atu requests и limits - itu uma e lua mo le PPU ma le manatua:

  1. faʻavae i luga o talosaga, o loʻo galue le Kubernetes scheduler, lea e tufatufa atu pods i totonu o 'auʻaunaga;
  2. faʻavae i luga o faʻamaufaʻailoga uma, ua fuafuaina le vasega QoS pod;
  3. O fua fa'atatau e fuafua e fa'atatau i talosaga a le PPU;
  4. o le CFS scheduler ua fa'atulagaina e fa'atatau i talosaga CPU;
  5. OOM killer ua faʻatulagaina e faʻavae i luga o talosaga manatua;
  6. o se "molī taʻavale" ua faʻatulagaina e faʻatatau i tapulaʻa o le CPU;
  7. Faʻavae i luga o tapulaʻa manatua, ua faʻatulagaina se tapulaʻa mo le cgroup.

Autoscaling ma le puleaina o punaoa i Kubernetes (vaaiga lautele ma lipoti vitio)

I se tulaga lautele, o lenei ata e tali uma fesili e uiga i le auala e tupu ai le vaega autu o le puleaina o punaoa i Kubernetes.

Autoscaling

K8s fuifui-autoscaler

Sei o tatou mafaufau ua uma ona nofoia le fuifui atoa ma e manaʻomia ona fai se pusa fou. E ui e le mafai ona aliali mai le pod, e tautau i le tulaga aʻo. Ina ia faʻaalia, e mafai ona matou faʻafesoʻotaʻi se server fou i le fuifui poʻo ... faʻapipiʻi cluster-autoscaler, lea o le a faia mo i matou: faʻatonu se masini masini mai le faʻapipiʻi ao (faʻaaogaina se talosaga API) ma faʻafesoʻotaʻi i le fuifui. , a maeʻa ona faʻaopoopoina lea o le pod .

Autoscaling ma le puleaina o punaoa i Kubernetes (vaaiga lautele ma lipoti vitio)

O le autoscaling lea o le Kubernetes cluster, lea e aoga tele (i lo matou poto masani). Ae ui i lea, e pei o isi nofoaga, o loʻo i ai ni nuances iinei ...

O le a lava le umi tatou te faʻateleina le fuifui tele, sa lelei mea uma, ae o le a le mea e tupu pe a fuifui amata ona faasaolotoina o ia? O le fa'afitauli o le femalaga'iga pods (e fa'asa'oloto ai 'au) e matua'i faigata ma taugata i tulaga o punaoa. E fa'aaogaina e Kubernetes se faiga e matua'i ese lava.

Manatu i se fuifui o 3 sapalai o loʻo i ai le Faʻatulagaina. E 6 pods: o lea e 2 mo 'au'aunaga ta'itasi. Mo nisi mafuaaga na matou mananao e tape se tasi o sapalai. Ina ia faia lenei mea o le a matou faʻaaogaina le poloaiga kubectl drain, lea:

  • o le a fa'asāina le tu'uina atu o pusa fou i lenei 'au'aunaga;
  • o le a tapeina pods o iai i luga o le server.

Talu ai o Kubernetes e nafa ma le tausia o le numera o pods (6), e faigofie lava o le a toe faia latou i luga o isi nodes, ae le o luga o le tasi ua le atoatoa, talu ai ua uma ona faailogaina e le avanoa mo le talimalo pods fou. Ole masini fa'avae lea mo Kubernetes.

Autoscaling ma le puleaina o punaoa i Kubernetes (vaaiga lautele ma lipoti vitio)

Ae ui i lea, o loʻo i ai foi se nuance iinei. I se tulaga talitutusa, mo StatefulSet (nai lo le Faʻatulagaina), o le a ese le gaioiga. O lea ua uma ona i ai se matou talosaga faʻapitoa - mo se faʻataʻitaʻiga, tolu pods ma MongoDB, o le tasi o loʻo i ai se faʻafitauli (ua faʻaleagaina faʻamaumauga poʻo se isi mea sese e taofia ai le pod mai le amata saʻo). Ma matou toe filifili e faʻamalo se tasi server. O le a le mea o le a tupu?

Autoscaling ma le puleaina o punaoa i Kubernetes (vaaiga lautele ma lipoti vitio)

MongoDB mafai oti ona e mana'omia se korama: mo se fuifui o fa'apipi'i se tolu, e le itiiti ifo i le lua e tatau ona fa'atino. Ae peitai, o lenei e le o tupu - faafetai i PodDisruptionBudget. O lenei fa'ata'ita'iga e fuafua ai le numera aupito maualalo mana'omia o pods galue. I le iloaina o se tasi o le MongoDB pods ua le o toe galue, ma le vaʻaia o le PodDisruptionBudget ua seti mo MongoDB minAvailable: 2, Kubernetes o le a le faatagaina oe e tape se pod.

Laʻasaga pito i lalo: ina ia mafai e le gaioiga (ma o le mea moni, o le toe faʻafouina) o pods e galue saʻo pe a faʻamalolo le fuifui, e tatau ona faʻapipiʻi PodDisruptionBudget.

Fua faalava

Seʻi o tatou iloiloina se isi tulaga. O loʻo i ai se talosaga o loʻo faʻaogaina e pei o le Deployment i Kubernetes. O fefaʻatauaiga a tagata e oʻo mai i ona pusa (mo se faʻataʻitaʻiga, e tolu i latou), ma matou fuaina se faʻailoga patino i totonu (fai mai, uta CPU). A faʻateleina le uta, matou te faamaumauina i luga o se faʻasologa ma faʻateleina le numera o pods e tufatufa atu talosaga.

I aso nei i Kubernetes e le manaʻomia ona faia ma le lima: o se faʻaopoopoga otometi / faʻaititia i le numera o pods ua faʻatulagaina e faʻatatau i tau o fua faʻatatau o uta.

Autoscaling ma le puleaina o punaoa i Kubernetes (vaaiga lautele ma lipoti vitio)

O fesili autu iinei o: o le a tonu lava le fua и pe faapefea ona faauigaina maua tau (mo le faia o se filifiliga i le suia o le numera o pods). E mafai ona e fuaina le tele:

Autoscaling ma le puleaina o punaoa i Kubernetes (vaaiga lautele ma lipoti vitio)

E faʻafefea ona fai lenei mea faʻapitoa - aoina metrics, ma isi. — Sa ou tautala auiliili i le lipoti e uiga i Mataituina ma Kubernetes. Ma o le fautuaga autu mo le filifilia o mea sili ona lelei o le fa'ata'ita'iga!

o loo i ai FA'AOGA auala (Utilization Saturation and Errors), o lona uiga e faapea. O le a le fa'avae e talafeagai ai le fua, mo se fa'ata'ita'iga, php-fpm? E faavae i luga o le mea moni o tagata faigaluega ua uma, o le mea lea faʻaaogaina. Ma afai ua maeʻa le aufaigaluega ma e le taliaina ni fesoʻotaʻiga fou, o lea ua uma o afu. E tatau ona fuaina ia mea uma e lua, ma e fa'atatau i tau, e tatau ona fa'ataunu'uina le fuaina.

Nai lo o se faaiuga

O lo'o iai le fa'aauau o le lipoti: e uiga i le fa'avasegaina i luga o le sa'o ma le auala e filifili ai punaoa sa'o. O le a ou talanoa e uiga i lenei mea i vitio i le lumanaʻi tatou YouTube - lesitala ina ia e le misia!

Vitio ma fa'asolo

Vitio mai le faatinoga (44 minute):

Tuuina atu o le lipoti:

SALA

O isi lipoti e uiga i Kubernetes i la matou blog:

puna: www.habr.com

Faaopoopo i ai se faamatalaga