Pirmais solis izvietoÅ”anai pakalpojumÄ Kubernetes ir lietojumprogrammas ievietoÅ”ana konteinerÄ. Å ajÄ sÄrijÄ mÄs apskatÄ«sim, kÄ varat izveidot mazu, droÅ”u konteinera attÄlu.
Pateicoties Docker, konteinera attÄlu izveide nekad nav bijusi tik vienkÄrÅ”a. NorÄdiet pamata attÄlu, pievienojiet izmaiÅas un izveidojiet konteineru.
Lai gan Ŕī metode ir lieliska darba sÄkÅ”anai, noklusÄjuma bÄzes attÄlu izmantoÅ”ana var izraisÄ«t nedroÅ”u darbu ar lieliem attÄliem, kas ir pilni ar ievainojamÄ«bÄm.
TurklÄt lielÄkajÄ daÄ¼Ä Docker attÄlu bÄzes attÄlam tiek izmantots Debian vai Ubuntu, un, lai gan tas nodroÅ”ina izcilu saderÄ«bu un vieglu pielÄgoÅ”anu (Docker fails aizÅem tikai divas koda rindiÅas), pamata attÄli var pievienot simtiem megabaitu papildu slodzi jÅ«su konteineram. PiemÄram, vienkÄrÅ”ais fails node.js lietojumprogrammai Go "hello-world" ir aptuveni 700 megabaiti, savukÄrt jÅ«su faktiskÄ lietojumprogramma ir tikai dažus megabaitus liels.
TÄtad visa Ŕī papildu darba slodze ir digitÄlÄs telpas izniekoÅ”ana un lieliska droŔības ievainojamÄ«bu un kļūdu slÄptuve. TÄpÄc apskatÄ«sim divus veidus, kÄ samazinÄt konteinera attÄla izmÄru.
Pirmais ir mazu bÄzes attÄlu izmantoÅ”ana, otrais ir Builder Pattern izmantoÅ”ana. MazÄku bÄzes attÄlu izmantoÅ”ana, iespÄjams, ir vienkÄrÅ”Äkais veids, kÄ samazinÄt konteinera izmÄru. VisticamÄk, jÅ«su izmantotÄ valoda vai steks nodroÅ”ina oriÄ£inÄlo lietojumprogrammas attÄlu, kas ir daudz mazÄks par noklusÄjuma attÄlu. ApskatÄ«sim mÅ«su konteineru node.js.
PÄc noklusÄjuma programmÄ Docker node:8 bÄzes attÄla izmÄrs ir 670 MB, bet node: 8-alpine attÄla izmÄrs ir tikai 65 MB, tas ir, 10 reizes mazÄks. Izmantojot mazÄko Alpu bÄzes attÄlu, jÅ«s ievÄrojami samazinÄsiet konteinera izmÄru. Alpine ir maza un viegla Linux izplatÄ«Å”ana, kas ir ļoti populÄra Docker lietotÄju vidÅ«, jo tÄ ir saderÄ«ga ar daudzÄm lietojumprogrammÄm, vienlaikus saglabÄjot mazus konteinerus. AtŔķirÄ«bÄ no standarta Docker ānodeā attÄla, ānode:alpineā noÅem daudz pakalpojumu failu un programmu, atstÄjot tikai tos, kas ir pietiekami, lai palaistu lietojumprogrammu.
Lai pÄrietu uz mazÄku pamata attÄlu, vienkÄrÅ”i atjauniniet Dockerfile, lai sÄktu darbu ar jauno pamata attÄlu:
Tagad atŔķirÄ«bÄ no vecÄ onbuild attÄla jums ir jÄkopÄ savs kods konteinerÄ un jÄinstalÄ visas atkarÄ«bas. JaunÄ Dockerfile konteiners sÄkas ar node:alpine attÄlu, pÄc tam izveido koda direktoriju, instalÄ atkarÄ«bas, izmantojot NPM pakotÅu pÄrvaldnieku, un visbeidzot palaiž server.js.
Å Ä« jauninÄjuma rezultÄtÄ tiek izveidots 10 reizes mazÄks konteiners. Ja jÅ«su programmÄÅ”anas valodai vai kaudzÄ«tei nav pamata attÄla samazinÄÅ”anas funkcionalitÄtes, izmantojiet Alpine Linux. Tas arÄ« nodroÅ”inÄs iespÄju pilnÄ«bÄ pÄrvaldÄ«t konteinera saturu. Mazu bÄzes attÄlu izmantoÅ”ana ir lielisks veids, kÄ Ätri izveidot mazus konteinerus. Bet vÄl lielÄku samazinÄjumu var panÄkt, izmantojot Builder Pattern.
InterpretÄtajÄs valodÄs pirmkods vispirms tiek nodots tulkam un pÄc tam tiek tieÅ”i izpildÄ«ts. KompilÄtajÄs valodÄs avota kods vispirms tiek pÄrveidots par kompilÄtu kodu. TomÄr kompilÄcijÄ bieži tiek izmantoti rÄ«ki, kas faktiski nav nepiecieÅ”ami koda palaiÅ”anai. Tas nozÄ«mÄ, ka jÅ«s varat pilnÄ«bÄ izÅemt Å”os rÄ«kus no gala konteinera. Å im nolÅ«kam varat izmantot Builder Pattern.
Kods tiek izveidots pirmajÄ konteinerÄ un apkopots. PÄc tam apkopotais kods tiek iesaiÅots galÄ«gajÄ konteinerÄ bez kompilatoriem un rÄ«kiem, kas nepiecieÅ”ami Ŕī koda apkopoÅ”anai. PalaidÄ«sim lietojumprogrammu Go, izmantojot Å”o procesu. PirmkÄrt, mÄs pÄriesim no onbuild attÄla uz Alpine Linux.
JaunajÄ Dockerfile konteiners sÄkas ar attÄlu golang:alpine. PÄc tam tas izveido koda direktoriju, kopÄ to avota kodÄ, izveido Å”o avota kodu un palaiž lietojumprogrammu. Å is konteiners ir daudz mazÄks nekÄ onbuild konteiners, taÄu tajÄ joprojÄm ir iekļauts kompilators un citi Go rÄ«ki, kas mums Ä«sti nav vajadzÄ«gi. TÄtad vienkÄrÅ”i izvilksim kompilÄto programmu un ievietosim to savÄ konteinerÄ.
Å ajÄ Docker failÄ varat pamanÄ«t kaut ko dÄ«vainu: tajÄ ir divas rindiÅas FROM. PirmÄ 4 rindiÅu sadaļa izskatÄs tieÅ”i tÄda pati kÄ iepriekÅ”ÄjÄ Dockerfile, izÅemot to, ka tÄ izmanto AS atslÄgvÄrdu, lai nosauktu Å”o posmu. NÄkamajÄ sadaÄ¼Ä ir jauna rindiÅa FROM, lai sÄktu jaunu attÄlu, kur golang:alpine attÄla vietÄ kÄ bÄzes attÄlu izmantosim Raw alpine.
Raw Alpine Linux nav instalÄts neviens SSL sertifikÄts, tÄdÄļ lielÄkÄ daļa API zvanu, izmantojot HTTPS, neizdosies, tÄpÄc instalÄsim dažus saknes CA sertifikÄtus.
Tagad nÄk jautrÄ daļa: lai kopÄtu apkopoto kodu no pirmÄ konteinera uz otro, varat vienkÄrÅ”i izmantot komandu COPY, kas atrodas otrÄs sadaļas 5. rindÄ. Tas kopÄs tikai vienu lietojumprogrammas failu un neietekmÄs Go utilÄ«ta rÄ«kus. JaunajÄ daudzpakÄpju Docker failÄ bÅ«s konteinera attÄls, kura izmÄrs ir tikai 12 megabaiti, salÄ«dzinot ar sÄkotnÄjo konteinera attÄlu, kas bija 700 megabaiti, kas ir liela atŔķirÄ«ba!
TÄpÄc mazu bÄzes attÄlu un Builder Pattern izmantoÅ”ana ir lielisks veids, kÄ bez liela darba izveidot daudz mazÄkus konteinerus.
IespÄjams, ka atkarÄ«bÄ no lietojumprogrammu kopas ir papildu veidi, kÄ samazinÄt attÄla un konteinera izmÄru, taÄu vai maziem konteineriem patieÅ”Äm ir izmÄrÄms ieguvums? ApskatÄ«sim divas jomas, kurÄs mazie konteineri ir ÄrkÄrtÄ«gi efektÄ«vi ā veiktspÄju un droŔību.
Lai novÄrtÄtu veiktspÄjas pieaugumu, apsveriet konteinera izveides procesa ilgumu, ievietoÅ”anu reÄ£istrÄ (push) un pÄc tam izguvi no turienes (izvilkÅ”ana). JÅ«s varat redzÄt, ka mazÄkam konteineram ir izteiktas priekÅ”rocÄ«bas salÄ«dzinÄjumÄ ar lielÄku konteineru.
Docker saglabÄs slÄÅus keÅ”atmiÅÄ, tÄpÄc turpmÄkÄs bÅ«ves bÅ«s ļoti Ätras. TomÄr daudzas CI sistÄmas, ko izmanto konteineru veidoÅ”anai un testÄÅ”anai, neglabÄ slÄÅus keÅ”atmiÅÄ, tÄpÄc tiek ietaupÄ«ts ievÄrojams laiks. KÄ redzat, laiks liela konteinera izveidoÅ”anai atkarÄ«bÄ no jÅ«su maŔīnas jaudas ir no 34 lÄ«dz 54 sekundÄm, un, izmantojot konteineru, tas tiek samazinÄts, izmantojot Builder Pattern - no 23 lÄ«dz 28 sekundÄm. Å Äda veida operÄcijÄm produktivitÄtes pieaugums bÅ«s 40-50%. TÄpÄc padomÄjiet par to, cik reižu veidojat un pÄrbaudÄt savu kodu.
Kad konteiners ir izveidots, tÄ attÄls (push konteinera attÄls) ir jÄievieto konteinera reÄ£istrÄ, lai pÄc tam varÄtu to izmantot savÄ Kubernetes klasterÄ«. Es iesaku izmantot Google konteineru reÄ£istru.
Izmantojot Google konteineru reÄ£istru (GCR), jÅ«s maksÄjat tikai par neapstrÄdÄtu krÄtuvi un tÄ«kla izveidi, un nav jÄmaksÄ papildu konteineru pÄrvaldÄ«bas maksa. Tas ir privÄts, droÅ”s un ļoti Ätrs. GCR izmanto daudzus trikus, lai paÄtrinÄtu vilkÅ”anas darbÄ«bu. KÄ redzat, Docker Container Image konteinera ievietoÅ”ana, izmantojot go:onbuild, aizÅems no 15 lÄ«dz 48 sekundÄm atkarÄ«bÄ no datora veiktspÄjas, un tÄ pati darbÄ«ba ar mazÄku konteineru aizÅems no 14 lÄ«dz 16 sekundÄm un mazÄk produktÄ«vÄm iekÄrtÄm. darbÄ«bas Ätruma priekÅ”rocÄ«ba palielinÄs 3 reizes. LielÄkiem datoriem laiks ir aptuveni vienÄds, jo GCR koplietojamai attÄlu datubÄzei izmanto globÄlo keÅ”atmiÅu, kas nozÄ«mÄ, ka jums tie vispÄr nav jÄielÄdÄ. Mazjaudas datorÄ centrÄlais procesors ir saÅ”aurinÄjums, tÄpÄc mazu konteineru izmantoÅ”anas priekÅ”rocÄ«bas Å”eit ir daudz lielÄkas.
Ja izmantojat GCR, es ļoti iesaku izmantot Google konteineru veidotÄju (GCB) kÄ daļu no jÅ«su veidoÅ”anas sistÄmas.
KÄ redzat, tÄ izmantoÅ”ana ļauj sasniegt daudz labÄkus rezultÄtus Build+Push darbÄ«bas ilguma samazinÄÅ”anÄ nekÄ pat produktÄ«va maŔīna - Å”ajÄ gadÄ«jumÄ konteineru veidoÅ”anas un nosÅ«tÄ«Å”anas process resursdatoram tiek paÄtrinÄts gandrÄ«z 2 reizes. . TurklÄt jÅ«s katru dienu saÅemat 120 bezmaksas bÅ«vniecÄ«bas minÅ«tes, kas vairumÄ gadÄ«jumu sedz jÅ«su konteineru veidoÅ”anas vajadzÄ«bas.
TÄlÄk seko vissvarÄ«gÄkÄ veiktspÄjas metrika ā Pull konteineru izguves vai lejupielÄdes Ätrums. Un, ja jÅ«s neinteresÄ laiks, kas pavadÄ«ts push darbÄ«bai, tad vilkÅ”anas procesa ilgums nopietni ietekmÄ kopÄjo sistÄmas veiktspÄju. PieÅemsim, ka jums ir trÄ«s mezglu kopa, un viens no tiem neizdodas. Ja izmantojat pÄrvaldÄ«bas sistÄmu, piemÄram, Google Kubernetes Engine, tÄ automÄtiski aizstÄs miruÅ”o mezglu ar jaunu. TomÄr Å”is jaunais mezgls bÅ«s pilnÄ«gi tukÅ”s, un jums bÅ«s jÄievelk visi konteineri, lai tas sÄktu darboties. Ja vilkÅ”anas darbÄ«ba aizÅem pietiekami ilgu laiku, jÅ«su kopa visu laiku darbosies ar zemÄku veiktspÄju.
Tas var notikt daudzos gadÄ«jumos: jauna mezgla pievienoÅ”ana klasterim, mezglu jauninÄÅ”ana vai pat pÄreja uz jaunu konteineru izvietoÅ”anai. TÄdÄjÄdi par galveno faktoru kļūst vilkÅ”anas ekstrakcijas laika samazinÄÅ”ana. Nav noliedzams, ka mazs konteiners tiek lejupielÄdÄts daudz ÄtrÄk nekÄ liels. Ja Kubernetes klasterÄ« izmantojat vairÄkus konteinerus, laika ietaupÄ«jums var bÅ«t ievÄrojams.
Apskatiet Å”o salÄ«dzinÄjumu: mazo konteineru vilkÅ”ana aizÅem 4ā9 reizes mazÄk laika, atkarÄ«bÄ no iekÄrtas jaudas, nekÄ tÄda pati darbÄ«ba, izmantojot go:onbuild. Izmantojot koplietotus, mazu konteineru bÄzes attÄlus, ievÄrojami paÄtrina jaunu Kubernetes mezglu izvietoÅ”anas un tieÅ”saistes savienoÅ”anas laiku un Ätrumu.
ApskatÄ«sim droŔības jautÄjumu. MazÄki konteineri tiek uzskatÄ«ti par daudz droÅ”Äkiem nekÄ lielÄki, jo tiem ir mazÄka uzbrukuma virsma. Vai tieÅ”Äm? Viena no noderÄ«gÄkajÄm Google konteineru reÄ£istra funkcijÄm ir iespÄja automÄtiski skenÄt jÅ«su konteinerus, lai noteiktu ievainojamÄ«bas. Pirms dažiem mÄneÅ”iem es izveidoju gan onbuild, gan daudzpakÄpju konteinerus, tÄpÄc paskatÄ«simies, vai tur nav ievainojamÄ«bas.
RezultÄts ir pÄrsteidzoÅ”s: nelielÄ konteinerÄ tika atklÄtas tikai 3 vidÄjas ievainojamÄ«bas, bet lielÄ konteinerÄ tika atrastas 16 kritiskas un 376 citas ievainojamÄ«bas. Ja paskatÄmies uz liela konteinera saturu, redzams, ka lielÄkajai daļai droŔības problÄmu nav nekÄda sakara ar mÅ«su lietojumprogrammu, bet gan tÄs ir saistÄ«tas ar programmÄm, kuras mÄs pat neizmantojam. TÄtad, kad cilvÄki runÄ par lielu uzbrukuma virsmu, tas ir tas, ko viÅi domÄ.
Å
emiet vÄrÄ, ka ir skaidrs: izveidojiet mazus konteinerus, jo tie nodroÅ”ina reÄlas veiktspÄjas un droŔības priekÅ”rocÄ«bas jÅ«su sistÄmai.
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