Ny fetran'ny CPU sy ny fanerena mahery vaika ao amin'ny Kubernetes

Fanamarihana. transl.: Ity tantara manokatra maso an'i Omio ity β€” mpanangona fitsangatsanganana Eoropeana β€” dia mitondra ny mpamaky avy amin'ny teoria fototra mankany amin'ireo pitsopitsony azo ampiharina amin'ny fanamboarana Kubernetes. Ny fahafantarana ny tranga toy izany dia tsy vitan'ny hoe manitatra ny faravodilanitrao, fa misoroka olana tsy dia lehibe loatra.

Ny fetran'ny CPU sy ny fanerena mahery vaika ao amin'ny Kubernetes

Efa nisy fampiharana nijanona teo amin'ny toerany ve ianao, nijanona tsy namaly ny fisavana ara-pahasalamana, ary tsy fantatrao ny antony? Ny fanazavana iray azo atao dia mifandraika amin'ny fetran'ny fetran'ny loharanon-karena CPU. Izany no horesahina ato amin’ity lahatsoratra ity.

TL, DR:
Manoro hevitra mafy izahay mba hanesorana ny fetran'ny CPU ao amin'ny Kubernetes (na fanafoanana ny fetran'ny CFS ao amin'ny Kubelet) raha mampiasa dikan-teny Linux miaraka amin'ny bug CFS ianao. Ao amin'ny fotony azo sΓ©rieux ary fanta-daza bibikely izay mitarika ho amin'ny fanerena be loatra sy ny fahatarana
.

Ao Omio Kubernetes no mitantana ny fotodrafitrasa manontolo. Ny enta-mavesatry ny fanjakana sy tsy misy fanjakana dia mandeha amin'ny Kubernetes irery ihany (mampiasa Google Kubernetes Engine izahay). Tao anatin'ny enim-bolana farany dia nanomboka nahita fihemorana tampoka izahay. Ny fampiharana dia miato na mitsahatra tsy mamaly fitsirihana ara-pahasalamana, very ny fifandraisana amin'ny tambajotra, sns. Nanahiran-tsaina anay izany fihetsika izany nandritra ny fotoana ela, ary farany dia nanapa-kevitra ny handray an-tanana ilay olana izahay.

Famintinana ny lahatsoratra:

  • Teny vitsivitsy momba ny kaontenera sy Kubernetes;
  • Ahoana ny fampiharana ny fangatahana CPU sy ny fetra;
  • Ahoana ny fiasan'ny fetran'ny CPU amin'ny tontolo maro-fototra;
  • Ahoana no hanaraha-maso ny fantson'ny CPU;
  • Famahana olana sy ny nuance.

Teny vitsivitsy momba ny kaontenera sy Kubernetes

Kubernetes no fenitra maoderina indrindra amin'ny tontolon'ny fotodrafitrasa. Ny orkestra kaontenera no tena asany.

fitoeran

Taloha, tsy maintsy namorona artifacts toy ny Java JARs/WARs, Python Eggs, na executables isika mba handehanana amin'ny servers. Na izany aza, mba hampahomby azy ireo, dia tsy maintsy nisy asa fanampiny: fametrahana ny tontolo iainana (Java/Python), fametrahana ireo rakitra ilaina amin'ny toerana mety, hiantohana ny fifanarahana amin'ny dikan-teny manokana amin'ny rafitra fiasa, sns. Raha lazaina amin'ny teny hafa, dia tsy maintsy nodinihina tsara ny fitantanana ny fanamafisana (izay matetika no loharanon'ny fifandirana teo amin'ny mpamorona sy ny mpitantana ny rafitra).

Nanova ny zava-drehetra ny kaontenera. Ankehitriny ny artifact dia sary fitoeran-javatra. Izy io dia azo aseho ho karazana rakitra azo tanterahana miitatra izay tsy ny programa ihany, fa ny tontolo famonoana tanteraka (Java/Python/...), ary koa ireo rakitra/fonosana ilaina, napetraka mialoha ary vonona ny mihazakazaka. Ny kaontenera dia azo apetraka sy mandeha amin'ny mpizara samihafa tsy misy dingana fanampiny.

Ankoatr'izay, ny kaontenera dia miasa ao amin'ny tontolo misy azy manokana. Manana ny adaptatera tambajotra virtoaly manokana izy ireo, ny rafitra fichier manokana misy fidirana voafetra, ny ambaratongan'ny fizotrany manokana, ny fetrany manokana amin'ny CPU sy ny fitadidiana, sns. Izany rehetra izany dia ampiharina noho ny subsystem manokana an'ny kernel Linux - namespaces.

Kubernetes

Araka ny voalaza teo aloha, Kubernetes dia mpandrindra kaontenera. Toy izao no miasa: omenao milina maromaro izy, ary avy eo dia miteny hoe: "Hey, Kubernetes, andao hatombotsika ny fitoeram-pitaterako miaraka amin'ny processeur 2 sy fahatsiarovana 3 GB, ary tohizo hatrany!" Kubernetes no hikarakara ny ambiny. Hahita fahafaha-maimaim-poana izy io, hanomboka kaontenera ary hamerina azy ireo raha ilaina, hamoaka fanavaozana rehefa manova dikan-teny, sns. Amin'ny ankapobeny, ny Kubernetes dia ahafahanao manala ny singa fitaovana ary manamboatra rafitra isan-karazany mety amin'ny fametrahana sy fampandehanana rindranasa.

Ny fetran'ny CPU sy ny fanerena mahery vaika ao amin'ny Kubernetes
Kubernetes amin'ny fomba fijerin'ny laika

Inona no fangatahana sy fetra ao amin'ny Kubernetes

Eny, nandrakotra kaontenera sy Kubernetes izahay. Fantatsika ihany koa fa ny kaontenera maromaro dia afaka mipetraka amin'ny milina iray ihany.

Ny fanoharana dia azo atao amin'ny trano communal. Toerana malalaka (milina/unit) no alaina sy hofaina amin'ny mpanofa maromaro (container). Kubernetes dia miasa toy ny mpivarotra entana. Mipetraka ny fanontaniana, ahoana no hiarovana ny mpanofa amin'ny fifandirana? Ahoana raha manapa-kevitra ny hindrana trano fandroana mandritra ny antsasak'andro ny iray amin'izy ireo?

Eo no miditra ny fangatahana sy ny fetra. UnitΓ© centrale Request ilaina fotsiny ho an'ny tanjona drafitra. Ity dia zavatra toy ny "lisitra faniriana" amin'ny fitoeran-javatra, ary ampiasaina hisafidianana ny node mety indrindra. Mandritra izany fotoana izany ny CPU fetra azo ampitahaina amin'ny fifanarahana fanofana - raha vao mifidy vondrona ho an'ny kaontenera, ny tsy afaka mihoatra ny fetra napetraka. Ary eto no mipetraka ny olana...

Ahoana ny fampiharana ny fangatahana sy ny fetra ao amin'ny Kubernetes

Kubernetes dia mampiasa mekanika faneriterena (mandingana ny tsingerin'ny famantaranandro) napetraka ao anaty kernel mba hampiharana ny fetran'ny CPU. Raha mihoatra ny fetra ny fampiharana iray dia alefa ny throttling (izany hoe mahazo tsingerin'ny CPU vitsy kokoa). Ny fangatahana sy ny fetran'ny fitadidiana dia voalamina amin'ny fomba hafa, ka mora kokoa ny mamantatra azy ireo. Mba hanaovana izany, jereo fotsiny ny toetry ny famerenana farany ny pod: na "OOMKilled" izany. Tsy dia tsotra loatra ny fampihenana ny CPU, satria ny K8s dia manome metrika azo ampiasaina amin'ny fampiasana, fa tsy amin'ny cgroups.

Fangatahana CPU

Ny fetran'ny CPU sy ny fanerena mahery vaika ao amin'ny Kubernetes
Ahoana ny fampiharana ny fangatahana CPU

Ho an'ny fahatsorana, andeha hojerentsika ny fomba fampiasana milina misy CPU 4-core ho ohatra.

K8s dia mampiasa mekanika vondrona mpanara-maso (cgroups) mba hifehezana ny fizarana loharanon-karena (fahatsiarovana sy processeur). Misy modely ara-jeografika misy azy: ny zaza dia mandova ny fetran'ny vondron'ny ray aman-dreny. Ny antsipirian'ny fizarana dia voatahiry ao anaty rafi-drakitra virtoaly (/sys/fs/cgroup). Ao amin'ny processeur dia misy izany /sys/fs/cgroup/cpu,cpuacct/*.

K8s dia mampiasa rakitra cpu.share mba hanokana loharanon-karena processeur. Amin'ny tranga misy antsika, ny root cgroup dia mahazo anjara 4096 amin'ny loharano CPU - 100% amin'ny herin'ny processeur misy (1 core = 1024; sanda raikitra izany). Ny vondrona fototra dia mizara loharano mifanaraka amin'ny anjaran'ny taranaka voasoratra anarana cpu.share, ary izy ireo indray dia manao toy izany koa amin'ny taranany, sns. Amin'ny node Kubernetes mahazatra, ny root cgroup dia manana zanaka telo: system.slice, user.slice ΠΈ kubepods. Ireo zana-vondrona roa voalohany dia ampiasaina mba hizarana loharano eo amin'ny enta-mavesatry ny rafitra manakiana sy ny programa mpampiasa ivelan'ny K8. Ny farany - kubepods - noforonin'i Kubernetes mba hizarana loharano eo amin'ny pods.

Ny kisary etsy ambony dia mampiseho fa ny zana-vondrona voalohany sy faharoa dia nahazo ny tsirairay 1024 mizara, miaraka amin'ny zana-vondrona kuberpod natokana 4096 nizara Ahoana no ahafahana manao izany: raha ny marina, ny root group ihany no afaka miditra 4096 ary ny fitambaran'ny anjaran'ny taranany dia mihoatra lavitra noho io isa io (6144)? Ny tiana holazaina dia ny sanda misy dikany, noho izany ny Linux scheduler (CFS) dia mampiasa azy io mba hizarana ny loharanon-karena CPU. Amin'ny tranga misy antsika dia mahazo ny vondrona roa voalohany 680 tena anjara (16,6% amin'ny 4096), ary ny kubepod dia mahazo ny ambiny 2736 nizara Raha sendra misy ny fotoana fitsaharana, ny vondrona roa voalohany dia tsy hampiasa ny loharano natokana.

Soa ihany fa manana rafitra ny mpandrindra mba hisorohana ny fandaniam-bola tsy ampiasaina amin'ny CPU. Mamindra ny fahafahan'ny "tsy miasa" mankany amin'ny dobo eran-tany izy io, izay zaraina amin'ireo vondrona mila hery fanampiny amin'ny processeur (mizarazara ny famindrana mba hisorohana ny fahaverezan'ny fihodinana). Ny fomba mitovy amin'izany dia ampiharina amin'ny taranaky ny taranaka rehetra.

Ity mekanika ity dia miantoka ny fitsinjarana ara-drariny ny herin'ny processeur ary miantoka fa tsy misy "mangalatra" loharanon-karena amin'ny hafa.

CPU fetra

Na dia eo aza ny hoe mitovitovy ny fanefena ny fetra sy ny fangatahana ao amin'ny K8, dia hafa tanteraka ny fampiharana azy: ity mamitaka indrindra ary ny ampahany kely indrindra voarakitra.

K8s ny CFS quota mechanism hampihatra fetra. Voafaritra ao anaty rakitra ny firafiny cfs_period_us ΠΈ cfs_quota_us ao amin'ny lahatahiry cgroup (misy koa ny rakitra cpu.share).

Tsy toy ny cpu.share, mifototra amin'ny fe-potoana, ary tsy amin'ny herin'ny processeur misy. cfs_period_us mamaritra ny faharetan'ny vanim-potoana (epoch) - 100000 ΞΌs (100 ms) foana. Misy safidy hanovana io sanda io amin'ny K8s, saingy amin'ny alpha ihany no misy azy amin'izao fotoana izao. Ny mpandrindra dia mampiasa ny vanim-potoana hanombohana indray ny quota efa nampiasaina. rakitra faharoa cfs_quota_us, mamaritra ny fotoana misy (quota) isaky ny vanim-potoana. Mariho fa voatondro ao anatin'ny microseconds ihany koa izy io. Mety hihoatra ny halavan'ny vanim-potoana ny quota; amin'ny teny hafa dia mety ho mihoatra ny 100 ms.

Andeha hojerentsika ny toe-javatra roa amin'ny milina 16-core (karazana solosaina mahazatra indrindra ananantsika ao amin'ny Omio):

Ny fetran'ny CPU sy ny fanerena mahery vaika ao amin'ny Kubernetes
Scenario 1: kofehy 2 ary fetra 200 ms. Tsy misy throttling

Ny fetran'ny CPU sy ny fanerena mahery vaika ao amin'ny Kubernetes
Scenario 2: kofehy 10 ary fetra 200ms. Manomboka aorian'ny 20 ms ny throttling, averina indray ny fidirana amin'ny loharanon'ny processeur rehefa afaka 80 ms hafa

Andao atao hoe nametraka ny fetran'ny CPU ianao 2 voany; Handika izany sanda izany ho 200 ms ny Kubernetes. Midika izany fa ny kaontenera dia afaka mampiasa 200ms ambony indrindra amin'ny fotoana CPU tsy misy throttling.

Ary eto no manomboka ny fahafinaretana. Araka ny voalaza etsy ambony dia 200 ms ny quota misy. Raha miasa parallèle ianao folo kofehy amin'ny milina 12-core (jereo fanoharana ho an'ny scenario 2), raha tsy miasa ny pods hafa rehetra, dia ho lany ao anatin'ny 20 ms fotsiny ny fetra (hatramin'ny 10 * 20 ms = 200 ms), ary hihantona ny kofehy rehetra amin'ity pod ity. » (throttle) ho an'ny 80ms manaraka. Ny efa voalaza bug scheduler, izay mahatonga ny fihenjanana be loatra ary tsy mahafeno ny quota efa misy akory ny container.

Ahoana ny fomba hanombanana ny throttling amin'ny pods?

Midira fotsiny amin'ny pod ary manatanteraka cat /sys/fs/cgroup/cpu/cpu.stat.

  • nr_periods - ny fitambaran'ny vanim-potoanan'ny fandaharam-potoana;
  • nr_throttled - ny isan'ny vanim-potoana throttled ao amin'ny composition nr_periods;
  • throttled_time - fotoana mitambatra ao anatin'ny nanosegondra.

Ny fetran'ny CPU sy ny fanerena mahery vaika ao amin'ny Kubernetes

Inona marina no mitranga?

Vokatr'izany dia mahazo throttling avo lenta isika amin'ny fampiharana rehetra. Indraindray izy dia ao indray mandeha sy tapany mahery noho ny kajy!

Miteraka lesoka isan-karazany izany - tsy fahombiazana amin'ny fanaraha-maso ny fahavononana, mivaingana ny kaontenera, fahatapahan'ny fifandraisana amin'ny tambazotra, fiatoana amin'ny antso an-tariby. Izany amin'ny farany dia miteraka fahatarana sy taham-pahadisoana ambony kokoa.

Fanapahan-kevitra sy ny vokany

Tsotra ny zava-drehetra eto. Nandao ny fetran'ny CPU izahay ary nanomboka nanavao ny kernel OS amin'ny kluster mankany amin'ny dikan-teny farany indrindra, izay nanamboarana ny bug. Nihena avy hatrany ny isan'ny lesoka (HTTP 5xx) amin'ny serivisinay:

Error HTTP 5xx

Ny fetran'ny CPU sy ny fanerena mahery vaika ao amin'ny Kubernetes
Ny hadisoana HTTP 5xx ho an'ny serivisy mitsikera iray

Fotoana mamaly p95

Ny fetran'ny CPU sy ny fanerena mahery vaika ao amin'ny Kubernetes
Faharetan'ny fangatahan'ny serivisy, faha-95 isan-jato

Vidin'ny asa

Ny fetran'ny CPU sy ny fanerena mahery vaika ao amin'ny Kubernetes
Isan'ny ora lany

Inona no trondro?

Araka ny voalaza tany am-piandohan'ny lahatsoratra:

Ny fanoharana dia azo atao amin'ny trano fonenan'ny vondrom-piarahamonina... Kubernetes dia miasa toy ny mpivarotra trano. Ahoana anefa no hiarovana ny mpanofa amin'ny fifandirana? Ahoana raha manapa-kevitra ny hindrana trano fandroana mandritra ny antsasak'andro ny iray amin'izy ireo?

Ity ny azo. Ny kaontenera iray tsy mitandrina dia afaka mandany ny loharanon-karena CPU rehetra misy amin'ny milina iray. Raha manana stack fampiharana marani-tsaina ianao (ohatra, JVM, Go, Node VM dia voalamina tsara), dia tsy olana izany: afaka miasa amin'ny toe-javatra toy izany ianao mandritra ny fotoana maharitra. Fa raha ny fampiharana dia tsy tsara optimized na tsy optimized mihitsy (FROM java:latest), mety tsy ho voafehy intsony ny toe-draharaha. Ao amin'ny Omio dia manana Dockerfiles automatique izahay miaraka amin'ny filaharana default ho an'ny stack fiteny lehibe, ka tsy nisy io olana io.

Manoro hevitra izahay hanara-maso ny metrika AMPIASAO (fampiasana, saturation ary lesoka), fahatarana ny API ary tahan'ny fahadisoana. Ataovy azo antoka fa mifanaraka amin'ny antenaina ny vokatra.

soratra masina

Ity ny tantarantsika. Ireto fitaovana manaraka ireto dia tena nanampy tamin'ny fahatakarana ny zava-nitranga:

Tatitra momba ny bug Kubernetes:

Efa sendra olana mitovitovy amin'izany ve ianao tamin'ny fanaonao na manana traikefa mifandraika amin'ny famehezana ao amin'ny tontolon'ny famokarana container? Zarao amin'ny fanehoan-kevitra ny tantaranao!

PS avy amin'ny mpandika teny

Vakio ihany koa ao amin'ny bilaoginay:

Source: www.habr.com

Add a comment