
Igbesẹ akọkọ ti gbigbe lọ si Kubernetes ni fifi ohun elo rẹ sinu apoti kan. Ninu jara yii, a yoo wo bii o ṣe le ṣẹda aworan apoti kekere kan ti o ni aabo.
Ṣeun si Docker, ṣiṣẹda awọn aworan eiyan ko ti rọrun rara. Pato aworan ipilẹ kan, ṣafikun awọn ayipada rẹ, ati ṣẹda apoti kan.

Lakoko ti ilana yii jẹ nla fun ibẹrẹ, lilo awọn aworan ipilẹ aiyipada le ja si iṣẹ ailewu pẹlu awọn aworan nla ti o kun fun awọn ailagbara.
Ni afikun, ọpọlọpọ awọn aworan ninu Docker lo fun aworan ipilẹ Debian tabi UbuntuBó tilẹ̀ jẹ́ pé èyí ń fúnni ní ìbáramu tó dára àti ìyípadà tó rọrùn (fáìlì Docker kan gba ìlà méjì ti kódì), àwọn àwòrán ìpìlẹ̀ lè fi ọgọ́rọ̀ọ̀rún megabytes ti ẹrù afikún kún àpótí rẹ. Fún àpẹẹrẹ, fáìlì node.js tó rọrùn fún ohun èlò Go "hello-world" gba tó nǹkan bíi megabytes 700, bó tilẹ̀ jẹ́ pé ohun èlò gidi rẹ kò tó megabytes díẹ̀ ní ìwọ̀n.

Nitorinaa gbogbo iṣẹ ṣiṣe afikun yii jẹ egbin ti aaye oni-nọmba ati ibi ipamọ nla fun awọn ailagbara aabo ati awọn idun. Nitorinaa jẹ ki a wo awọn ọna meji lati dinku iwọn aworan eiyan kan.
Ni igba akọkọ ti ni lilo awọn aworan ipilẹ kekere, keji ni lilo ti Apẹrẹ Akole. Lilo awọn aworan ipilẹ kekere jẹ ọna ti o rọrun julọ lati dinku iwọn apo eiyan rẹ. O ṣeese julọ, ede tabi akopọ ti o nlo pese aworan ohun elo atilẹba ti o kere pupọ ju aworan aiyipada lọ. Jẹ ká ya kan wo ni wa node.js eiyan.

Nípa àìṣeédá, àwòrán ìpìlẹ̀ node:8 nínú Docker jẹ́ 670 MB, nígbà tí node:8-alpine jẹ́ 65 MB péré, èyí tí ó kéré sí i ní ìlọ́po mẹ́wàá. Lílo àwòrán ìpìlẹ̀ Alpine kékeré yóò dín ìwọ̀n àpótí rẹ kù ní pàtàkì. Alpine jẹ́ ìpínkiri kékeré àti fífẹ́ẹ́. Linux, èyí tí ó gbajúmọ̀ gidigidi láàrín àwọn olùlò Docker nítorí pé ó bá ọ̀pọ̀lọpọ̀ àwọn ohun èlò mu nígbàtí ó ń pa àwọn ìwọ̀n àpótí mọ́ ní kékeré. Láìdàbí àwòrán "node" Docker tí ó wọ́pọ̀, "node:alpine" yọ ọ̀pọ̀lọpọ̀ àwọn fáìlì iṣẹ́ àti ètò kúrò, ó sì fi àwọn tí ó pọndandan sílẹ̀ láti ṣiṣẹ́ ohun èlò rẹ.
Lati gbe si aworan ipilẹ ti o kere ju, kan ṣe imudojuiwọn Dockerfile lati bẹrẹ ṣiṣẹ pẹlu aworan ipilẹ tuntun:

Bayi, ko dabi aworan onbuild atijọ, o nilo lati daakọ koodu rẹ sinu apoti ki o fi awọn igbẹkẹle eyikeyi sori ẹrọ. Ninu Dockerfile tuntun kan, eiyan naa bẹrẹ pẹlu ipade kan: aworan alpine, lẹhinna ṣẹda itọsọna kan fun koodu, fi awọn igbẹkẹle sori ẹrọ nipa lilo oluṣakoso package NPM, ati nikẹhin nṣiṣẹ server.js.

Àtúnṣe yìí yóò mú kí àpótí kan kéré sí i ní ìlọ́po mẹ́wàá. Tí èdè ìṣiṣẹ́ tàbí àkójọpọ̀ rẹ kò bá gbà láti dín àwòrán ìpìlẹ̀ kù, lo Alpine. LinuxYóò tún fún ọ ní ìṣàkóso pípé lórí àkóónú àpótí náà. Lílo àwọn àwòrán kékeré jẹ́ ọ̀nà tó dára láti yára ṣẹ̀dá àwọn àpótí kékeré. Ṣùgbọ́n o lè dín ìwọ̀n kù sí i nípa lílo Àpẹẹrẹ Olùkọ́lé.

Ni awọn ede ti a tumọ, koodu orisun ti kọkọ kọja si onitumọ ati lẹhinna ṣiṣẹ taara. Ni awọn ede ti a ṣe akojọpọ, koodu orisun ti yipada ni akọkọ sinu koodu akojọpọ. Sibẹsibẹ, iṣakojọpọ nigbagbogbo nlo awọn irinṣẹ ti ko nilo gangan lati ṣiṣẹ koodu naa. Eyi tumọ si pe o le yọ awọn irinṣẹ wọnyi kuro patapata lati inu eiyan ikẹhin. O le lo Àpẹẹrẹ Akole fun eyi.

A ṣẹ̀dá kóòdù náà nínú àpótí àkọ́kọ́ a sì kó o jọ. Lẹ́yìn náà, a ó kó kóòdù tí a tò jọ sínú àpótí ìkẹyìn láìsí àwọn ohun èlò ìṣàkójọ àti irinṣẹ́ tí a nílò láti kó kóòdù náà jọ. Ẹ jẹ́ kí a rìn lórí ìlànà yìí fún ohun èlò Go. Àkọ́kọ́, a ó ṣí kúrò nínú àwòrán onbuild sí Alpine. Linux.

Ninu Dockerfile tuntun, eiyan naa bẹrẹ pẹlu golang: aworan alpine kan. Lẹhinna o ṣẹda ilana fun koodu, daakọ rẹ sinu koodu orisun, kọ koodu orisun yẹn, ati ṣiṣe ohun elo naa. Eiyan yii kere pupọ ju apoti ti onbuild lọ, ṣugbọn o tun ni akopọ ati awọn irinṣẹ Go miiran ti a ko nilo gaan. Nitorinaa jẹ ki a kan yọ eto ti a ṣajọ jade ki a si fi sinu apoti tirẹ.

O le ṣe akiyesi ohun ajeji ninu faili Docker yii: o ni awọn laini meji LATI. Apakan laini 4 akọkọ dabi kanna bi Dockerfile ti tẹlẹ ayafi pe o nlo ọrọ-ọrọ AS lati lorukọ ipele yii. Apakan ti o tẹle ni lati laini tuntun lati bẹrẹ aworan tuntun, nibiti dipo golang: aworan alpine a yoo lo Raw alpine bi aworan ipilẹ.
Alpine tí kò ní àwọ̀ Linux kò ní àwọn ìwé-ẹ̀rí SSL kankan tí a fi sori ẹrọ, èyí tí yóò fa kí ọ̀pọ̀lọpọ̀ àwọn ìpè API lórí HTTPS kùnà, nítorí náà ẹ jẹ́ kí a fi àwọn ìwé-ẹ̀rí gbòǹgbò CA kan sori ẹrọ.
Bayi apakan igbadun naa wa: lati daakọ koodu ti a ṣajọpọ lati eiyan akọkọ si keji, o le jiroro ni lo aṣẹ COPY ti o wa lori laini 5 ti apakan keji. Yoo daakọ faili ohun elo kan nikan kii yoo kan awọn irinṣẹ IwUlO Go. Faili Docker ipele-pupọ tuntun yoo ni aworan eiyan ti o jẹ megabyte 12 nikan ni iwọn, ni akawe si aworan eiyan atilẹba ti o jẹ megabyte 700, eyiti o jẹ iyatọ nla!
Nitorinaa lilo awọn aworan ipilẹ kekere ati Apẹrẹ Akole jẹ awọn ọna nla lati ṣẹda awọn apoti kekere pupọ laisi iṣẹ pupọ.
O ṣee ṣe pe da lori akopọ ohun elo, awọn ọna afikun wa lati dinku aworan ati iwọn eiyan, ṣugbọn ṣe awọn apoti kekere ni anfani ti o le ṣe iwọn gaan? Jẹ ki a wo awọn agbegbe meji nibiti awọn apoti kekere ti munadoko pupọ - iṣẹ ati aabo.
Lati ṣe iṣiro ilosoke iṣẹ, ṣe akiyesi iye akoko ilana ti ṣiṣẹda eiyan kan, fi sii sinu iforukọsilẹ (titari), ati lẹhinna gbigba lati ibẹ (fa). O le rii pe eiyan kekere kan ni anfani ti o yatọ lori apoti nla kan.

Docker yoo kaṣe awọn fẹlẹfẹlẹ nitorinaa awọn kikọ ti o tẹle yoo yara pupọ. Sibẹsibẹ, ọpọlọpọ awọn eto CI ti a lo lati kọ ati awọn apoti idanwo ko ṣe awọn ipele kaṣe, nitorinaa awọn ifowopamọ akoko pataki wa. Bii o ti le rii, akoko lati kọ eiyan nla kan, da lori agbara ẹrọ rẹ, jẹ lati 34 si 54 awọn aaya, ati nigba lilo eiyan kan dinku nipa lilo Apẹrẹ Akole - lati 23 si 28 awọn aaya. Fun awọn iṣẹ ṣiṣe ti iru yii, ilosoke iṣelọpọ yoo jẹ 40-50%. Nitorinaa ronu nipa iye igba ti o kọ ati idanwo koodu rẹ.
Lẹhin ti a ti kọ eiyan naa, o nilo lati Titari aworan rẹ (aworan apoti titari) sinu iforukọsilẹ eiyan ki o le lẹhinna lo ninu iṣupọ Kubernetes rẹ. Mo ṣeduro lilo Iforukọsilẹ Apoti Google.

Pẹlu Iforukọsilẹ Apoti Google (GCR), iwọ sanwo nikan fun ibi ipamọ aise ati netiwọki, ati pe ko si awọn idiyele iṣakoso eiyan ni afikun. O jẹ ikọkọ, aabo ati iyara pupọ. GCR nlo awọn ẹtan pupọ lati mu iṣẹ ṣiṣe fifa soke. Bii o ti le rii, fifi sii apoti Aworan Apoti Docker nipa lilo go:onbuild yoo gba lati iṣẹju 15 si 48, da lori iṣẹ ṣiṣe kọnputa, ati pe iṣẹ kanna pẹlu apo kekere kan yoo gba lati iṣẹju-aaya 14 si 16, ati fun awọn ẹrọ iṣelọpọ ti o kere si. anfani ni iyara iṣiṣẹ pọ nipasẹ awọn akoko 3. Fun awọn ẹrọ ti o tobi ju, akoko naa jẹ nipa kanna, niwon GCR nlo kaṣe agbaye kan fun ipin data ti awọn aworan, afipamo pe o ko nilo lati fifuye wọn rara. Ninu kọnputa ti o ni agbara kekere, Sipiyu jẹ igo, nitorinaa anfani ti lilo awọn apoti kekere jẹ tobi pupọ nibi.
Ti o ba nlo GCR, Mo ṣeduro gaan ni lilo Google Container Akole (GCB) gẹgẹbi apakan ti eto kikọ rẹ.

Bii o ti le rii, lilo rẹ gba ọ laaye lati ṣaṣeyọri awọn abajade to dara julọ ni idinku iye akoko iṣẹ Kọ + Titari paapaa paapaa ẹrọ ti iṣelọpọ - ninu ọran yii, ilana ti kikọ ati fifiranṣẹ awọn apoti si agbalejo naa ni iyara nipasẹ awọn akoko 2. . Pẹlupẹlu, o gba awọn iṣẹju kikọ 120 ọfẹ ni gbogbo ọjọ, eyiti o bo awọn iwulo ile eiyan rẹ ni ọpọlọpọ awọn ọran.
Nigbamii ti o wa metric iṣẹ pataki julọ - iyara gbigba pada, tabi igbasilẹ, Fa awọn apoti. Ati pe ti o ko ba bikita pupọ nipa akoko ti o lo lori iṣẹ titari, lẹhinna ipari ti ilana fifa ni ipa pataki lori iṣẹ ṣiṣe eto gbogbogbo. Jẹ ki a sọ pe o ni iṣupọ ti awọn apa mẹta ati ọkan ninu wọn kuna. Ti o ba nlo eto iṣakoso bii Google Kubernetes Engine, yoo rọpo ipade ti o ku laifọwọyi pẹlu tuntun kan. Sibẹsibẹ, ipade tuntun yii yoo ṣofo patapata ati pe iwọ yoo ni lati fa gbogbo awọn apoti rẹ sinu rẹ lati bẹrẹ iṣẹ. Ti iṣẹ fifa naa ba pẹ to, iṣupọ rẹ yoo ṣiṣẹ ni iṣẹ kekere ni gbogbo akoko.
Ọpọlọpọ awọn ọran lo wa nibiti eyi le ṣẹlẹ: fifi ipade tuntun kun si iṣupọ, awọn apa imudara, tabi paapaa yi pada si apoti tuntun fun imuṣiṣẹ. Nitorinaa, idinku akoko isediwon fa di ifosiwewe bọtini. Ko ṣee ṣe pe apoti kekere kan ṣe igbasilẹ ni iyara pupọ ju eyi ti o tobi lọ. Ti o ba nṣiṣẹ awọn apoti pupọ ninu iṣupọ Kubernetes, awọn ifowopamọ akoko le ṣe pataki.

Wo lafiwe yii: iṣẹ fifa lori awọn apoti kekere gba akoko 4-9 kere si akoko, da lori agbara ẹrọ, ju iṣẹ kanna lọ nipa lilo go: onbuild. Lilo pinpin, awọn aworan ipilẹ apoti kekere ṣe iyara ni pataki akoko ati iyara ni eyiti awọn apa Kubernetes tuntun le wa ni ran lọ ki o wa lori ayelujara.
Jẹ ki a wo ọrọ aabo. Awọn apoti kekere ni a gba pe ailewu pupọ ju awọn ti o tobi ju nitori wọn ni aaye ikọlu kekere kan. Se looto ni? Ọkan ninu awọn ẹya ti o wulo julọ ti Iforukọsilẹ Apoti Google ni agbara lati ṣe ọlọjẹ awọn apoti rẹ laifọwọyi fun awọn ailagbara. Ni oṣu diẹ sẹhin Mo ṣẹda mejeeji loribuild ati awọn apoti multistage, nitorinaa jẹ ki a rii boya awọn ailagbara eyikeyi wa nibẹ.

Abajade jẹ iyalẹnu: awọn ailagbara alabọde 3 nikan ni a rii ni apo kekere kan, ati pe 16 pataki ati awọn ailagbara 376 miiran ni a rii ni apo nla kan. Ti a ba wo awọn akoonu inu apoti nla kan, a le rii pe ọpọlọpọ awọn iṣoro aabo ko ni nkan ṣe pẹlu ohun elo wa, ṣugbọn jẹ ibatan si awọn eto ti a ko paapaa lo. Nitorinaa nigbati eniyan ba sọrọ nipa aaye ikọlu nla kan, iyẹn ni ohun ti wọn tumọ si.

Ilọkuro naa jẹ kedere: kọ awọn apoti kekere nitori wọn pese iṣẹ ṣiṣe gidi ati awọn anfani aabo si eto rẹ.

Diẹ ninu awọn ipolowo 🙂
O ṣeun fun gbigbe pẹlu wa. Ṣe o fẹran awọn nkan wa? Ṣe o fẹ lati rii akoonu ti o nifẹ si diẹ sii? Ṣe atilẹyin fun wa nipa gbigbe aṣẹ tabi iṣeduro si awọn ọrẹ, , afọwọṣe alailẹgbẹ ti awọn olupin ipele-iwọle, eyiti a ṣẹda nipasẹ wa fun ọ: (wa pẹlu RAID1 ati RAID10, to awọn ohun kohun 24 ati to 40GB DDR4).
Dell R730xd 2x din owo ni Equinix Tier IV ile-iṣẹ data ni Amsterdam? Nikan nibi ni Netherlands! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - lati $99! Ka nipa
orisun: www.habr.com
