Kubernetes Beste Praktyke. Skep van klein houers

Kubernetes Beste Praktyke. Skep van klein houers

Die eerste stap van ontplooiing na Kubernetes is om jou toepassing in 'n houer te plaas. In hierdie reeks sal ons kyk hoe jy 'n klein, veilige houerbeeld kan skep.
Danksy Docker was die skep van houerbeelde nog nooit so maklik nie. Spesifiseer 'n basisprent, voeg jou veranderinge by en skep 'n houer.

Kubernetes Beste Praktyke. Skep van klein houers

Alhoewel hierdie tegniek ideaal is om aan die gang te kom, kan die gebruik van standaardbasisbeelde lei tot onveilige werk met groot beelde vol kwesbaarhede.

Daarbenewens gebruik die meeste beelde in Docker Debian of Ubuntu vir die basisbeeld, en hoewel dit uitstekende versoenbaarheid en maklike aanpassing bied ('n Docker-lêer neem slegs twee reëls kode), kan basisbeelde honderde megagrepe se bykomende vrag by jou houer voeg. Byvoorbeeld, 'n eenvoudige node.js-lêer vir 'n Go "hallo-wêreld"-toepassing is ongeveer 700 megagrepe, terwyl jou werklike toepassing slegs 'n paar megagrepe groot is.

Kubernetes Beste Praktyke. Skep van klein houers

So al hierdie ekstra werklading is 'n vermorsing van digitale ruimte en 'n wonderlike wegkruipplek vir sekuriteitskwesbaarhede en foute. Kom ons kyk dus na twee maniere om die grootte van 'n houerbeeld te verklein.

Die eerste is die gebruik van klein basisbeelde, die tweede is die gebruik van die bouerpatroon. Die gebruik van kleiner basisbeelde is waarskynlik die maklikste manier om die grootte van jou houer te verklein. Waarskynlik, die taal of stapel wat jy gebruik bied 'n oorspronklike toepassingsbeeld wat baie kleiner is as die verstekprent. Kom ons kyk na ons node.js-houer.

Kubernetes Beste Praktyke. Skep van klein houers

By verstek in Docker is die nodus: 8-basisbeeldgrootte 670 MB, en die nodus: 8-alpiene beeldgrootte is slegs 65 MB, dit wil sê 10 keer kleiner. Deur die kleiner Alpynse basisbeeld te gebruik, sal jy die grootte van jou houer aansienlik verminder. Alpine is 'n klein en liggewig Linux-verspreiding wat baie gewild is onder Docker-gebruikers omdat dit versoenbaar is met baie toepassings terwyl houers klein gehou word. Anders as die standaard Docker "node"-beeld, verwyder "node:alpine" baie dienslêers en programme, wat net die oorbly wat voldoende is om jou toepassing te laat loop.

Om na 'n kleiner basisprent te skuif, werk eenvoudig die Dockerfile op om met die nuwe basisprent te begin werk:

Kubernetes Beste Praktyke. Skep van klein houers

Nou, anders as die ou onbuild-beeld, moet jy jou kode in die houer kopieer en enige afhanklikhede installeer. In 'n nuwe Dockerfile begin die houer met 'n node:alpine-beeld, skep dan 'n gids vir die kode, installeer afhanklikhede deur die NPM-pakketbestuurder te gebruik, en laat uiteindelik server.js loop.

Kubernetes Beste Praktyke. Skep van klein houers

Hierdie opgradering lei tot 'n houer wat 10 keer kleiner in grootte is. As jou programmeertaal of stapel nie basiese beeldreduksie-funksionaliteit het nie, gebruik Alpine Linux. Dit sal ook die vermoë bied om die inhoud van die houer volledig te bestuur. Die gebruik van klein basis beelde is 'n goeie manier om vinnig klein houers te skep. Maar selfs groter vermindering kan bereik word deur die bouerpatroon te gebruik.

Kubernetes Beste Praktyke. Skep van klein houers

In geïnterpreteerde tale word die bronkode eers aan die tolk deurgegee en dan direk uitgevoer. In saamgestelde tale word die bronkode eers in saamgestelde kode omgeskakel. Samestelling gebruik egter dikwels gereedskap wat nie eintlik nodig is om die kode uit te voer nie. Dit beteken dat jy hierdie gereedskap heeltemal uit die finale houer kan verwyder. Jy kan Builder Pattern hiervoor gebruik.

Kubernetes Beste Praktyke. Skep van klein houers

Die kode word in die eerste houer geskep en saamgestel. Die saamgestelde kode word dan in 'n finale houer verpak sonder die samestellers en gereedskap wat nodig is om daardie kode saam te stel. Kom ons voer 'n Go-toepassing deur hierdie proses. Eerstens sal ons van die onbuild-beeld na Alpine Linux beweeg.

Kubernetes Beste Praktyke. Skep van klein houers

In die nuwe Dockerfile begin die houer met 'n golang: alpine beeld. Dit skep dan 'n gids vir die kode, kopieer dit in die bronkode, bou daardie bronkode en laat die toepassing loop. Hierdie houer is baie kleiner as die onbuild-houer, maar dit bevat steeds die samesteller en ander Go-nutsgoed wat ons nie regtig nodig het nie. So kom ons haal net die saamgestelde program uit en sit dit in sy eie houer.

Kubernetes Beste Praktyke. Skep van klein houers

Jy mag dalk iets vreemds in hierdie Docker-lêer opmerk: dit bevat twee FROM-reëls. Die eerste 4 reëlafdeling lyk presies dieselfde as die vorige Dockerfile, behalwe dat dit die AS-sleutelwoord gebruik om hierdie stadium te noem. Die volgende afdeling het 'n nuwe FROM-reël om 'n nuwe prent te begin, waar ons in plaas van die golang:alpine-beeld Raw alpine as die basisprent sal gebruik.

Raw Alpine Linux het geen SSL-sertifikate geïnstalleer nie, wat sal veroorsaak dat die meeste API-oproepe oor HTTPS misluk, so kom ons installeer 'n paar wortel CA-sertifikate.

Nou kom die prettige deel: om die saamgestelde kode van die eerste houer na die tweede te kopieer, kan jy eenvoudig die COPY-opdrag wat op reël 5 van die tweede afdeling geleë is, gebruik. Dit sal net een toepassingslêer kopieer en sal nie Go-nutsmiddels beïnvloed nie. Die nuwe multi-stadium Docker-lêer sal 'n houerbeeld bevat wat slegs 12 megagrepe groot is, in vergelyking met die oorspronklike houerprent wat 700 megagrepe was, wat 'n groot verskil is!
Die gebruik van klein basisbeelde en bouerpatroon is dus goeie maniere om baie kleiner houers te skep sonder baie werk.
Dit is moontlik dat, afhangende van die toepassingsstapel, daar bykomende maniere is om beeld en houergrootte te verminder, maar het klein houers werklik 'n meetbare voordeel? Kom ons kyk na twee areas waar klein houers uiters doeltreffend is – werkverrigting en sekuriteit.

Om die prestasieverhoging te evalueer, oorweeg die duur van die proses om 'n houer te skep, dit in die register in te voeg (stoot), en dan van daar af te haal (trek). Jy kan sien dat 'n kleiner houer 'n duidelike voordeel bo 'n groter houer het.

Kubernetes Beste Praktyke. Skep van klein houers

Docker sal die lae kas, sodat die daaropvolgende bouwerk baie vinnig sal wees. Baie CI-stelsels wat gebruik word om houers te bou en te toets, kas egter nie lae nie, so daar is aansienlike tydbesparings. Soos u kan sien, is die tyd om 'n groot houer te bou, afhangende van die krag van u masjien, van 34 tot 54 sekondes, en wanneer u 'n houer gebruik, verminder dit met die bouerpatroon - van 23 tot 28 sekondes. Vir bedrywighede van hierdie soort sal die produktiwiteitsverhoging 40-50% wees. Dink dus net aan hoeveel keer jy jou kode bou en toets.

Nadat die houer gebou is, moet jy sy prent (druk houerbeeld) in die houerregister druk sodat jy dit dan in jou Kubernetes-kluster kan gebruik. Ek beveel aan om Google Container Registry te gebruik.

Kubernetes Beste Praktyke. Skep van klein houers

Met Google Container Registry (GCR) betaal jy net vir rou berging en netwerk, en daar is geen bykomende houerbestuursfooie nie. Dit is privaat, veilig en baie vinnig. GCR gebruik baie truuks om die trekoperasie te bespoedig. Soos u kan sien, sal die inbring van 'n Docker Container Image-houer met go:onbuild van 15 tot 48 sekondes neem, afhangend van die rekenaarwerkverrigting, en dieselfde bewerking met 'n kleiner houer sal van 14 tot 16 sekondes neem, en vir minder produktiewe masjiene die voordeel in die werkspoed verhoog met 3 keer. Vir groter masjiene is die tyd omtrent dieselfde, aangesien GCR 'n globale kas gebruik vir 'n gedeelde databasis van beelde, wat beteken dat jy dit glad nie hoef te laai nie. In 'n lae-krag rekenaar is die SVE die bottelnek, so die voordeel van die gebruik van klein houers is hier baie groter.

As jy GCR gebruik, beveel ek sterk aan om Google Container Builder (GCB) as deel van jou boustelsel te gebruik.

Kubernetes Beste Praktyke. Skep van klein houers

Soos u kan sien, stel die gebruik daarvan u in staat om baie beter resultate te behaal om die duur van die Build+Push-operasie te verminder as selfs 'n produktiewe masjien - in hierdie geval word die proses om houers te bou en na die gasheer te stuur met byna 2 keer versnel. . Boonop kry u elke dag 120 gratis bouminute, wat in die meeste gevalle u houerboubehoeftes dek.

Vervolgens kom die belangrikste prestasiemaatstaf – die spoed van die herwinning of aflaai van trekhouers. En as jy nie veel omgee vir die tyd wat aan 'n drukoperasie spandeer word nie, dan het die lengte van die trekproses 'n ernstige impak op die algehele stelselwerkverrigting. Kom ons sê jy het 'n groep van drie nodusse en een van hulle misluk. As jy 'n bestuurstelsel soos Google Kubernetes Engine gebruik, sal dit outomaties die dooie nodus met 'n nuwe een vervang. Hierdie nuwe nodus sal egter heeltemal leeg wees en jy sal al jou houers daarin moet sleep om te begin werk. As die trekoperasie lank genoeg neem, sal jou groep die hele tyd teen laer werkverrigting werk.

Daar is baie gevalle waar dit kan gebeur: die byvoeging van 'n nuwe nodus by 'n kluster, die opgradering van nodusse, of selfs oorskakel na 'n nuwe houer vir ontplooiing. Dus, die vermindering van trek-onttrekkingstyd word 'n sleutelfaktor. Dit is onmiskenbaar dat 'n klein houer baie vinniger aflaai as 'n groot een. As jy veelvuldige houers in 'n Kubernetes-kluster gebruik, kan die tydbesparing aansienlik wees.

Kubernetes Beste Praktyke. Skep van klein houers

Kyk na hierdie vergelyking: 'n trekoperasie op klein houers neem 4-9 keer minder tyd, afhangend van die masjien se krag, as dieselfde bewerking met go:onbuild. Die gebruik van gedeelde, klein houerbasisbeelde versnel aansienlik die tyd en spoed waarteen nuwe Kubernetes-nodusse ontplooi kan word en aanlyn kan kom.

Kom ons kyk na die kwessie van sekuriteit. Kleiner houers word as baie veiliger as groter beskou omdat hulle 'n kleiner aanvaloppervlak het. Is dit regtig? Een van die nuttigste kenmerke van Google Container Registry is die vermoë om jou houers outomaties vir kwesbaarhede te skandeer. 'n Paar maande gelede het ek beide onbuild- en multi-stadium-houers geskep, so kom ons kyk of daar enige kwesbaarhede daar is.

Kubernetes Beste Praktyke. Skep van klein houers

Die resultaat is verstommend: slegs 3 medium kwesbaarhede is in 'n klein houer opgespoor, en 16 kritieke en 376 ander kwesbaarhede is in 'n groot houer gevind. As ons na die inhoud van 'n groot houer kyk, kan ons sien dat meeste van die sekuriteitsprobleme niks met ons toepassing te doen het nie, maar verband hou met programme wat ons nie eens gebruik nie. So wanneer mense praat oor 'n groot aanval oppervlak, dit is wat hulle bedoel.

Kubernetes Beste Praktyke. Skep van klein houers

Die wegneemete is duidelik: bou klein houers omdat dit werklike werkverrigting en sekuriteitsvoordele aan jou stelsel bied.

Kubernetes Beste Praktyke. Kubernetes-organisasie met naamruimte

Sommige advertensies 🙂

Dankie dat jy by ons gebly het. Hou jy van ons artikels? Wil jy meer interessante inhoud sien? Ondersteun ons deur 'n bestelling te plaas of by vriende aan te beveel, wolk VPS vir ontwikkelaars vanaf $4.99, 'n unieke analoog van intreevlakbedieners, wat deur ons vir jou uitgevind is: Die hele waarheid oor VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps vanaf $19 of hoe om 'n bediener te deel? (beskikbaar met RAID1 en RAID10, tot 24 kerne en tot 40 GB DDR4).

Dell R730xd 2x goedkoper in Equinix Tier IV-datasentrum in Amsterdam? Net hier 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV vanaf $199 in Nederland! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - vanaf $99! Lees van Hoe om infrastruktuur korp. klas met die gebruik van Dell R730xd E5-2650 v4-bedieners ter waarde van 9000 XNUMX euro vir 'n sent?

Bron: will.com

Voeg 'n opmerking