L-aħjar prattiki ta' Kubernetes. Noħolqu kontenituri żgħar

L-aħjar prattiki ta' Kubernetes. Noħolqu kontenituri żgħar

L-ewwel pass tal-iskjerament għal Kubernetes huwa li tpoġġi l-applikazzjoni tiegħek f'kontenitur. F'din is-serje, aħna ser inħarsu lejn kif tista 'toħloq immaġni ta' kontenitur żgħir u sigur.
Grazzi għal Docker, il-ħolqien ta 'immaġini ta' kontenituri qatt ma kien daqshekk faċli. Speċifika immaġni bażi, żid il-bidliet tiegħek, u oħloq kontenitur.

L-aħjar prattiki ta' Kubernetes. Noħolqu kontenituri żgħar

Filwaqt li din it-teknika hija tajba biex tibda, l-użu ta 'immaġni bażi default jista' jwassal għal xogħol mhux sikur bi stampi kbar mimlija vulnerabbiltajiet.

Barra minn hekk, il-biċċa l-kbira tal-immaġini f'Docker jużaw Debian jew Ubuntu għall-immaġni bażi, u filwaqt li dan jipprovdi kompatibilità eċċellenti u customization faċli (fajl Docker jieħu biss żewġ linji ta 'kodiċi), immaġini bażi jistgħu jżidu mijiet ta' megabytes ta 'tagħbija addizzjonali mal-kontenitur tiegħek. Pereżempju, fajl sempliċi node.js għal applikazzjoni Go "hello-world" huwa ta' madwar 700 megabytes, filwaqt li l-applikazzjoni attwali tiegħek hija ta' daqs ta' ftit megabytes biss.

L-aħjar prattiki ta' Kubernetes. Noħolqu kontenituri żgħar

Allura dan l-ammont ta’ xogħol żejjed kollu huwa ħela ta’ spazju diġitali u moħbi kbir għall-vulnerabbiltajiet tas-sigurtà u l-bugs. Mela ejja nħarsu lejn żewġ modi kif tnaqqas id-daqs ta 'immaġni ta' kontenitur.

L-ewwel huwa l-użu ta 'immaġini bażi żgħar, it-tieni huwa l-użu tal-Mudell Bennej. L-użu ta 'immaġini bażi iżgħar huwa probabbilment l-eħfef mod biex tnaqqas id-daqs tal-kontenitur tiegħek. Probabbilment, il-lingwa jew il-munzell li qed tuża tipprovdi immaġni tal-applikazzjoni oriġinali li hija ħafna iżgħar mill-immaġni default. Ejja nagħtu ħarsa lejn il-kontenitur node.js tagħna.

L-aħjar prattiki ta' Kubernetes. Noħolqu kontenituri żgħar

B'mod awtomatiku f'Docker, id-daqs tal-immaġni bażi tan-node:8 huwa 670 MB, u n-node: id-daqs tal-immaġni 8-alpina huwa biss 65 MB, jiġifieri 10 darbiet iżgħar. Billi tuża l-immaġni bażi Alpina iżgħar, inti tnaqqas b'mod sinifikanti d-daqs tal-kontenitur tiegħek. Alpine hija distribuzzjoni żgħira u ħafifa tal-Linux li hija popolari ħafna fost l-utenti ta 'Docker minħabba li hija kompatibbli ma' ħafna applikazzjonijiet filwaqt li żżomm il-kontenituri żgħar. B'differenza mill-immaġni standard "node" Docker, "node:alpine" tneħħi ħafna fajls u programmi tas-servizz, u tħalli biss dawk li huma biżżejjed biex imexxu l-applikazzjoni tiegħek.

Biex timxi għal immaġni bażi iżgħar, sempliċement aġġorna d-Dockerfile biex tibda taħdem bl-immaġni bażi l-ġdida:

L-aħjar prattiki ta' Kubernetes. Noħolqu kontenituri żgħar

Issa, b'differenza mill-immaġni onbuild l-antika, trid tikkopja l-kodiċi tiegħek fil-kontenitur u tinstalla kwalunkwe dipendenzi. F'Dockerfile ġdid, il-kontenitur jibda b'node: immaġni alpina, imbagħad joħloq direttorju għall-kodiċi, jinstalla dipendenzi bl-użu tal-maniġer tal-pakkett NPM, u finalment imexxi server.js.

L-aħjar prattiki ta' Kubernetes. Noħolqu kontenituri żgħar

Dan it-titjib jirriżulta f'kontenitur li huwa 10 darbiet iżgħar fid-daqs. Jekk il-lingwa tal-ipprogrammar jew il-munzell tiegħek m'għandhomx funzjonalità bażika għat-tnaqqis tal-immaġni, uża Alpine Linux. Se tipprovdi wkoll il-ħila li timmaniġġja bis-sħiħ il-kontenut tal-kontenitur. L-użu ta 'stampi ta' bażi żgħar huwa mod tajjeb ħafna biex jinħolqu malajr kontenituri żgħar. Iżda tnaqqis saħansitra akbar jista 'jinkiseb bl-użu tal-Mudell Bennej.

L-aħjar prattiki ta' Kubernetes. Noħolqu kontenituri żgħar

Fil-lingwi interpretati, il-kodiċi tas-sors l-ewwel jiġi mgħoddi lill-interpretu u mbagħad jiġi eżegwit direttament. Fil-lingwi kkumpilati, il-kodiċi tas-sors l-ewwel jiġi kkonvertit f'kodiċi kkumpilat. Madankollu, il-kumpilazzjoni ħafna drabi tuża għodod li mhumiex fil-fatt meħtieġa biex imexxu l-kodiċi. Dan ifisser li tista 'tneħħi kompletament dawn l-għodda mill-kontenitur finali. Tista 'tuża Builder Pattern għal dan.

L-aħjar prattiki ta' Kubernetes. Noħolqu kontenituri żgħar

Il-kodiċi jinħoloq fl-ewwel kontenitur u kkompilat. Il-kodiċi kkompilat imbagħad jiġi ppakkjat f'kontenitur finali mingħajr il-kompilaturi u l-għodod meħtieġa biex jikkompilaw dak il-kodiċi. Ejja nħaddmu applikazzjoni Go permezz ta' dan il-proċess. L-ewwel, aħna ser nimxu mill-immaġni onbuild għal Alpine Linux.

L-aħjar prattiki ta' Kubernetes. Noħolqu kontenituri żgħar

Fid-Dockerfile il-ġdid, il-kontenitur jibda b'immaġni golang:alpina. Imbagħad toħloq direttorju għall-kodiċi, tikkopjah fil-kodiċi tas-sors, tibni dak il-kodiċi tas-sors, u tmexxi l-applikazzjoni. Dan il-kontenitur huwa ħafna iżgħar mill-kontenitur onbuild, iżda xorta fih il-kompilatur u għodod oħra Go li ma tantx għandna bżonn. Mela ejja biss estratt il-programm miġbura u poġġih fil-kontenitur tiegħu stess.

L-aħjar prattiki ta' Kubernetes. Noħolqu kontenituri żgħar

Tista' tinnota xi ħaġa stramba f'dan il-fajl Docker: fih żewġ linji FROM. L-ewwel taqsima tal-linja 4 tidher eżattament l-istess bħall-Dockerfile preċedenti ħlief li tuża l-keyword AS biex issemmi dan l-istadju. It-taqsima li jmiss għandha linja FROM ġdida biex tibda immaġni ġdida, fejn minflok l-immaġni golang:alpine se nużaw Raw alpine bħala l-immaġni bażi.

Raw Alpine Linux m'għandu l-ebda ċertifikat SSL installat, li jwassal biex il-biċċa l-kbira tas-sejħiet API fuq HTTPS ifallu, allura ejja ninstallaw xi ċertifikati CA root.

Issa tiġi l-parti divertenti: biex tikkopja l-kodiċi kkumpilat mill-ewwel kontenitur għat-tieni, tista 'sempliċement tuża l-kmand KOPJA li jinsab fuq il-linja 5 tat-tieni taqsima. Se tikkopja biss fajl ta 'applikazzjoni wieħed u mhux se taffettwa l-għodod ta' utilità Go. Il-fajl Docker ġdid f'diversi stadji se jkun fih immaġini tal-kontejner li hija biss 12-il megabytes fid-daqs, meta mqabbla mal-immaġni tal-kontenitur oriġinali li kienet 700 megabytes, li hija differenza kbira!
Allura l-użu ta 'stampi ta' bażi żgħar u Builder Pattern huma modi tajbin biex jinħolqu kontenituri ħafna iżgħar mingħajr ħafna xogħol.
Huwa possibbli li skont il-munzell tal-applikazzjoni, hemm modi addizzjonali biex tnaqqas id-daqs tal-immaġni u tal-kontenitur, iżda l-kontenituri żgħar verament għandhom benefiċċju li jista 'jitkejjel? Ejja nħarsu lejn żewġ oqsma fejn kontenituri żgħar huma estremament effettivi - il-prestazzjoni u s-sigurtà.

Biex tevalwa ż-żieda fil-prestazzjoni, ikkunsidra t-tul tal-proċess tal-ħolqien ta 'kontenitur, daħħalha fir-reġistru (push), u mbagħad iġġibha minn hemm (ġbid). Tista 'tara li kontenitur iżgħar għandu vantaġġ distint fuq kontenitur akbar.

L-aħjar prattiki ta' Kubernetes. Noħolqu kontenituri żgħar

Docker se jdaħħal fil-cache s-saffi sabiex il-bini sussegwenti jkun mgħaġġel ħafna. Madankollu, ħafna sistemi ta 'CI użati biex jibnu u jittestjaw kontenituri ma jaħlux saffi, għalhekk hemm iffrankar ta' ħin sinifikanti. Kif tistgħu taraw, iż-żmien biex tibni kontenitur kbir, skond il-qawwa tal-magna tiegħek, huwa minn 34 sa 54 sekonda, u meta tuża kontenitur imnaqqas bl-użu tal-Mudell tal-bennej - minn 23 sa 28 sekonda. Għal operazzjonijiet ta 'dan it-tip, iż-żieda fil-produttività se tkun 40-50%. Allura aħseb ftit dwar kemm-il darba tibni u tittestja l-kodiċi tiegħek.

Wara li jinbena l-kontenitur, trid timbotta l-immaġni tiegħu (imbutta l-immaġni tal-kontenitur) fir-reġistru tal-kontejners sabiex imbagħad tkun tista' tużaha fil-cluster Kubernetes tiegħek. Nirrakkomanda li tuża Google Container Registry.

L-aħjar prattiki ta' Kubernetes. Noħolqu kontenituri żgħar

Bil-Google Container Reġistru (GCR), inti tħallas biss għall-ħażna mhux maħduma u netwerking, u m'hemm l-ebda miżati addizzjonali għall-ġestjoni tal-kontejners. Huwa privat, sigur u veloċi ħafna. GCR juża ħafna tricks biex iħaffef l-operazzjoni tal-ġibda. Kif tistgħu taraw, id-dħul ta’ kontenitur Docker Container Image bl-użu ta’ go:onbuild se jieħu minn 15 sa 48 sekonda, skont il-prestazzjoni tal-kompjuter, u l-istess operazzjoni b’kontenitur iżgħar se tieħu minn 14 sa 16-il sekonda, u għal magni inqas produttivi il-vantaġġ fil-veloċità tat-tħaddim jiżdied bi 3 darbiet. Għal magni akbar, iż-żmien huwa bejn wieħed u ieħor l-istess, peress li GCR juża cache globali għal database kondiviża ta 'immaġini, li jfisser li m'għandek bżonn tgħabbihom xejn. F'kompjuter b'enerġija baxxa, is-CPU huwa l-konġestjoni, għalhekk il-vantaġġ li tuża kontenituri żgħar huwa ħafna akbar hawn.

Jekk qed tuża GCR, nirrakkomanda ħafna li tuża Google Container Builder (GCB) bħala parti mis-sistema tal-bini tiegħek.

L-aħjar prattiki ta' Kubernetes. Noħolqu kontenituri żgħar

Kif tistgħu taraw, l-użu tiegħu jippermettilek li tikseb riżultati ferm aħjar fit-tnaqqis tat-tul tal-operazzjoni Build+Push minn anke magna produttiva - f'dan il-każ, il-proċess tal-bini u l-bgħit ta 'kontenituri lill-ospitanti huwa aċċellerat bi kważi 2 darbiet . Barra minn hekk, ikollok 120 minuta ta' bini b'xejn kuljum, li jkopri l-bżonnijiet tal-bini tal-kontejners tiegħek f'ħafna każijiet.

Wara tiġi l-metrika tal-prestazzjoni l-aktar importanti - il-veloċità tal-irkupru, jew it-tniżżil, Iġbed kontenituri. U jekk ma jimpurtakx ħafna mill-ħin imqatta 'fuq operazzjoni push, allura t-tul tal-proċess tal-ġibda għandu impatt serju fuq il-prestazzjoni ġenerali tas-sistema. Ejja ngħidu li għandek raggruppament ta 'tliet nodi u wieħed minnhom ifalli. Jekk qed tuża sistema ta 'ġestjoni bħal Google Kubernetes Engine, awtomatikament tissostitwixxi n-nodu mejjet b'wieħed ġdid. Madankollu, dan in-node ġdid se jkun kompletament vojt u jkollok tkaxkar il-kontenituri kollha tiegħek fih biex jibda jaħdem. Jekk l-operazzjoni tal-ġibda tieħu fit-tul biżżejjed, il-cluster tiegħek jaħdem b'rendiment aktar baxx il-ħin kollu.

Hemm ħafna każijiet fejn dan jista 'jiġri: iż-żieda ta' nodu ġdid ma 'cluster, l-aġġornament ta' nodi, jew saħansitra taqleb għal kontenitur ġdid għall-iskjerament. Għalhekk, il-minimizzazzjoni tal-ħin tal-estrazzjoni tal-ġibda ssir fattur ewlieni. Huwa innegabbli li kontenitur żgħir iniżżel ħafna aktar malajr minn wieħed kbir. Jekk qed tħaddem kontenituri multipli fi cluster Kubernetes, l-iffrankar ta 'ħin jista' jkun sinifikanti.

L-aħjar prattiki ta' Kubernetes. Noħolqu kontenituri żgħar

Agħti ħarsa lejn dan il-paragun: operazzjoni ta 'ġibda fuq kontenituri żgħar tieħu 4-9 darbiet inqas ħin, skond il-qawwa tal-magna, mill-istess operazzjoni bl-użu ta' go:onbuild. L-użu ta' immaġini ta' bażi ta' kontenituri żgħar kondiviżi jħaffef b'mod sinifikanti l-ħin u l-veloċità li bihom nodi ġodda ta' Kubernetes jistgħu jiġu skjerati u jiġu online.

Ejja nħarsu lejn il-kwistjoni tas-sigurtà. Kontenituri iżgħar huma kkunsidrati ħafna aktar sikuri minn dawk akbar minħabba li għandhom wiċċ ta 'attakk iżgħar. Huwa tassew? Waħda mill-aktar karatteristiċi utli tal-Google Container Registry hija l-abbiltà li tiskennja awtomatikament il-kontenituri tiegħek għal vulnerabbiltajiet. Ftit xhur ilu ħloqt kemm kontenituri onbuild kif ukoll multistage, allura ejja naraw jekk hemmx xi vulnerabbiltajiet hemmhekk.

L-aħjar prattiki ta' Kubernetes. Noħolqu kontenituri żgħar

Ir-riżultat huwa tal-għaġeb: instabu 3 vulnerabbiltajiet medji biss f'kontenitur żgħir, u 16-il vulnerabbiltà kritika u 376 vulnerabilità oħra nstabu f'kontenitur kbir. Jekk inħarsu lejn il-kontenut ta 'kontenitur kbir, nistgħu naraw li ħafna mill-problemi tas-sigurtà m'għandhom x'jaqsmu xejn mal-applikazzjoni tagħna, iżda huma relatati ma' programmi li lanqas biss nużaw. Allura meta n-nies jitkellmu dwar wiċċ kbir ta 'attakk, dan huwa dak li jfissru.

L-aħjar prattiki ta' Kubernetes. Noħolqu kontenituri żgħar

It-teħid huwa ċar: ibni kontenituri żgħar għax jipprovdu prestazzjoni reali u benefiċċji tas-sigurtà lis-sistema tiegħek.

L-aħjar prattiki ta' Kubernetes. Organizzazzjoni ta' Kubernetes bi namespace

Xi reklami 🙂

Grazzi talli bqajt magħna. Tħobb l-artikoli tagħna? Trid tara aktar kontenut interessanti? Appoġġuna billi tagħmel ordni jew tirrakkomanda lill-ħbieb, Cloud VPS għall-iżviluppaturi minn $4.99, analogu uniku ta 'servers ta' livell ta 'dħul, li ġie ivvintat minna għalik: Il-verità kollha dwar VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps minn $19 jew kif taqsam server? (disponibbli b'RAID1 u RAID10, sa 24 core u sa 40GB DDR4).

Dell R730xd 2 darbiet orħos fiċ-ċentru tad-dejta Equinix Tier IV f'Amsterdam? Hawn biss 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV minn $199 fl-Olanda! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - minn $99! Aqra dwar Kif tibni l-infrastruttura corp. klassi bl-użu ta 'servers Dell R730xd E5-2650 v4 li jiswew 9000 ewro għal ċenteżmu?

Sors: www.habr.com

Żid kumment