Ma lĂ”in Kube Eagle'i â Prometheus'e eksportija. See on lahe tööriist, mis aitab paremini mĂ”ista vĂ€ikeste ja keskmiste klasside ressursse. LĂ”ppkokkuvĂ”ttes sÀÀstsin ma mitusada dollarit, kuna suutsin leida Ă”iged masina tĂŒĂŒbid ja seadistada rakenduste ressursipiirangud vastavalt töökoormusele.
RÀÀgin eelistest , kuid kÔigepealt selgitan, mis probleemid tekkisid ja miks oli vajalik kvaliteetne jÀlgimine.
Haldasin mĂ”nda klassi, kus oli 4â50 sĂ”lme. Igas klassis oli kuni 200 mikroteenust ja rakendust. Et tĂ”husamalt kasutada olemasolevat riistvara, olid enamus kasutuselevĂ”tteid seadistatud burstable-mĂ€lu ja CPU ressurssidega. Nii saavad pood vĂ”tta kasutusele saadaval olevad ressursid, kui neid on vaja, ja seejuures ei sega nad teisi rakendusi selle sĂ”lme peal. Kas see pole tore?
Ja kuigi klass kasutas suhteliselt vĂ€he CPU-d (8%) ja mĂ€lu (40%), tekkis meil pidevalt probleeme poodide vĂ€ljatĂ”rjumisega, kui need pĂŒĂŒdsid eraldada rohkem mĂ€lu, kui sĂ”lmes oli saadaval. Meil oli tol ajal ainult ĂŒks paneel Kubernetes'e ressursside jĂ€lgimiseks. Selline:
Grafana paneel ainult cAdvisor'i mÔÔdikute jaoks
Sellega paneeliga ei ole probleem nĂ€ha sĂ”lmi, mis tarbivad palju mĂ€lu ja CPU-d. Probleem on aru saada, mis on pĂ”hjuseks. Et potid ikka paigal pĂŒsiksid, vĂ”iks kĂ”ikides pod'des tĂ”epoolest seadistada tagatud ressursid (taotletud ressursid on vĂ”rdsed piiranguga). Kuid see ei ole ruumi kĂ”ige nutikam kasutamine. Klassis oli mitusada gigabaiti mĂ€lu, kuid mĂ”ned sĂ”lmed nĂ€lgisid, samas kui teistel jĂ€i ĂŒle 4â10 GB.
Tuleb vÀlja, et Kubernetes'e planeerija jagas töökoormusi saadaval olevate ressursside vahel ebavÔrdselt. Kubernetes'e planeerija arvesse vÔtab erinevaid konfiguratsioone: affinity reeglid, taints ja tolerantsid, sÔlmede valijad, mis vÔivad piirata saadaval olevaid sÔlmi. Kuid minu puhul ei olnud midagi sellist, ja pod'd planeeriti vastavalt igas sÔlmes taotletud ressurssidele.
Pod'ile valiti sÔlm, kus oli kÔige rohkem vabu ressursse ja mis vastas taotluse tingimustele. LÔpuks selgus, et sÔlmedes taotletud ressursid ei kattunud tegeliku kasutusega, ja siin tuli appi Kube Eagle ning tema ressursside jÀlgimisvÔimalused.
Peaaegu kÔik minu Kubernetes'i klassid jÀlgiti ainult ja Node Exporter annab statistikat sisendi, vÀljundi ja ketta kasutamise, CPU ja RAM-i kohta, samas kui Kube State Metrics nÀitab Kubernetes'i objektide mÔÔdikuid, nÀiteks CPU ja mÀlu ressursi nÔudeid ja limiite.
Peame ĂŒhendama kasutuse mÔÔdikud nĂ”udluse ja limiitidega Grafanas, et saada kogu teave probleemist. Tundub lihtne, kuid tegelikult on nende kahe tööriista mĂ€rgistamine erinev ning mĂ”nel mÔÔdikul pole isegi metaandmete sildid. Kube Eagle teeb kĂ”ik ise ja paneel nĂ€eb vĂ€lja selline:
Oleme suutnud lahendada palju ressursiprobleeme ja sÀÀsta riistvara:
- MĂ”ned arendajad ei teadnud, kui palju ressursse mikroteenused vajavad (vĂ”i ei viitsinud sellega tegeleda). Meil polnud vahendeid vale ressursi nĂ”udluse leidmiseks - selleks peab teadma kasutust ning nĂ”udmisi ja limiite. NĂŒĂŒd nad nĂ€evad Prometheuse mÔÔdikuid, jĂ€lgivad tegelikku kasutust ja kohandavad nĂ”udmisi ja limiite.
- JVM-i rakendused vĂ”tavad nii palju RAM-i, kui nad saavad. PrĂŒgikoristaja vabastab mĂ€lu ainult siis, kui kasutus ĂŒletab 75%. Kuna enamikul teenustest on mĂ€lu burstable, kasutas JVM alati rohkem mĂ€lu. SeetĂ”ttu tarbisid kĂ”ik need Java-teenused palju rohkem RAM-i, kui oodata oli.
- MĂ”ned rakendused kĂŒsisid liiga palju mĂ€lu, ja Kubernetes'i planeerija ei eraldanud neid sĂ”lmede teistele rakendustele, ehkki tegelikult olid nad vabad. Ăks arendaja lisas kogemata nĂ”udlusse liigse numbri ja haaras endale suure osa RAM-ist: 20 GB asemel 2. Keegi ei mĂ€rganud. Rakendusel oli 3 replikat, nii et kannatada sai koguni 3 sĂ”lme.
- Oleme kehtestanud piirangud ressurssidele, ĂŒmber planeerinud podid Ă”igete nĂ”udmistega ja saavutanud ideaalse tasakaalu raudvara kasutuses kĂ”igis sĂ”lmedes. MĂ”ned sĂ”lmed oleks isegi vĂ”imalik sulgeda. Ja siis nĂ€gime, et meil on valed masinad (CPU-le orienteeritud, mitte mĂ€lule). Muutsime tĂŒĂŒpi ja eemaldasime veel mĂ”ned sĂ”lmed.
Summary
Burstable ressurssidega klastris kasutate paremini olemasolevat riistvara, kuid Kubernetes'i planeerija plaanib podid ressursside nÔudluste alusel, mis on ohtlik. Et kahe kÀrbsega pihta saada: vÀltida probleeme ja kasutada ressursse maksimaalselt, on vajalik hea jÀlgimine. Seda ongi vaja. (Prometheuse eksportija ja Grafana jÀlgimistahvel).
Allikas: habr.com
