Pi bon pratik Kubernetes. Kreye ti resipyan

Pi bon pratik Kubernetes. Kreye ti resipyan

Premye etap la nan deplwaye nan Kubernetes se mete aplikasyon w lan nan yon veso. Nan seri sa a, nou pral gade ki jan ou ka kreye yon ti imaj veso ki an sekirite.
Mèsi a Docker, kreye imaj veso pa janm te pi fasil. Espesifye yon imaj de baz, ajoute chanjman ou yo, epi kreye yon veso.

Pi bon pratik Kubernetes. Kreye ti resipyan

Pandan ke teknik sa a se gwo pou kòmanse, lè l sèvi avèk imaj baz default ka mennen nan travay danjere ak imaj gwo plen nan frajilite.

Anplis de sa, pifò imaj nan Docker itilize Debian oswa Ubuntu pou imaj debaz la, epi pandan ke sa a bay konpatibilite ekselan ak pèsonalizasyon fasil (yon fichye Docker pran jis de liy kòd), imaj debaz yo ka ajoute plizyè santèn megabyte chaj adisyonèl nan veso ou a. Pa egzanp, yon senp fichye node.js pou yon aplikasyon Go "hello-world" se apeprè 700 megabyte, pandan ke aplikasyon aktyèl ou a se sèlman kèk megabyte nan gwosè.

Pi bon pratik Kubernetes. Kreye ti resipyan

Se konsa, tout kantite travay siplemantè sa a se yon fatra nan espas dijital ak yon gwo kache pou frajilite sekirite ak pinèz. Se konsa, kite a gade nan de fason yo diminye gwosè a nan yon imaj veso.

Premye a se sèvi ak ti imaj baz, dezyèm lan se sèvi ak Modèl Builder la. Sèvi ak pi piti imaj baz se pwobableman fason ki pi fasil pou diminye gwosè veso ou a. Gen plis chans, lang oswa pile w ap itilize a bay yon imaj aplikasyon orijinal ki pi piti anpil pase imaj default la. Ann pran yon gade nan veso node.js nou an.

Pi bon pratik Kubernetes. Kreye ti resipyan

Pa default nan Docker, node: 8 baz gwosè imaj la se 670 MB, ak node: gwosè imaj 8-alpine se sèlman 65 MB, se sa ki, 10 fwa pi piti. Lè w itilize imaj baz Alpine ki pi piti a, ou pral siyifikativman redwi gwosè veso w la. Alpine se yon ti distribisyon Linux ki lejè ki trè popilè nan mitan itilizatè Docker paske li konpatib ak anpil aplikasyon pandan y ap kenbe veso yo piti. Kontrèman ak imaj estanda "node" Docker, "node:alpine" retire yon anpil nan fichye sèvis ak pwogram, kite sèlman sa yo ki ase pou kouri aplikasyon w lan.

Pou w deplase nan yon imaj de baz ki pi piti, tou senpleman mete ajou Dockerfile a pou kòmanse travay ak nouvo imaj de baz la:

Pi bon pratik Kubernetes. Kreye ti resipyan

Koulye a, kontrèman ak ansyen imaj onbuild la, ou bezwen kopye kòd ou a nan veso a epi enstale nenpòt depandans. Nan yon nouvo Dockerfile, veso a kòmanse ak yon ne: imaj alpine, Lè sa a, kreye yon anyè pou kòd la, enstale depandans lè l sèvi avèk manadjè pake NPM, epi finalman kouri server.js.

Pi bon pratik Kubernetes. Kreye ti resipyan

Amelyorasyon sa a rezilta nan yon veso ki se 10 fwa pi piti nan gwosè. Si langaj pwogramasyon w lan oswa pil ou a pa gen fonksyon rediksyon imaj de baz, sèvi ak Alpine Linux. Li pral tou bay kapasite nan konplètman jere sa ki nan veso a. Sèvi ak ti imaj baz se yon bon fason pou byen vit kreye ti resipyan. Men, menm pi gwo rediksyon ka reyalize lè l sèvi avèk Modèl Builder la.

Pi bon pratik Kubernetes. Kreye ti resipyan

Nan lang entèprete, kòd sous la premye pase bay entèprèt la epi answit egzekite dirèkteman. Nan lang konpile, kòd sous la premye konvèti nan kòd konpile. Sepandan, konpilasyon souvan itilize zouti ki pa aktyèlman nesesè pou kouri kòd la. Sa vle di ke ou ka konplètman retire zouti sa yo nan veso final la. Ou ka itilize Builder Pattern pou sa.

Pi bon pratik Kubernetes. Kreye ti resipyan

Kòd la kreye nan premye veso a epi konpile. Lè sa a, kòd konpile a pake nan yon veso final san yo pa konpile yo ak zouti ki nesesè yo konpile kòd sa a. Ann kouri yon aplikasyon Go atravè pwosesis sa a. Premyèman, nou pral deplase soti nan imaj onbuild la nan Alpine Linux.

Pi bon pratik Kubernetes. Kreye ti resipyan

Nan nouvo Dockerfile, veso a kòmanse ak yon imaj golang:alpine. Lè sa a, li kreye yon anyè pou kòd la, kopye li nan kòd sous la, bati kòd sous sa a, epi kouri aplikasyon an. Veso sa a pi piti anpil pase veso onbuild la, men li toujou genyen du ak lòt zouti Go ke nou pa vrèman bezwen. Se konsa, kite a jis ekstrè pwogram nan konpile epi mete l 'nan veso pwòp li yo.

Pi bon pratik Kubernetes. Kreye ti resipyan

Ou ka remake yon bagay etranj nan dosye Docker sa a: li gen de liy FROM. Premye 4 liy seksyon an sanble egzakteman menm jan ak Dockerfile anvan an eksepte ke li itilize mo kle AS la pou bay non etap sa a. Pwochen seksyon an gen yon nouvo liy FROM pou kòmanse yon nouvo imaj, kote olye pou yo golang:alpine imaj la nou pral itilize Raw alpine kòm imaj de baz la.

Raw Alpine Linux pa gen okenn sètifika SSL enstale, ki pral lakòz pifò apèl API sou HTTPS echwe, kidonk ann enstale kèk sètifika rasin CA.

Koulye a, vini pati nan plezi: kopye kòd la konpile soti nan premye veso a nan dezyèm lan, ou ka tou senpleman itilize kòmandman an KOPI ki sitiye sou liy 5 nan dezyèm seksyon an. Li pral sèlman kopye yon dosye aplikasyon epi li pa pral afekte zouti sèvis piblik Go yo. Nouvo dosye Docker plizyè etap la pral genyen yon imaj veso ki se sèlman 12 megabyte nan gwosè, konpare ak imaj veso orijinal la ki te 700 megabyte, ki se yon gwo diferans!
Se konsa, lè l sèvi avèk ti imaj baz ak Builder Pattern se yon bon fason yo kreye resipyan ki pi piti san anpil travay.
Li posib ke depann sou pil aplikasyon an, gen lòt fason pou diminye imaj ak gwosè resipyan, men èske ti resipyan reyèlman gen yon benefis mezirab? Ann gade nan de zòn kote ti resipyan yo trè efikas - pèfòmans ak sekirite.

Pou evalye ogmantasyon pèfòmans lan, konsidere dire pwosesis la pou kreye yon veso, mete l nan rejis la (pouse), ak Lè sa a, rekipere li soti nan la (rale). Ou ka wè ke yon veso ki pi piti gen yon avantaj diferan sou yon veso ki pi gwo.

Pi bon pratik Kubernetes. Kreye ti resipyan

Docker pral kache kouch yo pou konstriksyon ki vin apre yo pral trè vit. Sepandan, anpil sistèm CI yo itilize pou konstwi ak teste resipyan yo pa kache kouch, kidonk gen ekonomi tan enpòtan. Kòm ou ka wè, tan nan bati yon veso gwo, tou depann de pouvwa a nan machin ou an, se soti nan 34 a 54 segonn, ak lè w ap itilize yon veso redwi lè l sèvi avèk modèl la Builder - soti nan 23 a 28 segonn. Pou operasyon sa yo, ogmantasyon pwodiktivite a pral 40-50%. Se konsa, jis reflechi sou konbyen fwa ou bati ak teste kòd ou a.

Apre yo fin bati veso a, ou bezwen pouse imaj li (pouse imaj veso) nan rejis veso a pou ou ka sèvi ak li nan gwoup Kubernetes ou a. Mwen rekòmande pou itilize Google Container Registry.

Pi bon pratik Kubernetes. Kreye ti resipyan

Avèk Google Container Registry (GCR), ou peye sèlman pou depo anvan tout koreksyon ak rezo, epi pa gen okenn frè adisyonèl pou jesyon veso. Li prive, an sekirite ak trè vit. GCR sèvi ak anpil ke trik nouvèl akselere operasyon an rale. Kòm ou ka wè, mete yon veso Docker Container Image lè l sèvi avèk go:onbuild pral pran ant 15 a 48 segonn, tou depann de pèfòmans òdinatè a, ak menm operasyon an ak yon veso ki pi piti ap pran soti nan 14 a 16 segonn, epi pou machin mwens pwodiktif. avantaj nan vitès operasyon ogmante pa 3 fwa. Pou pi gwo machin, tan an se apeprè menm, depi GCR itilize yon kachèt mondyal pou yon baz done pataje imaj, sa vle di ou pa bezwen chaje yo ditou. Nan yon òdinatè ki ba-pouvwa, CPU a se kou boutèy la, kidonk avantaj nan sèvi ak ti resipyan se pi gwo isit la.

Si w ap itilize GCR, mwen trè rekòmande pou itilize Google Container Builder (GCB) kòm yon pati nan sistèm bati ou an.

Pi bon pratik Kubernetes. Kreye ti resipyan

Kòm ou ka wè, itilizasyon li yo pèmèt ou reyalize pi bon rezilta nan diminye dire operasyon an Build + Push pase menm yon machin pwodiktif - nan ka sa a, pwosesis la nan bati ak voye resipyan nan lame a se prèske 2 fwa pi vit. Anplis de sa, ou jwenn 120 minit konstriksyon gratis chak jou, ki kouvri bezwen konstriksyon veso ou nan pifò ka yo.

Apre sa, vini metrik pèfòmans ki pi enpòtan an - vitès la nan rekipere, oswa telechaje, Rale veso yo. Men, si ou pa pran swen anpil sou tan ki pase nan yon operasyon pouse, Lè sa a, longè a nan pwosesis la rale gen yon enpak grav sou pèfòmans jeneral sistèm lan. Ann di ou gen yon gwoup twa nœuds ak youn nan yo echwe. Si w ap itilize yon sistèm jesyon tankou Google Kubernetes Engine, li pral otomatikman ranplase ne ki mouri a ak yon nouvo. Sepandan, nouvo ne sa a pral konplètman vid epi w ap oblije trennen tout resipyan ou yo nan li pou li kòmanse travay. Si operasyon rale a pran ase tan, gwoup ou a ap kouri nan pi ba pèfòmans tout tan an.

Gen anpil ka kote sa a ka rive: ajoute yon nouvo ne nan yon gwoup, amelyore nœuds, oswa menm chanje nan yon nouvo veso pou deplwaman. Kidonk, minimize tan ekstraksyon rale vin tounen yon faktè kle. Li pa nye ke yon ti veso telechaje pi vit pase yon gwo. Si w ap kouri plizyè resipyan nan yon gwoup Kubernetes, ekonomi tan yo ka enpòtan.

Pi bon pratik Kubernetes. Kreye ti resipyan

Pran yon gade nan konparezon sa a: yon operasyon rale sou ti resipyan pran 4-9 fwa mwens tan, tou depann de pouvwa machin nan, pase menm operasyon an lè l sèvi avèk go:onbuild. Sèvi ak ti imaj baz veso ki pataje yo akselere anpil tan ak vitès nouvo nœuds Kubernetes yo ka deplwaye epi vin sou entènèt.

Ann gade pwoblèm sekirite a. Pi piti kontenè yo konsidere kòm pi an sekirite pase pi gwo yo paske yo gen yon sifas atak ki pi piti. Èske li vrèman? Youn nan karakteristik ki pi itil nan Google Container Registry se kapasite nan otomatikman eskane resipyan ou yo pou frajilite yo. Sa gen kèk mwa, mwen te kreye kontenè onbuild ak plizyè etap, kidonk ann wè si gen kèk frajilite la.

Pi bon pratik Kubernetes. Kreye ti resipyan

Rezilta a se etonan: sèlman 3 vilnerabilite mwayen yo te detekte nan yon ti veso, epi 16 kritik ak 376 lòt vilnerabilite yo te jwenn nan yon veso gwo. Si nou gade sa ki nan yon gwo veso, nou ka wè ke pifò nan pwoblèm sekirite yo pa gen anyen fè ak aplikasyon nou an, men yo gen rapò ak pwogram ke nou pa menm itilize. Se konsa, lè moun pale sou yon gwo sifas atak, se sa yo vle di.

Pi bon pratik Kubernetes. Kreye ti resipyan

Takeaway a klè: bati ti resipyan paske yo bay pèfòmans reyèl ak benefis sekirite nan sistèm ou an.

Pi bon pratik Kubernetes. Òganizasyon Kubernetes ak espas non

Kèk piblisite 🙂

Mèsi paske w rete avèk nou. Ou renmen atik nou yo? Vle wè plis kontni enteresan? Sipòte nou pa mete yon lòd oswa rekòmande pou zanmi, nwaj VPS pou devlopè soti nan $ 4.99, yon analogue inik nan sèvè nivo antre, ki te envante pa nou pou ou: Tout verite sou VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps soti nan $ 19 oswa ki jan yo pataje yon sèvè? (disponib ak RAID1 ak RAID10, jiska 24 nwayo ak jiska 40GB DDR4).

Dell R730xd 2 fwa pi bon mache nan sant done Equinix Tier IV nan Amstèdam? Sèlman isit la 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV soti nan $199 nan Netherlands! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - soti nan $ 99! Li sou Ki jan yo bati enfrastrikti corp. klas ak itilizasyon Dell R730xd E5-2650 v4 serveurs ki vo 9000 ero pou yon jounen travay?

Sous: www.habr.com

Add nouvo kòmantè