tapula'a o le PPU ma le fa'aoso fa'amalosi i Kubernetes

Manatua. fa'aliliu.: O lenei tala fa'asolopito o le mata-matatala o Omio-o se faʻasalalauga malaga a Europa-e ave ai le au faitau mai aʻoaʻoga faʻavae i le faʻaogaina o le faʻaogaina o Kubernetes. O le masani i ia mataupu e fesoasoani e le gata ina faʻalauteleina lau vaʻaia, ae faʻapea foʻi ma le puipuia o faʻafitauli e le taua.

tapula'a o le PPU ma le fa'aoso fa'amalosi i Kubernetes

Na i ai se taimi na i ai sau talosaga ua mau i totonu, taofi le tali atu i siaki soifua maloloina, ma e le mafai ona e iloa pe aisea? O le tasi fa'amatalaga e mafai ona feso'ota'i ma tapula'a quota puna'oa CPU. O le mea lea o le a tatou talanoa i ai i lenei tusiga.

TL; AMA:
Matou te fautuaina malosi le faʻagata o tapulaʻa CPU i Kubernetes (poʻo le faʻagata CFS quotas i Kubelet) pe afai o loʻo e faʻaogaina se faʻaoga o le fatu Linux ma se pusa CFS quota. I totonu o loʻo i ai ogaoga ma lauiloa ose bug e o'o atu ai i le so'ona to'a ma tuai
.

I Omio o aseta uma e pulea e Kubernetes. O a matou galuega fa'akomepiuta ma le leai o ni fa'atonuga e fa'atautaia na'o Kubernetes (matou te fa'aogaina le Google Kubernetes Engine). I le ono masina talu ai, na amata ona matou matauina le faʻagesegese faʻafuaseʻi. Talosaga ua malolo pe taofi le tali atu i siaki soifua maloloina, leiloa le fesoʻotaʻiga i fesoʻotaʻiga, ma isi. O lenei amioga na matou le mautonu ai mo se taimi umi, ma mulimuli ane na matou filifili e manatu mamafa i le faafitauli.

Aotelega o le tusiga:

  • O nai upu e uiga i koneteina ma Kubernetes;
  • Fa'afefea ona fa'atinoina talosaga ma tapula'a ole CPU;
  • Fa'afefea ona galue tapula'a CPU i si'osi'omaga tele-autu;
  • E faʻafefea ona siaki le faʻaogaina o le CPU;
  • Fofo faʻafitauli ma nuances.

O nai upu e uiga i koneteina ma Kubernetes

O Kubernetes o le tulaga faʻaonaponei i le lalolagi atinaʻe. O lana galuega autu o le fa'aputuina o container.

Koneteina

I le taimi ua tuanaʻi, e tatau ona matou fatuina mea faʻapitoa e pei o Java JARs/WARs, Python Eggs, poʻo mea e mafai ona faʻatinoina e taʻavale i luga o sapalai. Ae ui i lea, ina ia faʻaogaina, e tatau ona faia galuega faʻaopoopo: faʻapipiʻi le siʻosiʻomaga taimi (Java/Python), tuʻu faila manaʻomia i nofoaga saʻo, faʻamautinoa le fetaui ma se faʻamatalaga patino o le faiga faʻaoga, ma isi. I se isi faaupuga, e tatau ona gauai atu ma le totoa i le pulega faʻatulagaina (lea e masani ona avea ma faʻapogai o fefinauaiga i le va o tagata atiaʻe ma pulega faʻaoga).

O pusa na suia mea uma. O le taimi nei o le meafaitino o se ata pusa. E mafai ona faʻatusalia o se ituaiga o faila faʻapipiʻi faʻalautele e aofia ai e le gata o le polokalama, ae faʻapea foʻi ma se siosiomaga faʻataunuʻu atoatoa (Java/Python/...), faʻapea foʻi ma faila manaʻomia, faʻapipiʻi muamua ma sauni e fai. tamoe. E mafai ona fa'apipi'i ma ta'avale i luga o sapalai eseese e aunoa ma ni la'asaga fa'aopoopo.

E le gata i lea, o koneteina o loʻo faʻaogaina i totonu o latou lava pusa oneone. E i ai a latou lava fesoʻotaʻiga fesoʻotaiga vavave, o latou lava faila faila ma le faʻatapulaʻaina o avanoa, o latou lava faʻasologa o faiga, o latou lava tapulaʻa i luga o le PPU ma le manatua, ma isi. O nei mea uma e faʻatinoina faʻafetai i se subsystem faʻapitoa o le kernel Linux - namespaces.

Kubernetes

E pei ona taʻua muamua, o Kubernetes o se tagata faʻapipiʻi pusa. E pei o lenei: e te tuʻuina atu i ai se vaitaele o masini, ona e fai atu lea: "Hey, Kubernetes, seʻi o tatou faʻalauiloa ni mea se sefulu o laʻu atigipusa ma 2 processors ma le 3 GB o le manatua i le tasi, ma faʻaauau pea!" O le a tausia e Kubernetes le vaega o totoe. O le a maua avanoa avanoa, fa'alauiloa koneteina ma toe amata pe a mana'omia, fa'asalalau se fa'afouga pe a suia fa'aliliuga, ma isi. O le mea moni, o Kubernetes e fa'atagaina oe e aveese le vaega o meafaigaluega ma faia le tele o ituaiga faiga e talafeagai mo le fa'aogaina ma le fa'atinoina o talosaga.

tapula'a o le PPU ma le fa'aoso fa'amalosi i Kubernetes
Kubernetes mai le vaaiga a le tagata lautele

O a talosaga ma tapula'a i Kubernetes

Lelei, ua matou ufiufi pusa ma Kubernetes. Matou te iloa foi e tele pusa e mafai ona nonofo i luga o le masini e tasi.

E mafai ona tusia se tala faatusa i se fale mautotogi. Ose fale vateatea (masini/iunite) e ave ma mautotogi i le tele o tagata mautotogi (koneteina). Kubernetes galue o se tagata fa'atau. O le fesili e tulaʻi mai, pe faʻafefea ona taofia tagata nofoia mai feeseeseaiga ma le tasi ma le isi? Ae faʻapefea pe afai o se tasi oi latou, fai mai, filifili e nono le faletaele mo le afa o le aso?

O iina e amata ai talosaga ma tapula'a. PPU talosaga e mana'omia mo na'o fuafuaga. O se mea lea e pei o se "lisi o moomooga" o le atigipusa, ma e faʻaaogaina e filifili ai le node sili ona talafeagai. I le taimi lava e tasi o le PPU tapulaʻa e mafai ona faʻatusatusa i se maliliega lisi - o le taimi lava tatou te filifilia ai se iunite mo le pusa, o le le mafai alu i tua atu o tapulaa faatulagaina. Ma o le mea lea e tulai mai ai le faafitauli...

Fa'afefea ona fa'atinoina talosaga ma tapula'a ile Kubernetes

O lo'o fa'aogaina e Kubernetes se masini fa'ato'a (fa'ase'e solo o le uati) fausia i totonu ole fatu e fa'atino ai tapula'a ole CPU. Afai o se talosaga e sili atu i le tapula'a, e mafai ona fa'agata (fa'ata'ita'iga, e itiiti ifo ta'amilosaga CPU e maua). Talosaga ma tapulaʻa mo manatua e ese le faʻatulagaina, ina ia faigofie ona iloa. Ina ia faia lenei mea, naʻo le siaki le tulaga toe amata mulimuli o le pod: pe o le "OOMKilled". E le faigofie tele le fa'aogaina o le PPU, talu ai na'o K8 e fa'aavanoa fua fa'atatau ile fa'aoga, ae le o vaega.

Talosaga CPU

tapula'a o le PPU ma le fa'aoso fa'amalosi i Kubernetes
Fa'afefea ona fa'atinoina le talosaga a le CPU

Mo le faʻafaigofie, seʻi o tatou vaʻavaʻai i le faʻagasologa o le faʻaaogaina o se masini ma le 4-core CPU e fai ma faʻataʻitaʻiga.

E fa'aogaina e K8s se masini fa'apulepulega (cgroups) e pulea ai le tu'ufa'atasia o puna'oa (manatua ma le gaosiga). O loʻo avanoa se faʻataʻitaʻiga faʻapitoa mo ia: o le tamaititi e maua le tapulaʻa o le vaega matua. O faʻamatalaga tufatufa o loʻo teuina i totonu o se faila faila faila (/sys/fs/cgroup). I le tulaga o se processor o le /sys/fs/cgroup/cpu,cpuacct/*.

K8s faʻaaoga faila cpu.share e faasoasoa punaoa processor. I la matou tulaga, o le root cgroup e maua ai le 4096 sea o punaoa CPU - 100% o le malosiaga o loʻo avanoa (1 core = 1024; o se tau faʻamautu). O le vaega a'a e tufatufa atu punaoa fa'atatau e fa'atatau i sea o suli ua lesitala i totonu cpu.share, ma latou, i le isi itu, latou te faia le mea lava lea e tasi i a latou fanau, ma isi. I luga o se node masani Kubernetes, o le root cgroup e toatolu tamaiti: system.slice, user.slice и kubepods. O vaega muamua e lua o lo'o fa'aaogaina e tufatufa atu ai punaoa i le va o uta fa'aletonu ma polokalame fa'aoga i fafo atu o K8s. Le mea mulimuli- kubepods - na faia e Kubernetes e tufatufa atu punaoa i le va o pods.

O le ata o loʻo i luga o loʻo faʻaalia ai na maua e le vaega muamua ma le lua vaega taʻitasi 1024 sea, faatasi ai ma le vaega laiti o le kuberpod ua atofaina 4096 sea E fa'afefea ona faia lenei mea: pe a uma, e na'o le vaega a'a e mafai ona maua 4096 sea, ma o le aofaiga o sea o ana fanau e matua sili atu nai lo lenei numera (6144)? O le manatu o le tau e fetaui lelei, o lea e faʻaaogaina ai e le Linux scheduler (CFS) e faʻasoa faʻatasi ai punaoa CPU. I la matou tulaga, o vaega muamua e lua e maua 680 sea ​​moni (16,6% o le 4096), ma maua e le kubepod le totoe 2736 sea I le tulaga o le taimi malolo, o vaega muamua e lua o le a le faʻaogaina punaoa tuʻufaʻatasia.

O le mea e lelei ai, o loʻo i ai i le faʻatulagaina se masini e aloese ai mai le faʻaumatia o punaoa CPU e leʻi faʻaaogaina. Na te faʻafeiloaʻi le malosi o le "nofoaga" i se vaitaele o le lalolagi, lea e tufatufa atu ai i vaega e manaʻomia le malosi faʻaopoopo (o le fesiitaiga e tupu i vaega e aloese ai mai le faʻamavaeina o gau). O se auala faapena e faatatau i fanau uma e tupuga mai ai.

O lenei faiga e faʻamautinoa ai le tufatufaina saʻo o le malosi o le gaosiga ma faʻamautinoa e leai se tasi e "gaoi" punaoa mai isi.

PPU Tapulaa

E ui i le mea moni e foliga tutusa le faʻatulagaina o tapulaʻa ma talosaga i K8s, o la latou faʻatinoga e matua ese lava: o lenei sili ona faaseseina ma le vaega aupito itiiti fa'amauina.

K8s fa'atasi CFS quota mechanism e faatino tapulaa. O latou faatulagaga o loʻo faʻamaonia i faila cfs_period_us и cfs_quota_us i le cgroup directory (o loʻo iai foi le faila iina cpu.share).

E le pei o cpu.share, ole quota e fa'avae ile vaitaimi, ae le o luga o le malosiaga o loʻo avanoa. cfs_period_us faʻamaonia le umi o le vaitaimi (epoch) - e masani lava 100000 μs (100 ms). E i ai se filifiliga e sui ai lenei tau i K8s, ae na'o avanoa i le alpha mo le taimi nei. E fa'aaoga e le tagata fa'atulagaina le taimi e toe amata ai quota fa'aaoga. Faila lona lua cfs_quota_us, fa'amaoti le taimi avanoa (quota) i vaitau ta'itasi. Manatua o loʻo faʻamaonia foi i microseconds. Ole quota e mafai ona sili atu ile umi ole vaitaimi; i se isi faaupuga, atonu e sili atu i le 100 ms.

Seʻi o tatou vaʻavaʻai i ni faʻataʻitaʻiga se lua i luga o masini 16-core (le ituaiga masani o komepiuta o loʻo i ai i Omio):

tapula'a o le PPU ma le fa'aoso fa'amalosi i Kubernetes
Fa'aaliga 1: 2 filo ma se tapulaa 200 ms. Leai se tootoo

tapula'a o le PPU ma le fa'aoso fa'amalosi i Kubernetes
Fa'aaliga 2: 10 filo ma le 200 ms tapula'a. E amata le fa'ato'a pe a uma le 20 ms, toe fa'aauau le avanoa i punaoa gaosi pe a mae'a le isi 80 ms

Fa'apea e te setiina le tapula'a o le CPU i 2 fatu; O le a fa'aliliu e Kubernetes lenei tau i le 200 ms. O lona uiga e mafai e le atigipusa ona fa'aoga le maualuga ole 200ms ole taimi ole PPU e aunoa ma le fa'afefe.

Ma o iinei e amata ai le fiafia. E pei ona taʻua i luga, o le quota avanoa e 200 ms. Afai o lo'o e galue fa'atasi sefulu filo i luga o se masini 12-core (silasila i le faʻataʻitaʻiga mo le faʻataʻitaʻiga 2), aʻo faʻaoga uma isi pusa, o le a faʻaumatia le aofaʻi i le na o le 20 ms (talu mai le 10 * 20 ms = 200 ms), ma o filo uma o lenei pod o le a tautau. » (tulu) mo le isi 80 ms. O le ua uma ona ta'ua fa'asologa o mea leaga, ona o le tele o le fa'afefeteina e tupu ma e le mafai e le container ona fa'amalieina le quota o lo'o iai.

E faʻafefea ona iloilo le faʻafefe i totonu o pusa?

Na'o le saini i le pod ma fa'atino cat /sys/fs/cgroup/cpu/cpu.stat.

  • nr_periods - le aofa'i o taimi fa'atulagaina;
  • nr_throttled - numera o vaitaimi fa'amalo i totonu o le tuufaatasiga nr_periods;
  • throttled_time - fa'aputuga taimi fa'atupu i nanoseconds.

tapula'a o le PPU ma le fa'aoso fa'amalosi i Kubernetes

O le a moni lava le mea o tupu?

O le i'uga, matou te maua le fa'amalo maualuga i talosaga uma. O nisi taimi o lo'o i totonu tasi ma le afa taimi malosi nai lo le fuafuaina!

E o'o atu ai i fa'aletonu eseese - fa'aletonu le siakiina o le saunia, fa'amalo koneteina, motusia feso'ota'iga feso'ota'iga, fa'agata taimi i totonu o telefoni tautua. Ole mea lea e i'u ai ile fa'atuputeleina o le fa'aletonu ma maualuga atu fua o mea sese.

Filifiliga ma taunuuga

E faigofie mea uma iinei. Na matou lafoaia tapulaʻa o le PPU ma amata ona faʻafouina le fatu OS i fuifui i le lomiga lata mai, lea na faʻapipiʻi ai le pusa. Ole numera o mea sese (HTTP 5xx) i a matou auaunaga na vave ona paʻu i lalo:

HTTP 5xx mea sese

tapula'a o le PPU ma le fa'aoso fa'amalosi i Kubernetes
HTTP 5xx mea sese mo se tasi auaunaga taua

Taimi tali p95

tapula'a o le PPU ma le fa'aoso fa'amalosi i Kubernetes
Talosaga au'aunaga taua le tumau, 95 pasene

Tau fa'agaioiga

tapula'a o le PPU ma le fa'aoso fa'amalosi i Kubernetes
Numera o itula fa'aalu

O le a le puʻe?

E pei ona taʻua i le amataga o le tusiga:

E mafai ona tusia se tala fa'atusa i se fale mautotogi fa'alaua'itele... Kubernetes galue o se tagata fa'atau. Ae faʻafefea ona taofia tagata nofoia mai feeseeseaiga ma le tasi ma le isi? Ae faʻapefea pe afai o se tasi oi latou, fai mai, filifili e nono le faletaele mo le afa o le aso?

O le pu'e lea. E tasi le atigipusa fa'atamala e mafai ona 'aina uma punaoa CPU o lo'o avanoa i luga o se masini. Afai ei ai sau faʻapipiʻi atamai (mo se faʻataʻitaʻiga, JVM, Go, Node VM ua faʻapipiʻiina lelei), e le o se faʻafitauli: e mafai ona e galue i ia tulaga mo se taimi umi. Ae afai e le lelei le faʻaogaina o talosaga pe leai foi se mea e sili ona lelei (FROM java:latest), e ono le mafai ona pulea le tulaga. I Omio o loʻo i ai a matou masini faʻavae Dockerfiles faʻatasi ai ma tulaga faʻaletonu talafeagai mo le faʻaputuga gagana tele, o lea e leʻi iai lenei mataupu.

Matou te fautuaina le mataituina o fuataga Faʻaaoga (fa'aoga, saturation ma mea sese), API tuai ma fua o mea sese. Ia mautinoa o taunuuga e fetaui ma faamoemoega.

mau

O le tatou tala lenei. O mea nei na fesoasoani tele e malamalama ai i le mea na tupu:

Kubernetes bug lipoti:

Ua e feagai ma fa'afitauli fa'apena i lau fa'ata'ita'iga pe iai fo'i le poto masani e feso'ota'i ma le fa'amama i totonu o si'osi'omaga o gaosiga? Fa'asoa lau tala ile fa'amatalaga!

PS mai faaliliu

Faitau foi i la matou blog:

puna: www.habr.com

Faaopoopo i ai se faamatalaga