Parimad Kubernetes'i praktikad. VĂ€ikeste konteinerite loomine

Parimad Kubernetes'i praktikad. VĂ€ikeste konteinerite loomine

Esimene samm Kubernetes'is juurutamisel on teie rakenduse paigutamine konteinerisse. Selles sarjas vaatleme, kuidas luua vÀikese ja turvalise konteineri pilti.
Dockeri abil pole konteineri piltide loomine kunagi olnud nii lihtne. MÀÀrake pÔhijoon ja lisage oma muudatused ning looge konteiner.

Parimad Kubernetes'i praktikad. VĂ€ikeste konteinerite loomine

Kuid kuigi see meetod sobib suurepÀraselt alustamiseks, vÔivad vaikesed pÔhifotod tuua kaasa suurte haavatavate piltide kasutamise, mis on tÀis turvaprobleeme.

Enamik Docker'i pilte kasutavad peamiseks pildiks Debianit vĂ”i Ubuntu't, ja kuigi see tagab suurepĂ€rase ĂŒhilduvuse ja lihtsa kohandamise (Docker'i fail vajab ainult kahte koodirida), vĂ”ivad pĂ”hifotod lisada teie konteinerisse sadu megabaite tĂ€iendavat koormust. NĂ€iteks lihtne node.js rakenduse Go fail "hello-world" kaalub umbes 700 megabaiti, samas kui teie rakenduse suurus on vaid paar megabaiti.

Parimad Kubernetes'i praktikad. VĂ€ikeste konteinerite loomine

Seega on kogu see tĂ€iendav koormus digitaalruumi raiskamine ning suurepĂ€rane peidukoht haavatavuste ja turvakĂŒsimuste jaoks. SeetĂ”ttu vaatame kaht viisi konteineri pildi suuruse vĂ€hendamiseks.

Esimene on vÀikese suurusega pÔhifotode kasutamine, teine on Builder Patterni kujunduspahenduse kasutamine. VÀiksemate pÔhifotode kasutamine on tÔenÀoliselt kÔige lihtsam viis teie konteineri suuruse vÀhendamiseks. TÔenÀoliselt pakub teie kasutatav keel vÔi virn rakenduse originaalpildi, mis on palju vÀiksem kui vaikepilt. Vaatame meie node.js konteinerit.

Parimad Kubernetes'i praktikad. VĂ€ikeste konteinerite loomine

Vaikimisi on Dockeri baasimage'i node:8 suurus 670 MB ja image'i node:8-alpine suurus vaid 65 MB, mis on kĂŒmme korda vĂ€iksem. Kasutades vĂ€iksemat Alpine'i baasimage'i, vĂ€hendate oluliselt oma konteineri suurust. Alpine on vĂ€ike ja kerge Linuxi distributsioon, mis on Dockeri kasutajate seas vĂ€ga populaarne, kuna see on ĂŒhilduv paljude rakendustega, sĂ€ilitades samas konteinerite vĂ€ikese suuruse. Erinevalt tavalistest Dockeri image'itest

Et minna vÀiksemale baasimage'ile, vÀrskendage lihtsalt Dockeri faili, et alustada uue baasimage'iga:

Parimad Kubernetes'i praktikad. VĂ€ikeste konteinerite loomine

NĂŒĂŒd, erinevalt vanast onbuild image'ist, peate oma koodi konteinerisse kopeerima ja kĂ”ik sĂ”ltuvused installima. Uus Dockeri fail algab image'iga node:alpine, seejĂ€rel loob koodile katalooge, installib sĂ”ltuvused NPM-i pakettihalduri abil ja lĂ”puks kĂ€ivitab server.js.

Parimad Kubernetes'i praktikad. VĂ€ikeste konteinerite loomine

Selle uuenduse abil saadakse kĂŒmme korda vĂ€iksema suurusega konteiner. Kui teie programmeerimiskeel vĂ”i tehnoloogia ei toeta baasimage'i vĂ€hendamise funktsiooni, kasutage Alpine Linuxi. See annab ka vĂ”imaluse tĂ€ielikult hallata konteineri sisu. VĂ€ikese suurusega baasimage'ide kasutamine on suurepĂ€rane viis vĂ€ikeste konteinerite kiireks loomiseks. Kuid veelgi suurema vĂ€hendamise saavutamiseks vĂ”ib kasutada Builder Pattern'i.

Parimad Kubernetes'i praktikad. VĂ€ikeste konteinerite loomine

TÔlgitud keeltes edastatakse lÀhtekood kÔigepealt tÔlkijale ja seejÀrel tÔeliselt kÀivitatakse. Kompileeritavatest keeltest muudetakse lÀhtekood esmalt kompileeritud koodiks. Samas kasutab kompileerimine sageli tööriistu, mida tegelikult koodi kÀivitamiseks ei vajata. See tÀhendab, et saate need tööriistad lÔplikust konteinerist tÀielikult eemaldada. Selleks vÔib kasutada Builder Pattern'it.

Parimad Kubernetes'i praktikad. VĂ€ikeste konteinerite loomine

Kood luuakse esimeses konteineris ja kompileeritakse. SeejÀrel pakitakse kompileeritud kood lÔplikku konteinerisse ilma kompilaatorite ja tööriistadeta, mis on vajalikud selle koodi kompileerimiseks. Vaatame seda protsessi lÀbi Go rakenduse. Esiteks, liigume onbuild image'ilt Alpine Linuxile.

Parimad Kubernetes'i praktikad. VĂ€ikeste konteinerite loomine

Uues Docker-failis algab konteiner pildist golang:alpine. SeejÀrel loob ta katalooge koodi jaoks, kopeerib sinna lÀhtekoodi, ehitab selle ja kÀivitab rakenduse. See konteiner on oluliselt vÀiksem kui onbuild konteiner, kuid see sisaldab siiski kompilaatorit ja teisi Go tööriistu, mis meid tegelikult ei huvita. Seega laseme lihtsalt kompileeritud programmi vÀlja ja pakime selle enda konteinerisse.

Parimad Kubernetes'i praktikad. VĂ€ikeste konteinerite loomine

VÔite mÀrgata midagi kummalist selles Docker-failis: see sisaldab kahte FROM rida. Esimene neljast reast nÀeb vÀlja just nagu eelmine Docker-fail, vÀlja arvatud see, et see kasutab mÀrksÔna AS, et nimetada seda etappi. JÀrgmises osas on uus FROM rida, mis vÔimaldab alustada uut pilti, kasutades alusena mitte golang:alpine, vaid Raw alpine.

Raw Alpine Linuxil ei ole peale installitud SSL-sertifikaate, mis toob kaasa enamikus API-ĂŒhendustes HTTPS-protokolli tĂ”rke, seega laseme installida mĂ”ned juure CA-sertifikaadid.

Ja nĂŒĂŒd kĂ”ige huvitavam: kompileeritud koodi kopeerimiseks esimesest konteinerist teise vĂ”ime lihtsalt kasutada COpy kĂ€sku, mis asub teises jaotises 5. reas. See kopeerib ainult ĂŒhe rakenduse faili ega puuduta Go tööriistu. Uus mitmeastmeline Docker-fail sisaldab konteineri pilti, mille suurus on vaid 12 megabaiti, kuigi algse konteineri pilt oli 700 megabaiti, mis on suur vahe!
Seega on vÀikeste aluskujutiste ja Builder Pattern'i kasutamine suurepÀrased viisid konteinerite loomiseks, mille suurus on oluliselt vÀiksem ilma palju vaeva nÀgemata.
VĂ”ib-olla sĂ”ltuvalt rakenduse tehnoloogiapakist on ka tĂ€iendavaid viise, kuidas pilti ja konteineri suurust vĂ€hendada, kuid kas tĂ”eliselt vĂ€ikesed konteinerid pakuvad mÔÔdetavat eelist? Vaadakem kaht aspekti, kus vĂ€ikesed konteinerid on ÀÀrmiselt tĂ”husad – need on jĂ”udlus ja turvalisus.

Selleks, et hinnata jÔudluse kasvu, vaatleme konteineri loomise, selle registrisse panemise (push) ja sealt eemaldamise (pull) protsessi kestvust. NÀete, et vÀiksema suurusega konteineril on ilmne eelis suurema konteineri ees.

Parimad Kubernetes'i praktikad. VĂ€ikeste konteinerite loomine

Docker teeb kihtide vahemĂ€llu salvestamise, seega jĂ€rgnevate kogumiste tegemine toimub vĂ€ga kiiresti. Kuid paljudes CI-sĂŒsteemides, mida kasutatakse konteinerite kogumiseks ja testimiseks, kihte ei vahemĂ€lustata, mis tĂ€hendab, et siin on mĂ€rkimisvÀÀrne aja kokkuhoid. Nagu nĂ€ete, kestab suure konteineri koostamise aeg sĂ”ltuvalt teie masina vĂ”imsusest 34 kuni 54 sekundit, samas kui vĂ€iksemate konteinerite kasutamisel, mis on vĂ€hendatud Builder Patterniga, kestab see 23 kuni 28 sekundit. Sellise tĂŒĂŒpi operatsioonide korral on jĂ”udluse kasvu mÀÀr 40-50%. Niisiis, mĂ”elge lihtsalt, kui tihti te oma koodi loote ja testite.

PĂ€rast konteineri koostamist peate konteineri pildi (push container image) konteineriregistrisse panema, et saaksite seda hiljem kasutada oma Kubernetes'i klastris. Soovitan kasutada Google'i konteineriregistrit.

Parimad Kubernetes'i praktikad. VĂ€ikeste konteinerite loomine

Kasutades Google Container Registry (GCR), maksate ainult „toore“ salvestuse ja vĂ”rgu eest, lisatasu konteinerite haldamise eest ei kĂŒsita. See on konfidentsiaalne, turvaline ja vĂ€ga kiire. GCR kasutab paljusid nippe, et kiirendada pull-operatsiooni. Nagu nĂ€ete, kestab Docker Container Image'i pildi panemine kasutades go:onbuild olenevalt arvuti jĂ”udlusest 15 kuni 48 sekundit, samas kui sama operatsioon vĂ€iksema konteineri puhul kestab 14 kuni 16 sekundit, kusjuures madalama jĂ”udlusega masinate puhul suureneb kiirus kolm korda. Suuremate masinate puhul on aeg enam-vĂ€hem sama, kuna GCR kasutab globaalseid vahemĂ€lusid ĂŒldiste piltide andmebaasi jaoks, seega ei pea te neid ĂŒldse laadima. Madala jĂ”udlusega arvutis on CPU kitsaskohaks, seega on vĂ€ikeste konteinerite kasutamise eelis palju tuntavam.

Kui kasutate GCR-i, soovitan tungivalt kasutada Google Container Builderit (GCB) osana teie kogumissĂŒsteemist.

Parimad Kubernetes'i praktikad. VĂ€ikeste konteinerite loomine

Nagu nĂ€ha, vĂ”imaldab selle kasutamine saavutada palju paremaid tulemusi Build+Push operatsiooni kestuse vĂ€hendamisel, vĂ”rreldes isegi vĂ”imsa masinaga – sellisel juhul kiireneb konteinerite koostamise ja saatmise protsess peaaegu kaks korda. Lisaks saad iga pĂ€ev 120 minutit tasuta koostamist, mis enamikul juhtudel rahuldab konteinerite loomise vajadusi.

Edasi tuleb kĂ”ige olulisem jĂ”udlusmÔÔdik – konteinerite tĂ”mbamise kiirus. Ja kui sind ei huvita liiga palju push operatsiooni kestus, siis pull protsessi kestus mĂ”jutab tĂ”siselt sĂŒsteemi ĂŒldist jĂ”udlust. Oletame, et sul on kolm sĂ”lme sisaldav klaster ja ĂŒks neist ebaĂ”nnestub. Kui kasutad haldussĂŒsteemi, nagu Google Kubernetes Engine, asendab see automaatselt mittetöötava sĂ”lme uuega. Kuid see uus sĂ”lm on tĂ€iesti tĂŒhi ning pead tĂ”mbama kĂ”ik oma konteinerid, et see hakkaks töötama. Kui pull operatsioon kestab liiga kaua, töötab kogu selle aja su klaster madalama jĂ”udlusega.

On palju olukordi, kus see vÔib juhtuda: see vÔib olla uue sÔlme lisamine klastrisse, sÔlmede vÀrskendamine vÔi isegi uue konteineri vahetamine juurutamiseks. SeetÔttu on pull tÔmbamisaega minimeerimine vÔtmetegur. Kindel on see, et vÀike konteiner laetakse alla palju kiiremini kui suur. Kui kasutad Kuberneteses mitut konteinerit, vÔib ajakulu olla vÀga mÀrkimisvÀÀrne.

Parimad Kubernetes'i praktikad. VĂ€ikeste konteinerite loomine

Vaata antud vÔrdlust: pull operatsioon vÀikeste konteineritega vÔtab sÔltuvalt masina vÔimsusest 4-9 korda vÀhem aega kui sama operatsioon go:onbuild kasutamisel. VÀikese suurusega jagatud aluspiltide kasutamine kiirendab oluliselt aega ja kiirus, millega uued Kuberneteses sÔlmed saavad juurutada ja internetti siseneda.

Vaatame turvalisuse kĂŒsimust. Arvatakse, et vĂ€iksemad konteinerid on palju turvalisemad kui suured, kuna nende rĂŒnnakupind on vĂ€iksem. Kas see tĂ”esti nii on? Üks Google Container Registry'i kasulikumaid funktsioone on vĂ”imalus automaatselt skaneerida teie konteinereid haavatavuste olemasolu osas. MĂ”ni kuu tagasi lĂ”in nii onbuild kui ka mitmeastmelisi anumaid, nii et vaatame, kas seal on mĂ”ni haavatav koht.

Parimad Kubernetes'i praktikad. VĂ€ikeste konteinerite loomine

Tulemus on tĂ€helepanuvÀÀrne: vĂ€ikestes konteinerites leiti vaid 3 keskmist haavatavust, samas kui suurtes — 16 kriitilist ja 376 muud haavatavust. Kui vaadata suurte konteinerite sisu, on selge, et enamus turvaprobleeme ei ole seotud meie rakendusega, vaid programmidega, mida me isegi ei kasuta. Seega, kui inimesed rÀÀgivad suurest rĂŒnnakupinnast, mĂ”tlevad nad just sellele.

Parimad Kubernetes'i praktikad. VĂ€ikeste konteinerite loomine

JĂ€reldus on selge: looge vĂ€ikeseid konteinereid, kuna need pakuvad reaalseid eeliseid teie sĂŒsteemi jĂ”udluses ja turvalisuses.

Kubernetes'i parimad tavad. Kubernetes'i korraldamine nimede ruumi abil

MĂ€ngi videot

Veidi reklaami 🙂

AitÀh, et olete meiega. Kas teile meeldivad meie artiklid? Kas soovite nÀha rohkem huvitavat sisu? Toetage meid, tellides teenuse vÔi soovitades meid tuttavatele. Pilve VPS arendajatele alates $4.99, ainulaadne entry-level 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 jagada serverit Ôigesti? (saadaval RAID1 ja RAID10 variandid, kuni 24 tuuma ja kuni 40GB DDR4).

Dell R730xd on Equinixi Tier IV andmekeskuses Amsterdamis kaks korda odavam? Ainult meie juures 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TB alates $199 Hollandis! Dell R420 — 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB — alates $99! Lugege sellest Kuidas luua ettevĂ”tte tasemel infrastruktuuri, kasutades Dell R730xd E5-2650 v4 servereid, mille hind on 9000 eurot, taskukohase hinna eest?

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster