Kubernetesi parimad praktikad. VĂ€ikeste konteinerite loomine

Kubernetesi parimad praktikad. VĂ€ikeste konteinerite loomine

Kubernetesi esmane juurutamine hÔlmab teie rakenduse paigutamist konteinerisse. Selles seerias uurime, kuidas luua vÀikese ja turvalise konteineri pilti.
Docker'i kaudu on konteinerite piltide loomine kunagi olnud nii lihtne. MÀÀrake aluskuju, lisage oma muudatused ja looge konteiner.

Kubernetesi parimad praktikad. VĂ€ikeste konteinerite loomine

Kuigi see meetod sobib suurepÀraselt alustamiseks, vÔib vaikimisi aluskujudega töötamine pÔhjustada suures suuruses piltide ebaturvalist kasutamist, mis on tÀis haavatavusi.

Lisaks kasutavad enamik Docker'i pilte alusena Debianit vĂ”i Ubuntut, ja kuigi see tagab suurepĂ€rase ĂŒhilduvuse ja lihtsa kohandamise (Docker'i fail hĂ”lmab vaid kahte koodirea), vĂ”ivad aluskujud lisada teie konteinerisse sadu megabaite lisakoormust. NĂ€iteks lihtne Node.js rakenduse Go 'hello-world' fail vĂ”tab umbes 700 megabaiti, samas kui teie rakenduse tegelik suurus on vaid paar megabaiti.

Kubernetesi parimad praktikad. VĂ€ikeste konteinerite loomine

Seega on kogu see lisakoormus digitaalsete ruumide tarbetu kulu ja suurepÀrane peidupaik haavatavuste ja turvavea jaoks. Vaatame seetÔttu kahte viisi, kuidas konteineri suurust vÀhendada.

Esiteks – kasutada vĂ€ikese suurusega aluspilte, teiseks – rakendada Builder Pattern projekteerimismustrit. VĂ€iksemate aluspiltide kasutamine on tĂ”enĂ€oliselt kĂ”ige lihtsam viis teie konteineri suuruse vĂ€hendamiseks. TĂ”enĂ€oliselt pakub teie kasutatav keel vĂ”i tehnoloogiakogum algset rakenduspilti, mis on oluliselt vĂ€iksem kui vaikimisi pilt. Vaadakem meie node.js konteinerit.

Kubernetesi parimad praktikad. VĂ€ikeste konteinerite loomine

Vaikimisi on Docker'i baaspildi suurus node:8 670 MB ning node:8-alpine'i suurus vaid 65 MB, mis tĂ€hendab, et see on 10 korda vĂ€iksem. Kasutades vĂ€iksemat Alpine'i baaspilti, vĂ€hendate erhebalt oma konteineri suurust. Alpine on vĂ€ike ja kerge Linuxi distributsioon, mis on Docker'i kasutajate seas vĂ€ga populaarne, sest see on ĂŒhilduv paljude rakendustega ning samal ajal sĂ€ilitab vĂ€ikese konteineri suuruse. Erinevalt standardsetest Docker'i piltidest nagu „node”, eemaldab „node:alpine” palju teenusefaile ja programme, jĂ€ttes alles vaid need, mis on vajalikud teie rakenduse kĂ€ivitamiseks.

Smaller base image'e kasutamiseks vÀrskendage lihtsalt Docker-faili, et alustada uue baaspildiga:

Kubernetesi parimad praktikad. VĂ€ikeste konteinerite loomine

NĂŒĂŒd, erinevalt vanast onbuild pildist, peate oma koodi konteinerisse kopeerima ja kĂ”ik sĂ”ltuvused paigaldama. Uues Docker-failis algab konteiner node:alpine pildist, seejĂ€rel loob kausta koodi, installib sĂ”ltuvused NPM-i pakihaldusega ja lĂ”puks kĂ€ivitab server.js.

Kubernetesi parimad praktikad. VĂ€ikeste konteinerite loomine

Selle uuenduse abil saab konteineri kĂŒmme korda vĂ€iksemaks. Kui teie programmeerimiskeel vĂ”i tehnoloogia virn ei toeta pĂ”hipildi vĂ€hendamist, kasutage Alpine Linuxi. See annab ka tĂ€ieliku kontrolli konteineri sisu ĂŒle. VĂ€ikeste pĂ”hi­piltide kasutamine on suurepĂ€rane viis vĂ€ikeste konteinerite kiireks loomiseks. Kuid veelgi suuremat vĂ€hendust on vĂ”imalik saavutada, kasutades Builder Pattern'i.

Kubernetesi parimad praktikad. VĂ€ikeste konteinerite loomine

TÔlgitavates keeltes edastatakse lÀhtekood esmalt tÔlkijale ja seejÀrel tÀidetakse. Kompileeritavates keeltes muudetakse lÀhtekood eelnevalt kompileeritud koodiks. Samuti kasutab kompileerimine sageli tööriistu, mis ei ole koodi kÀivitamiseks tegelikult vajalikud. See tÀhendab, et saate need tööriistad finaliseerimisest tÀielikult eemaldada. Selleks vÔib kasutada Builder Pattern'i.

Kubernetesi parimad praktikad. VĂ€ikeste konteinerite loomine

Kood genereeritakse esimeses konteineris ja kompileeritakse. SeejĂ€rel pakitakse kompileeritud kood lĂ”ppkonteinerisse, millel puuduvad kompilaatorid ja tööriistad, mis on vajalikud selle koodi kompileerimiseks. Vaatame nĂŒĂŒd seda protsessi lĂ€bi Go rakenduse. Esiteks liigume onbuild pildilt Alpine Linuxi.

Kubernetesi parimad praktikad. VĂ€ikeste konteinerite loomine

Uues Docker failis algab konteiner golang:alpine pildiga. See loob seejÀrel katalooge koodi jaoks, kopeerib selle lÀhtekoodi sisse, kompileerib selle ja kÀivitab rakenduse. See konteiner on palju vÀiksem kui onbuild konteiner, kuid sisaldab endiselt kompilaatorit ja muid Go tööriistu, mis me tegelikult ei vaja. Seega, vÔtame lihtsalt kompileeritud programmi ja paneme selle omaenda konteinerisse.

Kubernetesi parimad praktikad. VĂ€ikeste konteinerite loomine

VÔite mÀrgata midagi kummalist selles Docker-failis: sellel on kaks FROM rida. Esimene osa neljast reast nÀeb vÀlja tÀpselt nagu eelmine Docker-fail, vÀlja arvatud see, et see kasutab AS vÔtit, et sellele etapile nimi anda. JÀrgmises osas on uus FROM rida, mis vÔimaldab alustada uut pilti, kasutades pÔhiosana Raw alpine'i, mitte golang:alpine'i.

Raw Alpine Linuxil ei ole mingeid SSL-sertifikaate installitud, mis pÔhjustab enamiku API HTTPS-protokolli kÔnede ebaÔnnestumise, seega laseme installida mÔned juure CA sertifikaadid.

Ja nĂŒĂŒd tuleb kĂ”ige huvitavam osa: esimesest konteinerist kompileeritud koodi kopeerimiseks teise vĂ”ib lihtsalt kasutada 5. rea COPY kĂ€sku teises osas. See kopeerib ainult ĂŒhe rakenduse faili ja ei puuduta Go teenindustööriistu. Uus mitmeastmeline Docker-fail sisaldab konteineri pilti, mille suurus on vaid 12 megabaiti, samas kui algne konteineri pilt oli 700 megabaiti, ja see on suur erinevus!
Seega, vÀikeste baasipiltide ja Builder Pattern'i kasutamine on suurepÀrased viisid luua palju vÀiksemaid konteinerite ilma suure töökoormuseta.
SĂ”ltuvalt rakenduste tehnoloogilisest virnast vĂ”ivad olla ka tĂ€iendavad viisid pildi ja konteineri suuruse vĂ€hendamiseks, kuid kas tĂ”esti vĂ€ikestel konteineritel on mÔÔdetav eelis? Vaatame kahte aspekti, kus vĂ€ikesed konteinerid on ÀÀrmiselt tĂ”husad – tootlikkus ja turvalisus.

Tootlikkuse kasvu hindamiseks vaatame konteineri loomise aega, selle registrisse sisestamise (push) ja sealt tĂ”mbamise (pull) kestust. NĂ€ete, et vĂ€iksema suurusega konteineril on ĂŒhemĂ”tteline eelis vĂ”rreldes suurema konteeriga.

Kubernetesi parimad praktikad. VĂ€ikeste konteinerite loomine

Docker cache'ib oma kihte, seega jĂ€rgmised koostamisprotsessid toimuvad vĂ€ga kiiresti. Siiski paljudes CI sĂŒsteemides, mida kasutatakse konteinerite koostamiseks ja testimiseks, kihte ei cache'ita, mistĂ”ttu saavutatakse siin mĂ€rkimisvÀÀrne ajasÀÀst. Nagu nĂ€ha, sĂ”ltub suure konteineri koostamisaeg teie masina vĂ”imsusest ning varieerub 34 kuni 54 sekundi vahel, samas kui Builder Pattern'i abil vĂ€hendatud konteineri koostamisaeg on 23 kuni 28 sekundi vahemikus. Selliste operatsioonide jaoks on jĂ”udluse tĂ”us 40-50%. Seega mĂ”elge lihtsalt, kui mitu korda te oma koodi loote ja testite.

PÀrast konteineri koostamist peate selle pildi sisestama (push container image) konteineriregistrisse, et seejÀrel kasutada seda oma Kubernetes klastris. Soovitan kasutada Google'i konteineriregistrit.

Kubernetesi parimad praktikad. VĂ€ikeste konteinerite loomine

Kasutades Google Container Registry (GCR), maksate ainult „toore“ salvestamise ja vĂ”rgu eest, lisatasu konteinerite haldamise eest ei kĂŒsita. See on konfidentsiaalne, ohutu ja vĂ€ga kiire. GCR kasutab mitmeid nippe, et pull-operatsiooni kiirendada. Nagu nĂ€ete, pildi sisestamine Docker Container Image kasutades go:onbuild sĂ”ltuvalt arvuti jĂ”udlusest vĂ”tab aega 15 kuni 48 sekundit, samas kui sama operatsioon vĂ€iksema konteineriga – 14 kuni 16 sekundit, kusjuures vĂ€hem jĂ”uliste masinate jaoks suureneb operatsiooni kiirus kolm korda. Suurte masinate puhul on aeg enam-vĂ€hem sama, kuna GCR kasutab globaalset vahemĂ€lu, et jagada pilte, seega ei pea te neid ĂŒldse laadima. Madala jĂ”udlusega arvutis on CPU kitsaskohaks, seega on vĂ€ikeste konteinerite kasutamise eelised siin palju tuntavamad.

Kui kasutate GCR-i, soovitan tungivalt kasutada Google Container Builder (GCB) osana oma koostesĂŒsteemist.

Kubernetesi parimad praktikad. VĂ€ikeste konteinerite loomine

Nagu nĂ€ete, vĂ”imaldab selle kasutamine saavutada palju paremaid tulemusi Build+Push operatsiooni kestuse vĂ€hendamises kui isegi vĂ”imsal masinal – sel juhul kiireneb konteinerite loomise ja saatmise protsess peaaegu kahe korra. Lisaks saate iga pĂ€ev 120 minutit tasuta ehitamist, mis enamasti rahuldab konteinerite loomise vajadusi.

Edasi liikudes on kĂ”ige olulisem jĂ”udlusnĂ€itaja – konteinerite Pull allalaadimiskiirus. Ja kui te ei muretse liiga palju push operatsiooni aja pĂ€rast, siis pull protsessi kestus mĂ”jutab tĂ”siselt sĂŒsteemi ĂŒldist jĂ”udlust. Oletame, et teil on kolm sĂ”lme sisaldav klaster ja ĂŒks neist ebaĂ”nnestub. Kui kasutate haldussĂŒsteemi, nagu Google Kubernetes Engine, asendab see automaatselt rikki lĂ€inud sĂ”lme uuega. Kuid see uus sĂ”lm on tĂ€iesti tĂŒhi, ja te peate kaaluma, kuidas sinna kĂ”ik teie konteinerid tĂ”sta, et see hakkaks tööle. Kui pull operatsioon kestab liiga kaua, töötab kogu see aeg teie klaster madalama tootlikkusega.

On olemas palju olukordi, kui selline asi vĂ”ib juhtuda: see vĂ”ib olla uue sĂ”lme lisamine klastrisse, sĂ”lmede uuendamine vĂ”i isegi uuele konteinerile ĂŒleminek. SeetĂ”ttu muutub pull-aegade minimeerimine vĂ”tmeteguriks. On vaieldamatu, et vĂ€ike konteiner laetakse alla palju kiiremini kui suur. Kui kasutate Kuberneteses mitmeid konteinerid, vĂ”ib ajasÀÀst olla tĂ”eliselt oluline.

Kubernetesi parimad praktikad. VĂ€ikeste konteinerite loomine

Vaadake allolevat vĂ”rdlust: pull-operatsioon vĂ€ikeste konteinerite korral vĂ”tab sĂ”ltuvalt masina vĂ”imsusest 4–9 korda vĂ€hem aega vĂ”rreldes sama operatsiooniga, kasutades go:onbuild'i. VĂ€ikeste kontseptuaalsete aluskujundite kasutamine kiirendab oluliselt aega ja kiirus, millega uued Kubernetes-sĂ”lmed saavad ĂŒles seatud ja internetti ĂŒhendatud.

Vaatame turvalisuse kĂŒsimust. Arvatakse, et vĂ€iksemad konteinerid on palju turvalisemad kui suured, kuna neil on vĂ€iksem rĂŒnnakupind. Kas see on tĂ”si? Üks Google Container Registry kasulikest funktsioonidest on vĂ”imalus automaatselt skaneerida teie konteinereid haavatavuste suhtes. MĂ”ned kuud tagasi lĂ”in nii onbuild kui ka mitmeastmelised konteinerid, nii et vaatame, kas seal on mingeid haavatavusi.

Kubernetesi parimad praktikad. VĂ€ikeste konteinerite loomine

Tulemus on hĂ€mmastav: vĂ€iksemas konteineris leiti vaid 3 keskmist haavatavust, samas kui suures on 16 kriitilist ja 376 muud haavatavust. Kui vaadata suures konteineris olevaid komponente, on nĂ€ha, et enamik turvaprobleeme ei ole seotud meie rakendusega, vaid programmidega, mida me isegi ei kasuta. SeetĂ”ttu, kui inimesed rÀÀgivad suurest rĂŒnnakupinnast, peavad nad silmas just seda.

Kubernetesi parimad praktikad. VĂ€ikeste konteinerite loomine

KokkuvĂ”te on selge: looge vĂ€ikseid konteinerid, sest need pakuvad teie sĂŒsteemi tĂ”husust ja turvalisust.

Kubernetesi parimad praktikad. Kubernetesi korraldamine nimespetsiifiliste ruumide abil

Vaata videot

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. pilve VPS arendajatele alates $4,99, ainulaadne sisenemise taseme serverite analoog, mille oleme teie jaoks vĂ€lja mĂ”elnud: Kogu tĂ”de VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps alates $19 vĂ”i kuidas Ă”ieti serverit jagada? (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 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TB alates $199 Hollandi turul! Dell R420 — 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB — alates $99! Lugege, kuidas Luua ettevĂ”tte tasemel infrastruktuur Dell R730xd E5-2650 v4 serveritega, mille hind on 9000 eurot, madala hinnaga?

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster