Kubernetes beschten Praktiken. Schafen kleng Container

Kubernetes beschten Praktiken. Schafen kleng Container

Den éischte Schrëtt fir op Kubernetes z'installéieren ass Är Applikatioun an engem Container ze setzen. An dëser Serie wäerte mir kucken wéi Dir e klengt, séchert Containerbild erstellt.
Dank Docker war d'Erstelle vu Containerbiller ni méi einfach. Gitt e Basisbild un, füügt Är Ännerungen un a erstellt e Container.

Kubernetes beschten Praktiken. Schafen kleng Container

Och wann dës Technik super ass fir unzefänken, kann d'Benotzung vun Standardbasisbiller zu onsécherer Aarbecht mat grousse Biller voller Schwachstelle féieren.

Zousätzlech benotzen déi meescht Biller am Docker Debian oder Ubuntu fir d'Basisbild, a wärend dëst exzellent Kompatibilitéit an einfach Personnalisatioun ubitt (eng Docker-Datei hëlt nëmmen zwou Zeilen Code), Basisbiller kënnen Honnerte vu Megabytes vun zousätzlech Belaaschtung op Äre Container addéieren. Zum Beispill, eng einfach node.js Datei fir eng Go "Hallo-Welt" Applikatioun ass ongeféier 700 Megabytes, während Är aktuell Applikatioun nëmmen e puer Megabytes grouss ass.

Kubernetes beschten Praktiken. Schafen kleng Container

Also all dës extra Aarbechtsbelaaschtung ass eng Verschwendung vum digitale Raum an eng super Verstoppt Plaz fir Sécherheetsschwieregkeeten a Bugs. Also loosst eis zwee Weeër kucken fir d'Gréisst vun engem Containerbild ze reduzéieren.

Déi éischt ass d'Benotzung vu klenge Basisbiller, déi zweet ass d'Benotzung vum Builder Muster. Mat méi kleng Basisbiller ass wahrscheinlech deen einfachste Wee fir d'Gréisst vun Ärem Container ze reduzéieren. Wahrscheinlech, d'Sprooch oder de Stack, deen Dir benotzt, bitt en originellt Applikatiounsbild dat vill méi kleng ass wéi dat Standardbild. Loosst eis eis node.js Container kucken.

Kubernetes beschten Praktiken. Schafen kleng Container

Par défaut am Docker ass den Node: 8 Basisbildgréisst 670 MB, an den Node: 8-Alpine Bildgréisst ass nëmmen 65 MB, dat heescht 10 Mol méi kleng. Andeems Dir dat méi klengt Alpine Basisbild benotzt, reduzéiert Dir d'Gréisst vun Ärem Container wesentlech. Alpine ass eng kleng a liicht Linux Verdeelung déi ganz populär bei Docker Benotzer ass well et mat villen Uwendungen kompatibel ass wärend Container kleng hält. Am Géigesaz zum Standard Docker "Node" Bild, "Node: alpine" läscht vill Servicedateien a Programmer, a léisst nëmmen déi, déi genuch sinn fir Är Applikatioun ze lafen.

Fir op e méi klengt Basisbild ze réckelen, aktualiséieren einfach den Dockerfile fir mat dem neie Basisbild ze schaffen:

Kubernetes beschten Praktiken. Schafen kleng Container

Elo, am Géigesaz zum alen Onbuild Bild, musst Dir Äre Code an de Container kopéieren an all Ofhängegkeeten installéieren. An enger neier Dockerfile fänkt de Container mat engem Node: alpine Bild un, erstellt dann e Verzeechnes fir de Code, installéiert Ofhängegkeeten mam NPM Package Manager, a leeft endlech Server.js.

Kubernetes beschten Praktiken. Schafen kleng Container

Dës Upgrade resultéiert an engem Container deen 10 Mol méi kleng ass. Wann Är Programméierungssprooch oder Stack keng Basisbildreduktiounsfunktionalitéit huet, benotzt Alpine Linux. Et gëtt och d'Fäegkeet fir den Inhalt vum Container komplett ze managen. Mat klenge Basisbiller ass e super Wee fir séier kleng Container ze kreéieren. Awer nach méi grouss Reduktioun ka mat dem Builder Muster erreecht ginn.

Kubernetes beschten Praktiken. Schafen kleng Container

An interpretéierte Sproochen gëtt de Quellcode fir d'éischt un den Dolmetscher weiderginn an dann direkt ausgefouert. A kompiléierte Sproochen gëtt de Quellcode fir d'éischt a kompiléierte Code ëmgewandelt. Wéi och ëmmer, d'Kompilatioun benotzt dacks Tools déi net tatsächlech gebraucht ginn fir de Code ze lafen. Dëst bedeit datt Dir dës Tools komplett aus dem leschte Container kënnt ewechhuelen. Dir kënnt Builder Muster fir dëst benotzen.

Kubernetes beschten Praktiken. Schafen kleng Container

De Code gëtt am éischte Container erstallt a kompiléiert. De kompiléierte Code gëtt dann an e finalen Container verpackt ouni de Compileren an Tools déi néideg sinn fir dee Code ze kompiléieren. Loosst eis eng Go Applikatioun duerch dëse Prozess lafen. Als éischt wäerte mir vum Onbuild Bild op Alpine Linux réckelen.

Kubernetes beschten Praktiken. Schafen kleng Container

An der neier Dockerfile fänkt de Container mat engem Golang: alpine Bild un. Et erstellt dann e Verzeechnes fir de Code, kopéiert en an de Quellcode, baut dee Quellcode a leeft d'Applikatioun. Dëse Container ass vill méi kleng wéi den onbuild Container, awer et enthält nach ëmmer de Compiler an aner Go Tools déi mir net wierklech brauchen. Also loosst eis just de kompiléierte Programm extrahéieren an an säin eegene Container setzen.

Kubernetes beschten Praktiken. Schafen kleng Container

Dir kënnt eppes komesch an dëser Docker Datei bemierken: et enthält zwou FROM Linnen. Déi éischt 4 Zeil Sektioun gesäit genau d'selwecht aus wéi déi viregt Dockerfile ausser datt et den AS Schlësselwuert benotzt fir dës Bühn ze nennen. Déi nächst Sektioun huet eng nei FROM Linn fir en neit Bild ze starten, wou mir amplaz vum Golang:alpine Bild Raw alpine als Basisbild benotzen.

Raw Alpine Linux huet keng SSL Zertifikater installéiert, wat verursaacht déi meescht API-Uriff iwwer HTTPS versoen, also loosst eis e puer root CA Zertifikater installéieren.

Elo kënnt de Spaass Deel: fir de kompiléierte Code vum éischte Container op den zweeten ze kopéieren, kënnt Dir einfach de COPY Kommando benotzen, deen op der Linn 5 vun der zweeter Sektioun läit. Et kopéiert nëmmen eng Applikatiounsdatei an beaflosst keen Go Utility Tools. Déi nei Multi-Stage Docker-Datei wäert e Containerbild enthalen dat nëmmen 12 Megabyte grouss ass, am Verglach zum Original Container Image dat 700 Megabytes war, wat e groussen Ënnerscheed ass!
Also benotzt kleng Basisbiller a Builder Muster si super Weeër fir vill méi kleng Container ze kreéieren ouni vill Aarbecht.
Et ass méiglech datt ofhängeg vum Applikatiounsstapel zousätzlech Weeër ginn fir Bild- a Containergréisst ze reduzéieren, awer hu kleng Container wierklech e moossbare Virdeel? Loosst eis zwee Beräicher kucken, wou kleng Container extrem effektiv sinn - Leeschtung a Sécherheet.

Fir d'Performanceerhéijung ze evaluéieren, betruecht d'Dauer vum Prozess fir e Container ze kreéieren, en an d'Registry ze setzen (Push), an dann vun do erauszekréien (zitt). Dir kënnt gesinn datt e méi klenge Container e markanten Virdeel iwwer e méi grousse Container huet.

Kubernetes beschten Praktiken. Schafen kleng Container

Docker wäert d'Schichten cache sou datt spéider Builds ganz séier sinn. Wéi och ëmmer, vill CI Systemer, déi benotzt gi fir Container ze bauen an ze testen, cache keng Schichten, sou datt et bedeitend Zäitspuer gëtt. Wéi Dir kënnt gesinn, ass d'Zäit fir e grousse Container ze bauen, jee no der Kraaft vun Ärer Maschinn, vu 34 bis 54 Sekonnen, a wann Dir e Container benotzt, reduzéiert d'Builder Muster - vun 23 bis 28 Sekonnen. Fir Operatiounen vun dëser Aart wäert d'Produktivitéitserhéijung 40-50% sinn. Also denkt just un wéi vill Mol Dir Äre Code baut an testen.

Nodeems de Container gebaut ass, musst Dir säi Bild (Push Container Image) an d'Container Registry drécken, fir datt Dir se dann an Ärem Kubernetes Cluster benotzt. Ech recommandéieren Google Container Registry ze benotzen.

Kubernetes beschten Praktiken. Schafen kleng Container

Mat Google Container Registry (GCR) bezuelt Dir nëmme fir rau Lagerung an Netzwierker, an et gi keng zousätzlech Containerverwaltungskäschte. Et ass privat, sécher a ganz séier. GCR benotzt vill Tricken fir d'Pulloperatioun ze beschleunegen. Wéi Dir gesitt, en Docker Container Image Container mat go:onbuild setzen dauert vu 15 bis 48 Sekonnen, ofhängeg vun der Computerleistung, an déi selwecht Operatioun mat engem méi klenge Container dauert vu 14 bis 16 Sekonnen, a fir manner produktiv Maschinnen de Virdeel vun der Operatioun Vitesse vergréissert vun 3 Mol. Fir gréisser Maschinnen ass d'Zäit ongeféier d'selwecht, well GCR e globalen Cache fir eng gemeinsam Datebank vu Biller benotzt, dat heescht datt Dir se guer net luede musst. An engem Low-Power Computer ass d'CPU de Flaschenhals, sou datt de Virdeel vu klenge Container hei vill méi grouss ass.

Wann Dir GCR benotzt, empfeelen ech héich Google Container Builder (GCB) als Deel vun Ärem Build System ze benotzen.

Kubernetes beschten Praktiken. Schafen kleng Container

Wéi Dir gesitt, erlaabt hir Notzung Iech vill besser Resultater ze erreechen fir d'Dauer vun der Build + Push Operatioun ze reduzéieren wéi souguer eng produktiv Maschinn - an dësem Fall ass de Prozess vum Bauen a Schécken vun Container un de Host ëm bal 2 Mol beschleunegt. . Plus, Dir kritt 120 gratis Bauminuten all Dag, wat Är Containerbaubedürfnisser an de meeschte Fäll deckt.

Als nächst kënnt déi wichtegst Performance Metrik - d'Geschwindegkeet vum Recuperéieren, oder eroflueden, Pull Container. A wann Dir Iech net vill ëm d'Zäit op enger Push-Operatioun verbréngen, dann huet d'Längt vum Pullprozess e seriösen Impakt op d'Gesamtleistung vum System. Loosst eis soen datt Dir e Stärekoup vun dräi Wirbelen hutt an ee vun hinnen feelt. Wann Dir e Management System wéi Google Kubernetes Engine benotzt, ersetzt et automatesch den Doudegen Node mat engem neien. Wéi och ëmmer, dësen neie Node wäert komplett eidel sinn an Dir musst all Är Container dran zéien fir datt et ufänkt ze schaffen. Wann d'Pulloperatioun laang genuch dauert, leeft Äre Stärekoup déi ganz Zäit mat enger niddereger Leeschtung.

Et gi vill Fäll wou dëst ka geschéien: en neien Node an e Stärekoup bäidroen, Noden upgraden oder souguer op en neie Container wiesselen fir z'installéieren. Also, d'Minimaliséierung vun der Pull Extraktiounszäit gëtt e Schlësselfaktor. Et ass onbestreitbar datt e klenge Container vill méi séier erofluet wéi e groussen. Wann Dir verschidde Container an engem Kubernetes Cluster leeft, kënnen d'Zäitspuer bedeitend sinn.

Kubernetes beschten Praktiken. Schafen kleng Container

Maacht e Bléck op dëse Verglach: eng Pulloperatioun op klenge Container dauert 4-9 Mol manner Zäit, jee no der Muecht vun der Maschinn, wéi déi selwecht Operatioun mat go:onbuild. Mat gedeelt, kleng Containerbasisbiller beschleunegt d'Zäit an d'Geschwindegkeet wesentlech mat där nei Kubernetes Noden ofgesat kënne ginn an online kommen.

Loosst eis d'Fro vun der Sécherheet kucken. Kleng Behälter ginn als vill méi sécher ugesinn wéi méi grouss, well se eng méi kleng Attackfläch hunn. Ass et wierklech? Ee vun de nëtzlechsten Features vum Google Container Registry ass d'Fäegkeet fir automatesch Är Container fir Schwachstelle ze scannen. Virun e puer Méint hunn ech souwuel Onbuild wéi och Multistage Container erstallt, also kucke mer ob et Schwachstelle gëtt.

Kubernetes beschten Praktiken. Schafen kleng Container

D'Resultat ass erstaunlech: nëmmen 3 mëttel Schwachstelle goufen an engem klenge Container festgestallt, a 16 kritesch an 376 aner Schwachstelle goufen an engem grousse Container fonnt. Wa mir den Inhalt vun engem grousse Container kucken, kënne mir gesinn datt déi meescht Sécherheetsprobleemer näischt mat eiser Applikatioun ze dinn hunn, awer mat Programmer verbonne sinn, déi mir net emol benotzen. Also wann d'Leit iwwer eng grouss Attack Uewerfläch schwätzen, dat ass wat se mengen.

Kubernetes beschten Praktiken. Schafen kleng Container

Den Takeaway ass kloer: baut kleng Container well se richteg Leeschtung a Sécherheetsvirdeeler fir Äre System ubidden.

Kubernetes beschten Praktiken. Organisatioun vu Kubernetes mat Nummraum

Puer Annoncen 🙂

Merci datt Dir bei eis bleift. Hutt Dir eis Artikelen gär? Wëllt Dir méi interessant Inhalt gesinn? Ënnerstëtzt eis andeems Dir eng Bestellung maacht oder Frënn empfeelt, Cloud VPS fir Entwéckler vun $ 4.99, en eenzegaartegen Analog vun Entry-Level Serveren, dee vun eis fir Iech erfonnt gouf: Déi ganz Wourecht iwwer VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps vun $19 oder wéi een e Server deelt? (verfügbar mat RAID1 an RAID10, bis zu 24 Kären a bis zu 40GB DDR4).

Dell R730xd 2 Mol méi bëlleg an Equinix Tier IV Daten Zentrum zu Amsterdam? Nëmmen hei 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV vun $199 an Holland! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - vun $99! Liest iwwer Wéi bauen ech Infrastructure Corp. Klass mat der Benotzung vun Dell R730xd E5-2650 v4 Serveren Wäert 9000 Euro fir e Penny?

Source: will.com

Setzt e Commentaire