Xadka CPU iyo ceejinta gardarada ah ee Kubernetes

Ogow. turjumi: Taariikhdan indho-furka ah ee Omio-ururiyaha socdaalka Yurub-waxay ka qaadataa akhristayaasha aragtida aasaasiga ah si ay u soo jiidato wax ku oolnimada wax ku oolka ah ee qaabeynta Kubernetes. Aqoonta kiisaska noocan oo kale ah waxay kaa caawinaysaa ma aha oo kaliya ballaarinta aragtidaada, laakiin sidoo kale waxay ka hortagtaa dhibaatooyin aan fududayn.

Xadka CPU iyo ceejinta gardarada ah ee Kubernetes

Weligaa ma heshay codsi ku xayiran, jooji ka jawaabista hubinta caafimaadka, oo aadan awoodin inaad ogaato sababta? Mid ka mid ah sharraxaadda suurtagalka ah ayaa la xiriirta xadka kootada kheyraadka CPU. Tani waa waxa aan kaga hadli doono maqaalkan.

TL, DR:
Waxaan si adag ugu talinaynaa in la joojiyo xaddidaadda CPU ee Kubernetes (ama curyaaminta kootada CFS ee Kubelet) haddii aad isticmaalayso nooc Linux kernel ah oo leh bug kootada CFS. In xudunta u ah waa la heli karaa halis ah iyo si fiican loo yaqaan cayayaanka u horseeda cuncun iyo dib u dhac xad dhaaf ah
.

In Omio Kaabayaasha dhaqaalaha oo dhan waxaa maamula Kubernetes. Dhammaan culaysyadayada shaqo ee dawlad la'aanta ah waxay si gaar ah ugu shaqeeyaan Kubernetes (waxaan isticmaalnaa Google Kubernetes Engine). Lixdii bilood ee la soo dhaafay, waxaan bilownay inaan aragno gaabis aan kala sooc lahayn. Codsiyada waxay joojiyaan ama joojiyaan ka jawaabista hubinta caafimaadka, lumiyaan xidhiidhka shabakada, iwm. Dhaqankan ayaa nagu wareeriyay muddo dheer, ugu dambeyntiina waxaan go'aansanay inaan dhibaatada si dhab ah u qaadanno.

Soo koobida maqaalka:

  • Dhowr eray oo ku saabsan weelasha iyo Kubernetes;
  • Sida codsiyada CPU iyo xaddidaadaha loo fuliyo;
  • Sida xaddidaadda CPU ay uga shaqeyso deegaanno badan oo xudun u ah;
  • Sida loola socdo kala-baxa CPU;
  • Xalka dhibaatada iyo nuances.

Dhowr eray oo ku saabsan weelasha iyo Kubernetes

Kubernetes asal ahaan waa heerka casriga ah ee adduunka kaabayaasha. Shaqadeeda ugu weyni waa habaynta weelka.

Konteenarada

Waagii hore, waxay ahayd inaan abuurno farshaxan sida Java JARs/WARs, Python Eggs, ama kuwa la fulin karo si loogu shaqeeyo server-yada. Si kastaba ha ahaatee, si ay u shaqeeyaan, shaqo dheeraad ah waa in la sameeyaa: rakibidda jawi runtime (Java/Python), dhigista faylasha lagama maarmaanka ah meelaha saxda ah, hubinta in la jaan qaada nooca gaarka ah ee nidaamka qalliinka, iwm. Si kale haddii loo dhigo, fiiro gaar ah ayaa loo lahaa maaraynta qaabeynta (taas oo inta badan ahayd isha muranka u dhexeeya horumariyeyaasha iyo maamulayaasha nidaamka).

Konteenarada ayaa wax walba bedelay. Hadda farshaxanku waa sawir weel. Waxaa loo soo bandhigi karaa nooc ka mid ah faylka la dheereeyey ee la fulin karo oo aan ku koobnayn barnaamijka oo keliya, laakiin sidoo kale jawi fulin buuxda ah (Java/Python /...), iyo sidoo kale faylasha / baakadaha lagama maarmaanka ah, horay loo rakibay oo diyaar u ah orod Konteenarada waa la geyn karaa oo lagu maamuli karaa servero kala duwan iyada oo aan la qaadin tallaabooyin dheeraad ah.

Intaa waxaa dheer, weelku waxay ku shaqeeyaan jawigooda sandbox. Waxay leeyihiin adabtarada shabakad dalwaddii u gaar ah, nidaamka file iyaga u gaar ah oo ay helaan xaddidan, kala sareynta u gaar ah ee hababka, xadayn iyaga u gaar ah oo ku saabsan CPU iyo xusuusta, iwm All this waxaa la fuliyay mahad subsystem gaar ah ee Kernel Linux - namespaces.

Kubureteska

Sida hore loo sheegay, Kubernetes waa orchesteriyaha weelka. Waxay u shaqeysaa sidatan: waxaad siisaa barkad mashiinno ah, ka dibna waxaad tidhaahdaa: "Hey, Kubernetes, aan bilowno toban tusaale oo weelkeyga ah oo leh 2 processor iyo 3 GB oo xusuusta midkiiba, oo sii wad inay socdaan!" Kubernetes ayaa daryeeli doona inta soo hartay. Waxay heli doontaa awood bilaash ah, waxay soo saari doontaa weelasha oo dib u bilaabi doontaa haddii loo baahdo, soo rogi doonta cusbooneysiinta marka ay beddeleyso noocyada, iwm. Asal ahaan, Kubernetes wuxuu kuu oggolaanayaa inaad ka fogaato qaybta qalabka waxayna ka dhigaysaa habab kala duwan oo kala duwan oo ku habboon geynta iyo socodsiinta codsiyada.

Xadka CPU iyo ceejinta gardarada ah ee Kubernetes
Kubernetes oo ka soo jeeda aragtida caadiga ah

Waa maxay codsiyada iyo xadka Kubernetes

Hagaag, waxaanu daboolnay weelasha iyo Kubernetes. Waxaan sidoo kale ognahay in weelasha badan ay ku dul noolaan karaan hal mashiin.

Waxaa lagu sawiri karaa aqal la wadaago. Dhisme ballaadhan (mashiinno/cutubyo) ayaa la qaaday oo laga kireeyay dhawr kirayste (koonteenar). Kubernetes wuxuu u shaqeeyaa sida dhabta ah. Su'aashu waxay soo baxaysaa, sidee looga ilaalin karaa kiraystayaasha khilaaf dhexdooda ah? Maxaa dhacaya haddii midkood, yiraahdo, go'aansado inuu amaahdo musqusha maalin nuskeed?

Tani waa halka codsiyada iyo xadku ay ka ciyaaraan. processor Codsiga loo baahan yahay oo keliya ujeeddooyin qorsheyn. Tani waa wax la mid ah "liiska rabitaanka" ee weelka, waxaana loo isticmaalaa in lagu doorto noodhka ugu habboon. Isla markaana CPU-da Yaree waxaa lala barbar dhigi karaa heshiis kiro - isla marka aan doorano unug weelka, the ma awoodo ka gudub xadka la sameeyay. Waana halka ay dhibaatadu ka dhalato...

Sida codsiyada iyo xaddidaadaha looga fuliyo Kubernetes

Kubernetes waxa ay isticmaashaa habka xoqista (ka boodka wareegyada saacadaha) oo lagu dhex dhisay kernel si loo hirgeliyo xadka CPU. Haddii codsigu dhaafo xadka, ceejinta waa la daalacayaa (tusaale ahaan, waxay helaysaa wareegyo CPU oo yar). Codsiyada iyo xadka xusuusta ayaa loo habeeyey si kala duwan, si ay u sahlanaato in la ogaado. Si tan loo sameeyo, kaliya hubi heerka dib u bilaabashada ugu dambeeya ee boodhka: haddii ay tahay "OOMKilled". Ceejinta CPU ma ahan mid fudud, maadaama K8s kaliya ay sameyso cabbirada lagu heli karo isticmaalka, ma aha kooxo.

Codsiga CPU

Xadka CPU iyo ceejinta gardarada ah ee Kubernetes
Sida codsiga CPU loo fuliyo

Si ay u fududaato, aynu eegno habka isticmaalka mishiinka leh 4-core CPU tusaale ahaan.

K8s waxay isticmaashaa habka kooxda xakamaynta (kooxaha) si ay u xakameeyaan qoondaynta agabka (xusuusta iyo processor-ka). Habka kala sareynta ayaa diyaar u ah: ilmuhu wuxuu dhaxlaa xadka kooxda waalidka. Faahfaahinta qaybinta waxaa lagu kaydiyaa nidaamka faylka casriga ah (/sys/fs/cgroup). Xaaladda processor-ka tani waa /sys/fs/cgroup/cpu,cpuacct/*.

K8s waxay isticmaashaa faylka cpu.share si loo qoondeeyo agabka processor-ka. Xaaladeena, kooxda xididku waxay helayaan 4096 saamiyada CPU - 100% awoodda processor-ka ee jira (1 core = 1024; tani waa qiimo go'an). Kooxda xididku waxay u qaybiyaan agabka si saami ah iyadoo ku xidhan saamiga faraca ka diiwaan gashan cpu.share, iyaguna, iyaguna sidaas oo kale ayay ku sameeyaan farcankooda, iwm. Dhinaca noodhka caadiga ah ee Kubernetes, kooxda xididku waxay leedahay saddex carruur ah: system.slice, user.slice ΠΈ kubepods. Labada kooxood ee ugu horreeya waxa loo isticmaalaa in lagu qaybiyo agabka inta u dhaxaysa culaysyada nidaamka muhiimka ah iyo barnaamijyada isticmaalayaasha ee ka baxsan K8s. Midka ugu dambeeya - kubepods - waxaa abuuray Kubernetes si ay ugu qaybiyaan agabka dhexda pods

Jaantuska kore wuxuu muujinayaa in koox-hoosaadka koowaad iyo labaad ay heleen mid kasta 1024 saamiyo, iyadoo koox-hoosaadka kuberpod loo qoondeeyay 4096 saamiyo Sidee tani suurtogal u tahay: ka dib oo dhan, kooxda xididku waxay heli karaan oo keliya 4096 saamiga, iyo wadarta saamiga faraceeda si aad ah uga badan tiradan (6144) Xaqiiqdu waxay tahay in qiimuhu uu macno macquul ah sameeyo, sidaa darteed jadwalka Linux (CFS) wuxuu u isticmaalaa si loo qoondeeyo kheyraadka CPU. Xaaladeena, labada kooxood ee ugu horreeya waxay helayaan 680 saamiyada dhabta ah (16,6% ee 4096), iyo kubepod waxay helaysaa inta soo hadhay 2736 saamiyo Haddii ay dhacdo in wakhtigu hoos u dhaco, labada kooxood ee hore ma isticmaali doonaan agabka loo qoondeeyey.

Nasiib wanaag, jadwalku wuxuu leeyahay habab uu kaga fogaado in la lumiyo agabka CPU ee aan la isticmaalin. Waxay u wareejinaysaa awoodda "shaqo la'aanta" barkad caalami ah, kaas oo loo qaybiyo kooxaha u baahan awoodda processor-ka dheeraadka ah (wareejinta waxay ku dhacdaa kooxo si looga fogaado khasaaraha soo noqnoqda). Habka la midka ah ayaa lagu dabaqaa dhammaan faraca faraca.

Habkani wuxuu xaqiijinayaa qaybinta caddaaladda ah ee awoodda processor-ka waxayna hubisaa in qofna uusan ka shaqeynin "xatooyo" kheyraadka dadka kale.

Xadka CPU

In kasta oo xaqiiqda ah in qaabaynta xuduudaha iyo codsiyada K8s ay isku mid yihiin, fulintoodu aad bay uga duwan tahay: tani marin habaabin badan iyo qaybta ugu yar ee dukumeentiga ah.

K8s ayaa ku hawlan Habka kootada CFS si loo fuliyo xad. Dejinta waxay ku qeexan yihiin faylasha cfs_period_us ΠΈ cfs_quota_us ku jira hagaha kooxda (faylka sidoo kale halkaas ayuu ku yaal cpu.share).

Si ka duwan cpu.share, kootada ayaa ku salaysan muddada waqtiga, oo aan ku jirin awoodda processor-ka la heli karo. cfs_period_us Waxay qeexaysaa muddada muddada (epoch) - had iyo jeer waa 100000 ΞΌs (100 ms). Waxaa jira ikhtiyaar lagu beddeli karo qiimahan K8s, laakiin hadda waxaa lagu heli karaa alfa oo keliya. Jadwaliyehu waxa uu isticmaalaa waagii si uu dib ugu bilaabo kootada la isticmaalay. Faylka labaad cfs_quota_us, waxay qeexaysaa wakhtiga la heli karo (kootada) xilli kasta. Ogsoonow in ay sidoo kale ku qeexan tahay micro seconds. Kootada waxaa laga yaabaa inay dhaafto dhererka xilliga; Si kale haddii loo dhigo, waxay noqon kartaa in ka badan 100 ms.

Aynu eegno laba xaaladood oo ku saabsan mishiinada 16-core (nooca ugu badan ee kumbuyuutarka ee aan ku hayno Omio):

Xadka CPU iyo ceejinta gardarada ah ee Kubernetes
Muuqaalka 1: 2 dun iyo xadka 200 ms. Ceejin la'aan

Xadka CPU iyo ceejinta gardarada ah ee Kubernetes
Dhacdada 2: 10 dunta iyo xadka 200 ms. Ceejintu waxay bilaabataa 20 ms ka dib, gelitaanka ilaha processor-ka ayaa dib loo bilaabayaa ka dib 80 ms kale

Aynu nidhaahno waxaad dejisay xadka CPU 2 kernels; Kubernetes waxay u tarjumi doontaa qiimahan 200 ms. Tani waxay ka dhigan tahay in weelku uu isticmaali karo ugu badnaan 200ms ee waqtiga CPU iyada oo aan la xoqin.

Waana halka madadaalada ay ka bilaabato. Sida kor ku xusan, kootada la heli karo waa 200 ms. Haddi aad si isbar-bar socda u shaqaynayso toban dunta mishiinka 12-core ah (fiiri sawirka muuqaalka 2), halka dhammaan galalka kale ay yihiin kuwo aan shaqayn, kootada waxay ku dhammaan doontaa 20 ms oo keliya (ilaa 10 * 20 ms = 200 ms), iyo dhammaan dunta gafkaan ayaa soo laadlaadi doona Β» (ceejinta) 80ka ms ee soo socda. Horaa loo sheegay bug jadwaleeyaha, taas oo ay ugu wacan tahay ceejinta xad-dhaafka ah ee ku dhacda oo weelku uusan xitaa buuxin karin kootada jirta.

Sidee loo qiimeeyaa ceejinta kubadaha?

Keliya gal kabka oo fuliya cat /sys/fs/cgroup/cpu/cpu.stat.

  • nr_periods - wadarta guud ee xilliyada jadwalaha;
  • nr_throttled - tirada xilliyada ceejinta ee halabuurka nr_periods;
  • throttled_time - wakhtiga isku-darka ah ee nanoseconds.

Xadka CPU iyo ceejinta gardarada ah ee Kubernetes

Maxaa dhacaya runtii?

Natiijo ahaan, waxaan helnaa qulqulo sare dhammaan codsiyada. Mararka qaarkood wuu ku jiraa hal jeer iyo badh ka xoog badan xisaabinta!

Tani waxay keenaysaa khaladaad kala duwan - hubinta u diyaargarowga guuldarada, weel fadhiista, goynta isku xirka shabakada, wakhti go'an gudaha wicitaanada adeegga. Tani waxay ugu dambeyntii keentaa daahitaanka korodhka iyo heerarka khaladaadka sare.

Go'aan iyo cawaaqib

Wax walba waa sahlan yihiin halkan. Waxaan ka tagnay xadkii CPU oo aan bilownay in aan cusboonaysiinno kernel-ka OS-ga ee rucubyada ilaa noocii u dambeeyay, kaas oo bug lagu hagaajiyay. Tirada khaladaadka (HTTP 5xx) ee adeegyadayada ayaa isla markiiba si weyn hoos ugu dhacay:

Khaladaadka HTTP 5xx

Xadka CPU iyo ceejinta gardarada ah ee Kubernetes
Khaladaadka HTTP 5xx ee hal adeeg oo muhiim ah

Waqtiga jawaabta p95

Xadka CPU iyo ceejinta gardarada ah ee Kubernetes
Daahitaanka codsiga adeegga muhiimka ah, boqolkiiba 95

Qiimaha hawlgalka

Xadka CPU iyo ceejinta gardarada ah ee Kubernetes
Tirada saacadaha tusaale ahaan la qaatay

Waa maxay qabashadu?

Sida lagu sheegay bilowga maqaalka:

Wax la mid ah waxaa lagu sawiri karaa guri la wadaago... Kubernetes wuxuu u dhaqmaa sidii hantiile. Laakin sidee looga ilaalin karaa kireystayaasha inay isku dhacaan midba midka kale? Maxaa dhacaya haddii midkood, yiraahdo, go'aansado inuu amaahdo musqusha maalin nuskeed?

Waa kan qabsashada Hal weel oo aan taxaddar lahayn ayaa cuni kara dhammaan agabyada CPU ee yaalla mishiinka. Haddii aad haysato xirmo codsi ah oo caqli-gal ah (tusaale ahaan, JVM, Go, Node VM si habboon ayaa loo habeeyey), markaa tani maahan dhibaato: waxaad ku shaqeyn kartaa xaaladahan oo kale muddo dheer. Laakiin haddii codsiyada si liidata loo hagaajiyo ama aan la hagaajin gabi ahaanba (FROM java:latest), waxa laga yaabaa in xaaladdu faraha ka baxdo. Omio waxaan ku leenahay Dockerfiles saldhig oo otomaatig ah oo leh jaangooyo ku filan oo ku filan xirmada luqadda weyn, markaa arrintani ma ay jirin.

Waxaan kugula talineynaa la socoshada cabbirada ISTICMAALKA (isticmaalka, saturation iyo khaladaadka), dib u dhaca API iyo heerka khaladaadka. Hubi in natiijadu ay ka soo baxdo filashooyinka.

tixraacyada

Tani waa sheekadeenii. Qalabka soo socda ayaa si weyn u caawiyay in la fahmo waxa dhacaya:

Kubernetes bug ayaa ka warbixiyay:

Ma la kulantay dhibaatooyin la mid ah shaqadaada ama ma leedahay khibrad la xiriirta cuncunka meelaha wax-soo-saarka weelaysan? La wadaag sheekadaada faallooyinka!

PS ka turjumaan

Sidoo kale ka akhri boggayaga:

Source: www.habr.com

Add a comment