Katram Kubernetes resursam varat konfigurÄt divu veidu prasÄ«bas ā pieprasÄ«jumus un ierobežojumus. PirmajÄ ir aprakstÄ«tas minimÄlÄs prasÄ«bas brÄ«vo mezglu resursu pieejamÄ«bai, kas nepiecieÅ”ami konteinera vai podziÅas palaiÅ”anai, otrajÄ ir stingri ierobežoti konteineram pieejamie resursi.
Kad Kubernetes plÄno podiÅus, ir ļoti svarÄ«gi, lai konteineriem bÅ«tu pietiekami daudz resursu, lai tie darbotos pareizi. Ja plÄnojat izvietot lielu lietojumprogrammu mezglÄ, kurÄ ir ierobežoti resursi, iespÄjams, ka tÄ nedarbosies, jo mezglam ir maz atmiÅas vai CPU jauda. Å ajÄ rakstÄ mÄs apskatÄ«sim, kÄ jÅ«s varat atrisinÄt skaitļoÅ”anas jaudas trÅ«kumu, izmantojot resursu pieprasÄ«jumus un ierobežojumus.
PieprasÄ«jumi un ierobežojumi ir mehÄnismi, ko Kubernetes izmanto, lai pÄrvaldÄ«tu tÄdus resursus kÄ CPU un atmiÅa. PieprasÄ«jumi nodroÅ”ina, ka konteiners saÅem pieprasÄ«to resursu. Ja konteiners pieprasa resursu, Kubernetes to ieplÄnos tikai mezglÄ, kas to var nodroÅ”inÄt. Ierobežo kontroli, ka konteinera pieprasÄ«tie resursi nekad nepÄrsniegs noteiktu vÄrtÄ«bu.
Konteiners var palielinÄt savu skaitļoÅ”anas jaudu tikai lÄ«dz noteiktai robežai, pÄc kuras tÄ tiks ierobežota. ApskatÄ«sim, kÄ tas darbojas. TÄtad ir divu veidu resursi - procesors un atmiÅa. Kubernetes plÄnotÄjs izmanto datus par Å”iem resursiem, lai noskaidrotu, kur palaist savus aplikumus. Tipiska resursa specifikÄcija podam izskatÄs Å”Ädi.
Katrs podÄ esoÅ”ais konteiners var iestatÄ«t savus vaicÄjumus un ierobežojumus, tas viss ir aditÄ«vs. Procesora resursi ir definÄti milicores. Ja konteinera darbÄ«bai ir nepiecieÅ”ami divi pilni serdeÅi, iestatiet vÄrtÄ«bu uz 2000 m. Ja konteineram nepiecieÅ”ama tikai 1/4 kodola jauda, āāvÄrtÄ«ba bÅ«s 250 m. Å
emiet vÄrÄ: ja pieŔķirat CPU resursa vÄrtÄ«bu, kas ir lielÄka par lielÄkÄ mezgla kodolu skaitu, jÅ«su podziÅa vispÄr netiks ieplÄnota. LÄ«dzÄ«ga situÄcija notiks, ja jums ir Pod, kuram nepiecieÅ”ami Äetri kodoli, un Kubernetes klasteris sastÄv tikai no divÄm galvenajÄm virtuÄlajÄm maŔīnÄm.
Ja vien jÅ«su lietojumprogramma nav Ä«paÅ”i izstrÄdÄta, lai izmantotu vairÄku kodolu sniegtÄs priekÅ”rocÄ«bas (jÅ«su prÄtÄ nÄk tÄdas programmas kÄ sarežģītas zinÄtniskas skaitļoÅ”anas un datu bÄzes darbÄ«bas), vislabÄkÄ prakse ir iestatÄ«t CPU pieprasÄ«jumu vÄrtÄ«bu uz 1 vai mazÄku un pÄc tam palaist vairÄk reprodukciju, lai nodroÅ”inÄtu mÄrogojamÄ«bu. Å is risinÄjums nodroÅ”inÄs sistÄmai lielÄku elastÄ«bu un uzticamÄ«bu.
RunÄjot par CPU ierobežojumiem, lietas kļūst interesantÄkas, jo tas tiek uzskatÄ«ts par saspiežamu resursu. Ja jÅ«su lietojumprogramma sÄk tuvoties procesora jaudas ierobežojumam, Kubernetes sÄks palÄninÄt jÅ«su konteinera darbÄ«bu, izmantojot CPU droseles, samazinot procesora frekvenci. Tas nozÄ«mÄ, ka centrÄlais procesors tiks mÄkslÄ«gi nobloÄ·Äts, radot lietojumprogrammai potenciÄli sliktÄku veiktspÄju, taÄu process netiks pÄrtraukts vai izÅemts.
AtmiÅas resursi ir definÄti baitos. Parasti vÄrtÄ«ba iestatÄ«jumos tiek mÄrÄ«ta mebibaitos Mib, taÄu jÅ«s varat iestatÄ«t jebkuru vÄrtÄ«bu, sÄkot no baitiem lÄ«dz petabaitiem. Å eit ir tÄ pati situÄcija, kas attiecas uz centrÄlo procesoru ā ja izvietojat pieprasÄ«jumu pÄc atmiÅas apjoma, kas ir lielÄks par jÅ«su mezglu atmiÅas apjomu, Ŕī podziÅa izpilde netiks ieplÄnota. Bet atŔķirÄ«bÄ no CPU resursiem atmiÅa netiek saspiesta, jo nav iespÄjas ierobežot tÄs izmantoÅ”anu. TÄpÄc konteinera izpilde tiks apturÄta, tiklÄ«dz tÄ pÄrsniegs tam pieŔķirto atmiÅu.
Ir svarÄ«gi atcerÄties, ka nevarat konfigurÄt pieprasÄ«jumus, kas pÄrsniedz resursus, ko var nodroÅ”inÄt jÅ«su mezgli. KopÄ«goto resursu specifikÄcijas GKE virtuÄlajÄm maŔīnÄm var atrast saitÄs zem Ŕī videoklipa.
IdeÄlÄ pasaulÄ konteinera noklusÄjuma iestatÄ«jumi bÅ«tu pietiekami, lai darbplÅ«smas darbotos nevainojami. TaÄu reÄlÄ pasaule nav tÄda, cilvÄki var viegli aizmirst konfigurÄt resursu izmantoÅ”anu, vai arÄ« hakeri uzstÄdÄ«s pieprasÄ«jumus un ierobežojumus, kas pÄrsniedz infrastruktÅ«ras reÄlÄs iespÄjas. Lai novÄrstu Å”Ädu scenÄriju raÅ”anos, varat konfigurÄt ResourceQuota un LimitRange resursu kvotas.
Kad nosaukumvieta ir izveidota, to var bloÄ·Ät, izmantojot kvotas. PiemÄram, ja jums ir prod un dev nosaukumvietas, tad vispÄr nav ražoÅ”anas kvotu un ļoti stingras izstrÄdes kvotas. Tas ļauj prod straujas satiksmes pieauguma gadÄ«jumÄ pÄrÅemt visu pieejamo resursu, pilnÄ«bÄ bloÄ·Äjot izstrÄdÄtÄju.
Resursu kvota varÄtu izskatÄ«ties Å”Ädi. Å ajÄ piemÄrÄ ir 4 sadaļas - tÄs ir 4 koda apakÅ”ÄjÄs rindas.
ApskatÄ«sim katru no tiem. Requests.cpu ir maksimÄlais kombinÄto CPU pieprasÄ«jumu skaits, kas var nÄkt no visiem nosaukumvietas konteineriem. Å ajÄ piemÄrÄ jums varÄtu bÅ«t 50 konteineri ar 10 m pieprasÄ«jumiem, pieci konteineri ar 100 m pieprasÄ«jumiem vai tikai viens konteiners ar 500 m pieprasÄ«jumiem. KamÄr kopÄjais pieprasÄ«jumu.cpu skaits konkrÄtajÄ nosaukumvietÄ ir mazÄks par 500 m, viss bÅ«s kÄrtÄ«bÄ.
AtmiÅai pieprasÄ«tie pieprasÄ«jumi.atmiÅa ir maksimÄlais kombinÄto atmiÅas pieprasÄ«jumu skaits, kas var bÅ«t visiem nosaukumvietas konteineriem. TÄpat kÄ iepriekÅ”ÄjÄ gadÄ«jumÄ, jums var bÅ«t 50 2 mib konteineri, pieci 20 mib konteineri vai viens 100 mib konteiners, ja kopÄjais nosaukumvietÄ pieprasÄ«tÄs atmiÅas apjoms ir mazÄks par 100 mib.
Limits.cpu ir maksimÄlais apvienotais CPU jaudas daudzums, ko var izmantot visi nosaukumvietas konteineri. MÄs varam uzskatÄ«t, ka tas ir procesora jaudas pieprasÄ«jumu ierobežojums.
Visbeidzot limits.memory ir maksimÄlais koplietotÄs atmiÅas apjoms, ko var izmantot visi nosaukumvietas konteineri. Å is ir kopÄjais atmiÅas pieprasÄ«jumu ierobežojums.
TÄtad pÄc noklusÄjuma konteineri Kubernetes klasterÄ« darbojas ar neierobežotiem skaitļoÅ”anas resursiem. Izmantojot resursu kvotas, klasteru administratori var ierobežot resursu patÄriÅu un resursu izveidi, pamatojoties uz nosaukumvietu. NosaukumvietÄ pods vai konteiners var patÄrÄt tik daudz CPU jaudas un atmiÅas, ko nosaka nosaukumvietas resursu kvota. TomÄr pastÄv bažas, ka viens pods vai konteiners var monopolizÄt visus pieejamos resursus. Lai novÄrstu Å”o situÄciju, tiek izmantots ierobežojuma diapazons - politika resursu pieŔķirÅ”anas ierobežoÅ”anai (podiem vai konteineriem) nosaukumvietÄ.
Ierobežojumu diapazons nodroŔina ierobežojumus, kas var:
- NodroÅ”inÄt minimÄlo un maksimÄlo skaitļoÅ”anas resursu izmantoÅ”anu katram modulim vai konteineram nosaukumu telpÄ;
- ieviest minimÄlo un maksimÄlo Starage Request krÄtuves pieprasÄ«jumus katram PersistentVolumeClaim nosaukumvietÄ;
- ieviest attiecÄ«bas starp PieprasÄ«jumu un Limit resursam nosaukumvietÄ;
- iestatiet noklusÄjuma pieprasÄ«jumus/ierobežojumus skaitļoÅ”anas resursiem nosaukumvietÄ un automÄtiski ievadiet tos konteineros izpildlaikÄ.
TÄdÄ veidÄ jÅ«s varat izveidot ierobežojumu diapazonu savÄ nosaukumvietÄ. AtŔķirÄ«bÄ no kvotas, kas attiecas uz visu nosaukumvietu, ierobežojuma diapazons tiek izmantots atseviŔķiem konteineriem. Tas var neļaut lietotÄjiem izveidot ļoti mazus vai, gluži pretÄji, milzÄ«gus konteinerus nosaukumvietÄ. Ierobežojumu diapazons varÄtu izskatÄ«ties Å”Ädi.
TÄpat kÄ iepriekÅ”ÄjÄ gadÄ«jumÄ, Å”eit var izdalÄ«t 4 sadaļas. ApskatÄ«sim katru.
NoklusÄjuma sadaÄ¼Ä tiek iestatÄ«ti noklusÄjuma ierobežojumi podÄ esoÅ”ajam konteineram. Ja Ŕīs vÄrtÄ«bas iestatÄt galÄjÄ diapazonÄ, visi konteineri, kuriem Ŕīs vÄrtÄ«bas nav skaidri iestatÄ«tas, izmantos noklusÄjuma vÄrtÄ«bas.
NoklusÄjuma pieprasÄ«juma sadaļa defaultRequest konfigurÄ noklusÄjuma pieprasÄ«jumus konteineram podÄ. Atkal, ja iestatÄt Ŕīs vÄrtÄ«bas uz galÄjo diapazonu, visiem konteineriem, kas Ŕīs opcijas nav skaidri iestatÄ«tas, pÄc noklusÄjuma tiks izmantotas Ŕīs vÄrtÄ«bas.
Maks. sadaÄ¼Ä ir norÄdÄ«ti maksimÄlie ierobežojumi, ko var iestatÄ«t podÄ esoÅ”ajam konteineram. NoklusÄjuma sadaļas vÄrtÄ«bas un konteineru ierobežojumus nevar iestatÄ«t virs Ŕī ierobežojuma. Ir svarÄ«gi atzÄ«mÄt, ka, ja vÄrtÄ«ba ir iestatÄ«ta uz max un nav noklusÄjuma sadaļas, maksimÄlÄ vÄrtÄ«ba kļūst par noklusÄjuma vÄrtÄ«bu.
MinimÄlajÄ sadaÄ¼Ä ir norÄdÄ«ti minimÄlie pieprasÄ«jumi, ko var iestatÄ«t podÄ esoÅ”ajam konteineram. TomÄr vÄrtÄ«bas noklusÄjuma sadaÄ¼Ä un konteinera vaicÄjumos nevar iestatÄ«t zem Ŕī ierobežojuma.
Atkal ir svarÄ«gi atzÄ«mÄt, ka, ja Ŕī vÄrtÄ«ba ir iestatÄ«ta, noklusÄjuma vÄrtÄ«ba nav, tad minimÄlÄ vÄrtÄ«ba kļūst par noklusÄjuma uzvedni.
Å os resursu pieprasÄ«jumus galu galÄ izmanto Kubernetes plÄnotÄjs, lai izpildÄ«tu jÅ«su darba slodzes. Lai pareizi konfigurÄtu konteinerus, ir ļoti svarÄ«gi saprast, kÄ tas darbojas. PieÅemsim, ka vÄlaties savÄ klasterÄ« palaist vairÄkus aplikumus. PieÅemot, ka pod specifikÄcijas ir derÄ«gas, Kubernetes grafiks izmantos apļveida balansÄÅ”anu, lai atlasÄ«tu mezglu darba slodzes izpildei.
Kubernetes pÄrbaudÄ«s, vai 1. mezglam ir pietiekami daudz resursu, lai izpildÄ«tu pieprasÄ«jumus no pod konteineriem, un, ja tÄ nav, tas pÄries uz nÄkamo mezglu. Ja neviens no sistÄmas mezgliem nevar apmierinÄt pieprasÄ«jumus, podi pÄries gaidÄ«Å”anas stÄvoklÄ«. Izmantojot Google Kubernetes dzinÄja funkcijas, piemÄram, mezglu automÄtisko mÄrogoÅ”anu, GKE var automÄtiski noteikt gaidÄ«Å”anas stÄvokli un izveidot vÄl vairÄkus papildu mezglus.
Ja pÄc tam beigsies mezgla jauda, āāautomÄtiskÄ mÄrogoÅ”ana samazinÄs mezglu skaitu, lai ietaupÄ«tu naudu. TÄpÄc Kubernetes ieplÄno aplikumus, pamatojoties uz pieprasÄ«jumiem. TomÄr ierobežojums var bÅ«t lielÄks par pieprasÄ«jumiem, un dažos gadÄ«jumos mezglam faktiski var beigties resursi. MÄs Å”o stÄvokli saucam par pÄrmÄrÄ«gas saistÄ«bas stÄvokli.
KÄ jau teicu, kad runa ir par centrÄlo procesoru, Kubernetes sÄks ierobežot podziÅus. Katrs pods saÅems tik daudz, cik tas ir pieprasÄ«jis, bet, ja tas nesasniegs ierobežojumu, tiks piemÄrota drosele.
RunÄjot par atmiÅas resursiem, Kubernetes ir spiests pieÅemt lÄmumus par to, kuras podziÅas dzÄst un kuras paturÄt, lÄ«dz tiek atbrÄ«voti sistÄmas resursi vai visa sistÄma avarÄsies.
IedomÄsimies scenÄriju, kurÄ maŔīnai pietrÅ«kst atmiÅas ā kÄ Kubernetes to risinÄtu?
Kubernetes meklÄs aplikumus, kas patÄrÄ vairÄk resursu, nekÄ prasÄ«ts. TÄtad, ja jÅ«su konteineriem vispÄr nav pieprasÄ«jumu, tas nozÄ«mÄ, ka tie pÄc noklusÄjuma izmanto vairÄk, nekÄ pieprasÄ«ja, vienkÄrÅ”i tÄpÄc, ka viÅi vispÄr neko neprasÄ«ja. Å Ädi konteineri kļūst par galvenajiem slÄgÅ”anas kandidÄtiem. NÄkamie kandidÄti ir konteineri, kas ir apmierinÄjuÅ”i visus viÅu pieprasÄ«jumus, bet joprojÄm ir zem maksimÄlÄs robežas.
TÄtad, ja Kubernetes atrod vairÄkus aplikumus, kas ir pÄrsnieguÅ”i pieprasÄ«jumu parametrus, tas sakÄrtos tos pÄc prioritÄtes un pÄc tam noÅems zemÄkÄs prioritÄtes aplikumus. Ja visiem podiem ir vienÄda prioritÄte, Kubernetes pÄrtrauks tos aplikumus, kas pÄrsniedz to pieprasÄ«jumus vairÄk nekÄ citi podi.
Ä»oti retos gadÄ«jumos Kubernetes var pÄrtraukt pÄkstis, kas joprojÄm ir viÅu pieprasÄ«jumu darbÄ«bas jomÄ. Tas var notikt, ja kritiskie sistÄmas komponenti, piemÄram, Kubelet aÄ£ents vai Docker, sÄk patÄrÄt vairÄk resursu, nekÄ tiem bija rezervÄts.
TÄtad mazo uzÅÄmumu sÄkumposmÄ Kubernetes klasteris var darboties labi, nenosakot resursu pieprasÄ«jumus un ierobežojumus, taÄu, kad jÅ«su komandas un projekti sÄk pieaugt, jÅ«s riskÄjat saskarties ar problÄmÄm Å”ajÄ jomÄ. VaicÄjumu un ierobežojumu pievienoÅ”ana moduļiem un nosaukumvietÄm prasa ļoti maz papildu pūļu un var ietaupÄ«t daudz problÄmu.
Dažas reklÄmas š
Paldies, ka palikÄt kopÄ ar mums. Vai jums patÄ«k mÅ«su raksti? Vai vÄlaties redzÄt interesantÄku saturu? Atbalsti mÅ«s, pasÅ«tot vai iesakot draugiem,
Dell R730xd 2x lÄtÄk Equinix Tier IV datu centrÄ AmsterdamÄ? Tikai Å”eit
Avots: www.habr.com