Iga Kubernetesi ressursi jaoks on vĂ”imalik seadistada kahte tĂŒĂŒpi nĂ”udeid â Requests ja Limits. Esimene kirjeldab minimaalseid nĂ”udeid vabade ressursside olemasolule sĂ”lmes, mis on vajalik konteineri vĂ”i podi kĂ€ivitamiseks, teine ââpiirab rangelt neid ressursse, mis on konteinerile kĂ€ttevĂ”etavad.
Kui Kubernetes planeerib podi, on vÀga oluline, et konteineritel oleks piisavalt ressursse normaalseks tööks. Kui plaanite suure rakenduse juurutamist sÔlmes, mille ressursside maht on piiratud, on tÀiesti vÔimalik, et rakendus ei tööta, kuna sÔlmest lÔppeb mÀlu vÔi tal puuduvad protsessorivÔimsus. Selles artiklis vaatleme, kuidas saab lahendada arvutusvÔimsuse puudujÀÀgi probleeme ressursside pÀringute ja piirangute kaudu.
Requests ja Limits on mehhanismid, mida Kubernetes kasutab selliste ressursside, nagu nĂ€iteks protsessor ja mĂ€lu, haldamiseks. Requests tagab, et konteiner saab garanteeritud koguse kĂŒsitud ressurssi. Kui konteiner kĂŒsib ressursse, plaanib Kubernetes selle ainult sellele sĂ”lmele, mis suudab seda pakkuda. Limits piirab, et konteineri kĂŒsitud ressursid ei ĂŒletaks kunagi kindlaksmÀÀratud vÀÀrtust.

Konteiner vĂ”ib suurendada oma arvutusvĂ”imet kuni teatud piirini, pĂ€rast mida see piirdub. Vaatame, kuidas see toimib. On olemas kaks tĂŒĂŒpi ressursse â protsessor ja mĂ€lu. Kubernetes'i planeerija kasutab nende ressursside andmeid, et selgitada vĂ€lja, kus teie podid kĂ€ivitada. TĂŒĂŒpiline ressursside spetsifikatsioon podi jaoks nĂ€eb vĂ€lja jĂ€rgmiselt.

Igas podis saab konteiner seadistada omaenda nĂ”udmised ja piirangud, ning kĂ”ik need on kumulatiivsed. KĂ”igepealt mÀÀratakse protsessorivĂ”imsus millikohtades. Kui teie konteiner vajab kĂ€itamiseks kahe tĂ€is tuuma jĂ”udlust, peate seadistama vÀÀrtuse 2000m. Kui konteiner vajab ainult 1/4 tuuma jĂ”udlust, on vÀÀrtus 250m. Pidage meeles, et kui mÀÀrate protsessorivĂ”imsuse vÀÀrtuse, mis ĂŒletab suurima sĂ”lme tuumade arvu, siis teie podi ei plaanita ĂŒldse. Sama juhtub, kui teil on pod, mis vajab nelja tuuma, samas kui Kubernetes klaster koosneb vaid kahest pĂ”hilisest virtuaalmasinast.
Ainult siis, kui teie rakendus ei ole mĂ”eldud mitme tuuma eeliste maksimaalseks kasutamiseks (silmas peetakse selliseid programme nagu keerulised teaduslikud arvutused ja andmebaasi operatsioonid), on parim praktika seadistada CPU nĂ”udmised vÀÀrtusele 1 vĂ”i madalam ja seejĂ€rel kĂ€ivitada rohkem replikaid skaleeritavuse saavutamiseks. See lahendus annab sĂŒsteemile suurema paindlikkuse ja usaldusvÀÀrsuse.
Kuna tegemist on CPU piirangutega, muutub olukord huvitavamaks, kuna see loetakse kokkusurutavaks ressursiks. Kui teie rakendus hakkab lĂ€henema protsessori vĂ”imsuse piirile, hakkab Kubernetes teie konteinerit aeglustama, kasutades CPU Throttling'ut â protsessori sageduse vĂ€hendamist. See tĂ€hendab, et protsessorit piiratakse kunstlikult, andes rakendusele potentsiaalselt halvemad tulemused, kuid protsess ei peatuks ega oleks eemaldatud.
MĂ€luressursid mÀÀratakse baitides. TĂŒĂŒpiliselt mÔÔdetakse seadistustes vÀÀrtust mebibaitides (Mib), kuid saate mÀÀrata mis tahes vÀÀrtuse alates baitidest kuni petabaitideni. Siin kehtib sama olukord nagu CPU puhul â kui esitate mĂ€luhulga taotluse, mis ĂŒletab sĂ”lmede mĂ€lu, ei planeerita selle pod'i tĂ€itmist. Kuid erinevalt protsessori ressursidest ei ole mĂ€lu kokkusurutav, kuna pole viisi selle kasutamise piiramise jaoks. SeetĂ”ttu peatatakse konteineri tĂ€itmine, kui see ĂŒletab sellele mÀÀratud mĂ€lu.

Oluline on meeles pidada, et te ei saa seadistada pĂ€ringuid, mis ĂŒletavad teie sĂ”lmede pakutavaid ressursimahu. GKE virtuaalmasinate ĂŒhiste ressursside omadused on saadaval allpool olevates linkides, mis asuvad selle video all.
Ideaalmaailmas peaks vaikesĂ€tete jĂ€rgi piisama konteinerite seadetest, et tööprotsessid sujuksid probleemideta. Kuid tĂ”eline maailm ei ole selline, inimesed vĂ”ivad kergesti unustada ressursside kasutamise seadistada vĂ”i hĂ€kkerid vĂ”ivad seada pĂ€ringud ja piirangud, mis ĂŒletavad infrastruktuuri reaalseid vĂ”imalusi. Selliste stsenaariumite vĂ€ltimiseks saab seadistada ressursside kvote ResourceQuota ja piirangute vahemikke LimitRange.
PĂ€rast nimespetsiifiliste ruumide loomist saab neid kvotade abil piirata. NĂ€iteks, kui teil on prod ja dev nimede ruumid, kasutatakse mustrit, kus tootmisruumid ei ole ĂŒldse kvoteeritud, samas kui arendusrĂŒhmal on vĂ€ga ranged kvotad. See vĂ”imaldab tootmisruumile teha jĂ€rsu liiklusetĂ”usu korral kĂ”ik olemasolevad ressursid enda kasutusse, blokeerides tĂ€ielikult arendusrĂŒhma.
Ressursskvota vĂ”ib vĂ€lja nĂ€ha selline. Antud nĂ€ites on 4 jaotust â need on 4 alumist koodirida.

Vaadakem neid kĂ”iki. Requests.cpu on maksimaalne kombinatsiooniliste protsessorivĂ”imsuse pĂ€ringute arv, mis vĂ”ivad tulla kĂ”igist konteineritest nimede ruumis. Antud nĂ€ites vĂ”ivad teil olla 50 konteinerit, mille pĂ€ringud on 10m, viis konteinerit, mille pĂ€ringud on 100m, vĂ”i lihtsalt ĂŒks konteiner, mille pĂ€ring on 500m. Niikaua kui antud nimede ruumi requests.cpu kogus on alla 500m, on kĂ”ik korras.
KĂŒsitav mĂ€lu requests.memory on maksimaalne kombinatsiooniliste mĂ€lu pĂ€ringute suurus, mis vĂ”ivad olla kĂ”igil konteineritel nimede ruumis. Nagu eelmises nĂ€ites, vĂ”ite omada 50 konteinerit, millel on 2 MiB, viis konteinerit, millel on 20 MiB, vĂ”i ĂŒhe konteineri, millel on 100 MiB, kuni antud nimede ruumi kĂŒsitav mĂ€lu jÀÀb alla 100 mebibaiti.
limits.cpu â see on maksimaalne kombineeritud protsessori vĂ”imsuse vÀÀrtus, mida kĂ”ik nimespetsiifilised konteinerid vĂ”ivad kasutada. Seda vĂ”ib pidada protsessori vĂ”imsuse taotlemise piiriks.
LĂ”puks, limits.memory â see on maksimaalne kogus ĂŒldmĂ€lu, mida kĂ”ik konteinerid nimespetsiifilises ruumis vĂ”ivad kasutada. See on mĂ€lu taotlemise kogupiirang.
Seega töötavad Kubernetes'i klastris konteinerid vaikimisi piiranguteta arvutusressurssidega. Ressursside kvootide abil saavad klastrihaldurid piirata ressursikasutust ja nende loomist nimespetsiifiliste ruumide pĂ”hjal. Nimespetsiifilises ruumis vĂ”ib pod'i vĂ”i konteineri modulaarne osa tarbida nii palju CPU- ja mĂ€lunĂ”udlust, kui on mÀÀratud nimespetsiifilise ruumi ressursside kvoodiga. Siiski on mure, et ĂŒks pod vĂ”i konteiner vĂ”ib monopoliseerida kĂ”ik olemasolevad ressursid. Selle olukorra vĂ€ltimiseks kasutatakse limiidivahemikku, mis on ressursijaotuse piirangupoliitika (pod'ide vĂ”i konteinerite jaoks) nimespetsiifilises ruumis.
Limiitide vahemik annab piirangud, mis vÔivad:
- tagada minimaalne ja maksimaalne arvutusressursside kasutamine iga mooduli vÔi konteineri jaoks nimeses.
- sundida tÀitma minimaalset ja maksimaalset Starage Request'i taotlust iga PersistentVolumeClaim'i jaoks nimeses.
- sundida seadma suhet Request'i ja Limit'i vahel ressursi jaoks nimeses.
- seada vaikimisi Requests/Limits arvutusressursside jaoks nimeses ja automaatselt neid konteineritesse rakendada töö ajal.
Nii et saate oma nimeses luua piirangute vahemiku. Erinevalt kvoodist, mis kehtib kogu nimes, kasutatakse Limit Range'i eraldi konteinerite jaoks. See vĂ”ib takistada kasutajate loomast ĂŒlikitsaid vĂ”i vastupidi, hiiglaslikke konteinerite nimeses. Limit Range vĂ”ib vĂ€lja nĂ€ha nii.

Nagu eelnevas, on siin vĂ”imalik jagada 4 osa. Vaatame igaĂŒht lĂ€hemalt.
MÀÀratletud jaotises default on konteineri vaikeseaded podis. Kui mÀÀrate need vÀÀrtused lubatud vahemikus, siis kÔik konteinerid, mille jaoks neid vÀÀrtusi pole selgelt mÀÀratud, jÀrgivad vaikeseadeid.
MÀÀratletud jaotises defaultRequest on podis konteineri vaikekomplektid. Kui mÀÀrate need vÀÀrtused lubatud vahemikus, siis kÔik konteinerid, mille jaoks neid sÀtteid ei ole selgelt mÀÀratud, kasutavad vaikeseadeid.
MÀÀratletud jaotises max on mÀÀratud maksimaalsed piirangud, mida saab konteineri jaoks podis seadistada. Default ja konteineri piirangud ei saa olla kÔrgemal sellest piirist. Oluline on mÀrkida, et kui on mÀÀratud max vÀÀrtus ja jaotis default puudub, siis maksimaalne vÀÀrtus muutub vaikeseendeks.
MÀÀratletud jaotises min on mÀÀratud konteineri minimaalset arvamust, mida saab podis seadistada. Samal ajal ei saa default vÀÀrtused ja konteineri arvamused olla madalamad kui see piir.
Oluline on mÀrkida, et kui see vÀÀrtus on mÀÀratud, on vaikimisi vÀÀrtus - ei, siis minimaalne vÀÀrtus muutub vaikimisi pÀringuks.
LÔppkokkuvÔttes kasutatakse neid ressursipÀringuid Kubernetes'i planeerija teie töökoormuste tÀitmiseks. Et saaksite oma konteinerid Ôigesti seadistada, on vÀga oluline mÔista, kuidas see töötab. Oletame, et soovite kÀivitada oma klastris mitu moodulit. Kui pod'ide spetsifikatsioonid on kehtivad, siis kasutatakse Kubernetes'i ajakavas ringikujulist koormuse tasakaalustamist sÔlme valimiseks, kus töökoormust tÀita.

Kubernetes kontrollib, kas Node 1 sĂ”lmel on piisavalt ressursse pod'i konteinerite pĂ€ringute tĂ€itmiseks ja kui ei ole, siis liikuda jĂ€rgmisele sĂ”lmele. Kui aga ĂŒkski sĂŒsteemi sĂ”lm ei suuda pĂ€ringutele vastata, siis lĂ€hevad pod'id ooteolekusse Pending state. Google Kubernetes Engine'i funktsioonide, nagu nĂ€iteks sĂ”lmede automaatne skaleerimine, abil suudab GKE automaatselt tuvastada ooteoleku ja luua veel mĂ”ned lisasĂ”lmed.
Kui sĂ”lmedel tekib ĂŒlemÀÀrane maht, vĂ€hendab automaatne skaleerimine nende arvu, et sÀÀsta raha. Just seetĂ”ttu planeerib Kubernetes pod'e nĂ”udmiste pĂ”hjal. Siiski vĂ”ib piir olla suurem kui nĂ”udmised ning mĂ”nel juhul vĂ”ib sĂ”lm tegelikult ressursid ammendada. Seda olukorda nimetatakse ĂŒlekuuluvaks olekuks.

Nagu ma juba mainisin, kui tegemist on protsessoriga, hakkab Kubernetes pod'e piirama. Iga pod saab just nii palju, kui ta palus, kuid kui ta ei saavuta limiiti, siis algab piiritlemine.
MĂ€luressursside osas peab Kubernetes langetama otsuseid, milliseid pod'e eemaldada ja milliseid sĂ€ilitada, kuni vabastate sĂŒsteemi ressursid, vastasel juhul vĂ”ib kogu sĂŒsteem kokku variseda.
Kujutame ette stsenaariumi, kus teil on masin, mille mĂ€lu on ammendatud â kuidas kĂ€itub sel juhul Kubernetes?
Kubernetes otsib pod'e, mis kasutavad rohkem ressursse, kui nad on taotlenud. Seega, kui teie konteineritel ei ole ĂŒldse Requests'e, tĂ€hendab see, et vaikimisi kasutavad nad rohkem kui palusid, kuna nad ei ole midagi taotlenud! Sellised konteinerid on peamised kandidaadid vĂ€lja lĂŒlitamiseks. JĂ€rgmised kandidaadid on konteinerid, mis on rahuldanud kĂ”ik oma taotlused, kuid on endiselt allpool maksimaalset piiri.
Niisiis, kui Kubernetes leiab mitu pod'i, mis on oma taotluste parameetreid ĂŒletanud, sorteerib ta need prioriteedi alusel ja seejĂ€rel eemaldab madalaima prioriteediga moodulid. Kui kĂ”ik moodulid on sama prioriteediga, lĂ”petab Kubernetes nendel pod'idel töötamise, mis on oma taotlusi rohkem ĂŒletanud kui teised pod'id.
VĂ€ga harvadel juhtudel vĂ”ib Kubernetes katkestada pod'e, mis on endiselt oma taotluste piirides. See vĂ”ib juhtuda siis, kui sellised sĂŒsteemi kriitilised komponendid nagu Kubeleti agent vĂ”i Docker hakkavad tarbima rohkem ressursse, kui neile on reserveeritud.
Seega, vÀikeste ettevÔtete algusfaasis vÔib Kubernetes klaster suurepÀraselt töötada ilma ressursside nÔudmiste ja piiranguteta, kuid kui teie meeskonnad ja projektid hakkavad kasvama, vÔite riskida probleemide tekkimisega. NÔudmiste ja piirangute lisamine teie moodulitele ja ruumidele nÔuab vaid veidi lisatööd ja vÔib pÀÀsta teid paljusid muresid.

Veidi reklaami đ
AitĂ€h, et olete meiega. Kas teile meeldivad meie artiklid? Kas soovite nĂ€ha rohkem huvitavaid materjale? Toetage meid, tehes tellimuse vĂ”i soovitades meid tuttavatele. , ainulaadne sisenemise taseme serverite analoog, mille oleme teie jaoks vĂ€lja mĂ”elnud: (saadaval on RAID1 ja RAID10 variandid, kuni 24 sĂŒdamikku ja kuni 40GB DDR4).
Kas Dell R730xd on kaks korda odavam Equinixi Tier IV andmete keskuses Amsterdamis? Ainult meie juures Hollandi turul! Dell R420 â 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB â alates $99! Lugege, kuidas
Allikas: habr.com
