Mga Kinamaayohang Gawi sa Kubernetes. Paghimo og Gagmay nga mga Kontainer

Mga Kinamaayohang Gawi sa Kubernetes. Paghimo og Gagmay nga mga Kontainer

Ang unang lakang sa pag-deploy sa Kubernetes mao ang pagbutang sa imong aplikasyon sa usa ka sudlanan. Sa kini nga serye, atong tan-awon kung giunsa nimo paghimo ang usa ka gamay, luwas nga imahe sa sulud.
Salamat sa Docker, ang paghimo sa mga imahen sa sulud dili gyud kadali. Tinoa ang usa ka base nga imahe, idugang ang imong mga pagbag-o, ug paghimo usa ka sulud.

Mga Kinamaayohang Gawi sa Kubernetes. Paghimo og Gagmay nga mga Kontainer

Samtang kini nga teknik maayo alang sa pagsugod, ang paggamit sa mga default nga base nga mga imahe mahimong mosangput sa dili luwas nga trabaho nga adunay daghang mga imahe nga puno sa mga kahuyangan.

Dugang pa, kadaghanan sa mga imahe sa Docker naggamit sa Debian o Ubuntu alang sa base nga imahe, ug samtang kini naghatag maayo kaayo nga pagkaangay ug dali nga pag-customize (ang usa ka Docker file nagkinahanglan lamang og duha ka linya sa code), ang mga base nga mga hulagway makadugang sa gatusan ka megabytes nga dugang nga load sa imong sudlanan. Pananglitan, ang usa ka yano nga node.js file alang sa usa ka Go "hello-world" nga aplikasyon kay mga 700 megabytes, samtang ang imong aktuwal nga aplikasyon pila ra ka megabytes ang gidak-on.

Mga Kinamaayohang Gawi sa Kubernetes. Paghimo og Gagmay nga mga Kontainer

Mao nga kining tanan nga dugang nga workload usa ka pag-usik sa digital nga wanang ug usa ka maayong tagoanan alang sa mga kahuyangan sa seguridad ug mga bug. Busa atong tan-awon ang duha ka mga paagi sa pagpakunhod sa gidak-on sa usa ka sudlanan nga larawan.

Ang una mao ang paggamit sa gagmay nga base nga mga imahe, ang ikaduha mao ang paggamit sa Builder Pattern. Ang paggamit sa gagmay nga base nga mga imahe mao tingali ang labing kadali nga paagi aron makunhuran ang gidak-on sa imong sudlanan. Lagmit, ang pinulongan o stack nga imong gigamit naghatag og orihinal nga hulagway sa aplikasyon nga mas gamay kay sa default nga hulagway. Atong tan-awon ang atong node.js nga sudlanan.

Mga Kinamaayohang Gawi sa Kubernetes. Paghimo og Gagmay nga mga Kontainer

Sa default sa Docker, ang node: 8 base nga gidak-on sa imahe mao ang 670 MB, ug ang node: 8-alpine nga gidak-on sa imahe 65 MB ra, kana, 10 ka beses nga mas gamay. Pinaagi sa paggamit sa mas gamay nga Alpine base nga imahe, imong makunhuran ang gidak-on sa imong sudlanan. Ang Alpine usa ka gamay ug gaan nga pag-apod-apod sa Linux nga sikat kaayo sa mga tiggamit sa Docker tungod kay kini nahiuyon sa daghang mga aplikasyon samtang gitipigan ang mga sudlanan nga gamay. Dili sama sa standard nga Docker nga "node" nga imahe, ang "node: alpine" nagtangtang sa daghang mga file sa serbisyo ug mga programa, nga nagbilin lamang sa mga igo sa pagpadagan sa imong aplikasyon.

Aron mobalhin sa usa ka gamay nga base nga imahe, i-update lang ang Dockerfile aron magsugod sa pagtrabaho sa bag-ong base nga imahe:

Mga Kinamaayohang Gawi sa Kubernetes. Paghimo og Gagmay nga mga Kontainer

Karon, dili sama sa daan nga onbuild nga imahe, kinahanglan nimo nga kopyahon ang imong code sa sulud ug i-install ang bisan unsang dependency. Sa usa ka bag-ong Dockerfile, ang sudlanan nagsugod sa usa ka node:alpine nga imahe, dayon nagmugna og direktoryo alang sa code, nag-instalar sa mga dependency gamit ang NPM package manager, ug sa katapusan nagpadagan sa server.js.

Mga Kinamaayohang Gawi sa Kubernetes. Paghimo og Gagmay nga mga Kontainer

Kini nga pag-upgrade moresulta sa usa ka sudlanan nga 10 ka beses nga mas gamay sa gidak-on. Kung ang imong programming language o stack walay base image reduction functionality, gamita ang Alpine Linux. Maghatag usab kini og katakus nga hingpit nga madumala ang sulud sa sulud. Ang paggamit sa gagmay nga base nga mga imahe usa ka maayong paagi aron dali nga makahimo og gagmay nga mga sudlanan. Apan ang mas dako nga pagkunhod mahimong makab-ot gamit ang Builder Pattern.

Mga Kinamaayohang Gawi sa Kubernetes. Paghimo og Gagmay nga mga Kontainer

Sa gihubad nga mga pinulongan, ang source code una nga ipasa ngadto sa tighubad ug dayon direktang ipatuman. Sa gihugpong nga mga pinulongan, ang source code unang gi-convert ngadto sa compiled code. Bisan pa, ang paghugpong sa kasagaran naggamit sa mga himan nga dili tinuod nga gikinahanglan sa pagpadagan sa code. Kini nagpasabut nga mahimo nimong hingpit nga makuha kini nga mga himan gikan sa katapusan nga sudlanan. Mahimo nimong gamiton ang Builder Pattern alang niini.

Mga Kinamaayohang Gawi sa Kubernetes. Paghimo og Gagmay nga mga Kontainer

Ang code gihimo sa unang sudlanan ug gihugpong. Ang gihugpong nga kodigo dayon giputos ngadto sa kataposang sudlanan nga walay mga tigkompiler ug mga himan nga gikinahanglan sa pagtigom niana nga kodigo. Magpadagan kita og Go application pinaagi niini nga proseso. Una, mobalhin kita gikan sa onbuild nga imahe ngadto sa Alpine Linux.

Mga Kinamaayohang Gawi sa Kubernetes. Paghimo og Gagmay nga mga Kontainer

Sa bag-ong Dockerfile, ang sudlanan nagsugod sa usa ka golang: alpine nga imahe. Naghimo kini og usa ka direktoryo alang sa code, gikopya kini ngadto sa source code, nagtukod niana nga source code, ug nagpadagan sa aplikasyon. Kini nga sudlanan mas gamay kay sa onbuild nga sudlanan, apan kini naglangkob gihapon sa compiler ug uban pang mga himan sa Go nga wala namo kinahanglana. Busa ato lang i-extract ang compiled program ug ibutang sa kaugalingong sudlanan.

Mga Kinamaayohang Gawi sa Kubernetes. Paghimo og Gagmay nga mga Kontainer

Mahimo nimong mamatikdan ang usa ka butang nga katingad-an sa kini nga Docker file: kini adunay duha ka GIKAN nga linya. Ang una nga 4 nga seksyon sa linya parehas nga hitsura sa miaging Dockerfile gawas nga gigamit niini ang AS nga keyword aron hinganlan kini nga yugto. Ang sunod nga seksyon adunay bag-ong GIKAN nga linya aron magsugod sa usa ka bag-ong imahe, diin imbes sa golang: alpine nga imahe among gamiton ang Raw alpine ingon base nga imahe.

Ang Raw Alpine Linux walay bisan unsang SSL certificate nga na-install, nga maoy hinungdan nga mapakyas ang kadaghanan sa mga tawag sa API sa HTTPS, mao nga mag-install kita og pipila ka mga root CA certificates.

Karon moabut ang makalingaw nga bahin: aron kopyahon ang gihugpong nga code gikan sa una nga sudlanan hangtod sa ikaduha, mahimo nimong gamiton ang COPY nga mando nga nahimutang sa linya 5 sa ikaduhang seksyon. Magkopya lang kini og usa ka file sa aplikasyon ug dili makaapekto sa mga gamit sa Go utility. Ang bag-ong multi-stage Docker file maglangkob sa usa ka container image nga 12 megabytes lang ang gidak-on, itandi sa orihinal nga container image nga 700 megabytes, nga dakog kalainan!
Mao nga ang paggamit sa gagmay nga base nga mga imahe ug Builder Pattern maayo nga mga paagi sa paghimo og mas gagmay nga mga sudlanan nga wala’y daghang trabaho.
Posible nga depende sa stack sa aplikasyon, adunay dugang nga mga paagi aron makunhuran ang imahe ug gidak-on sa sudlanan, apan ang gagmay nga mga sudlanan adunay usa ka masukod nga kaayohan? Atong tan-awon ang duha ka mga lugar diin ang gagmay nga mga sudlanan labi ka epektibo - pasundayag ug seguridad.

Aron masusi ang pagtaas sa pasundayag, hunahunaa ang gidugayon sa proseso sa paghimo og usa ka sudlanan, isulud kini sa rehistro (pagduso), ug dayon kuhaa kini gikan didto (pagbira). Imong makita nga ang usa ka gamay nga sudlanan adunay lahi nga bentaha sa usa ka mas dako nga sudlanan.

Mga Kinamaayohang Gawi sa Kubernetes. Paghimo og Gagmay nga mga Kontainer

Ang Docker mag-cache sa mga layer aron ang sunod nga mga pagtukod mahimong paspas kaayo. Bisan pa, daghang mga sistema sa CI nga gigamit sa pagtukod ug pagsulay sa mga sulud wala mag-cache sa mga layer, mao nga adunay hinungdanon nga pagtipig sa oras. Sama sa imong nakita, ang oras sa paghimo og usa ka dako nga sudlanan, depende sa gahum sa imong makina, gikan sa 34 hangtod 54 segundos, ug kung mogamit usa ka sulud nga pagkunhod gamit ang Pattern sa Magtutukod - gikan sa 23 hangtod 28 segundos. Alang sa mga operasyon niini nga matang, ang pagtaas sa produktibo mahimong 40-50%. Mao nga hunahunaa lang kung pila ka beses nimo gitukod ug sulayan ang imong code.

Human matukod ang sudlanan, kinahanglan nimo nga iduso ang imahe niini (ibutang ang imahe sa sulud) sa rehistro sa sudlanan aron magamit nimo kini sa imong Kubernetes cluster. Girekomenda nako ang paggamit sa Google Container Registry.

Mga Kinamaayohang Gawi sa Kubernetes. Paghimo og Gagmay nga mga Kontainer

Uban sa Google Container Registry (GCR), nagbayad ka lang alang sa hilaw nga pagtipig ug networking, ug wala’y dugang nga bayad sa pagdumala sa sulud. Kini pribado, luwas ug paspas kaayo. Gigamit sa GCR ang daghang mga limbong aron mapadali ang operasyon sa pagbitad. Sama sa imong makita, ang pagsal-ot sa usa ka sudlanan sa Docker Container Image gamit ang go:onbuild mokabat gikan sa 15 hangtod 48 segundos, depende sa pasundayag sa kompyuter, ug ang parehas nga operasyon nga adunay usa ka gamay nga sudlanan molungtad gikan sa 14 hangtod 16 segundo, ug alang sa dili kaayo produktibo nga mga makina. ang bentaha sa katulin sa operasyon nagdugang sa 3 ka beses. Alang sa mas dagkong mga makina, ang oras halos pareho, tungod kay ang GCR naggamit sa usa ka global nga cache alang sa gipaambit nga database sa mga imahe, nagpasabut nga dili nimo kinahanglan nga i-load kini. Sa usa ka ubos nga gahum nga kompyuter, ang CPU mao ang bottleneck, mao nga ang bentaha sa paggamit sa gagmay nga mga sudlanan labi ka dako dinhi.

Kung naggamit ka sa GCR, girekomenda nako ang paggamit sa Google Container Builder (GCB) isip bahin sa imong sistema sa pagtukod.

Mga Kinamaayohang Gawi sa Kubernetes. Paghimo og Gagmay nga mga Kontainer

Sama sa imong nakita, ang paggamit niini nagtugot kanimo nga makab-ot ang labi ka maayo nga mga sangputanan sa pagkunhod sa gidugayon sa operasyon sa Pagtukod + Push kaysa bisan usa ka produktibo nga makina - sa kini nga kaso, ang proseso sa pagtukod ug pagpadala sa mga sudlanan sa host hapit 2 ka beses nga mas paspas. Dugang pa, makakuha ka ug 120 ka libre nga mga minuto sa pagtukod matag adlaw, nga nagsakup sa mga kinahanglanon sa pagtukod sa sudlanan sa kadaghanan nga mga kaso.

Sunod moabut ang labing hinungdanon nga sukatan sa pasundayag - ang katulin sa pagkuha, o pag-download, Pagbitad sa mga sudlanan. Ug kung dili nimo igsapayan ang oras nga gigugol sa usa ka operasyon sa pagduso, nan ang gitas-on sa proseso sa pagbitad adunay seryoso nga epekto sa kinatibuk-ang pasundayag sa sistema. Ingnon ta nga ikaw adunay usa ka pungpong sa tulo ka mga node ug usa niini napakyas. Kung naggamit ka usa ka sistema sa pagdumala sama sa Google Kubernetes Engine, awtomatiko nga ilisan ang patay nga node sa usa ka bag-o. Bisan pa, kini nga bag-ong node mahimong bug-os nga walay sulod ug kinahanglan nimo nga i-drag ang tanan nimong mga sulud niini aron kini magsugod sa pagtrabaho. Kung ang pagbira nga operasyon magdugay, ang imong cluster modagan sa mas ubos nga performance sa tibuok panahon.

Adunay daghang mga kaso diin kini mahitabo: pagdugang usa ka bag-ong node sa usa ka cluster, pag-upgrade sa mga node, o bisan ang pagbalhin sa usa ka bag-ong sudlanan alang sa pag-deploy. Sa ingon, ang pagminus sa oras sa pagkuha sa pagbitad nahimong hinungdan nga hinungdan. Dili ikalimod nga ang usa ka gamay nga sudlanan nag-download nga labi ka paspas kaysa usa ka dako. Kung nagdagan ka daghang mga sulud sa usa ka kumpol sa Kubernetes, mahimo’g hinungdanon ang pagtipig sa oras.

Mga Kinamaayohang Gawi sa Kubernetes. Paghimo og Gagmay nga mga Kontainer

Tan-awa kini nga pagtandi: ang pagbira sa gagmay nga mga sudlanan nagkinahanglag 4-9 ka beses nga gamay nga oras, depende sa gahum sa makina, kaysa sa parehas nga operasyon gamit ang go:onbuild. Ang paggamit sa gipaambit, gagmay nga mga sulud sa sulud sa sulud labi nga nagpadali sa oras ug katulin diin ang mga bag-ong Kubernetes node mahimong ma-deploy ug moabut online.

Atong tan-awon ang isyu sa seguridad. Ang gagmay nga mga sudlanan giisip nga labi ka luwas kaysa sa dagko tungod kay kini adunay gamay nga sulud sa pag-atake. Tinuod ba kini? Usa sa labing mapuslanon nga bahin sa Google Container Registry mao ang abilidad sa awtomatikong pag-scan sa imong mga sudlanan alang sa mga kahuyangan. Pipila ka bulan ang milabay gibuhat nako ang duha nga onbuild ug multistage nga mga sudlanan, mao nga tan-awon naton kung adunay bisan unsang mga kahuyangan didto.

Mga Kinamaayohang Gawi sa Kubernetes. Paghimo og Gagmay nga mga Kontainer

Talagsaon ang resulta: 3 ra ka medium nga mga kahuyangan ang nakit-an sa usa ka gamay nga sudlanan, ug 16 nga kritikal ug 376 nga uban pang mga kahuyangan ang nakit-an sa usa ka dako nga sudlanan. Kung atong tan-awon ang sulod sa usa ka dako nga sudlanan, atong makita nga kadaghanan sa mga problema sa seguridad walay kalabotan sa atong aplikasyon, apan nalangkit sa mga programa nga wala gani nato gamita. Mao nga kung ang mga tawo maghisgot bahin sa usa ka dako nga pag-atake, kana ang ilang gipasabut.

Mga Kinamaayohang Gawi sa Kubernetes. Paghimo og Gagmay nga mga Kontainer

Ang takeaway klaro: paghimo og gagmay nga mga sudlanan tungod kay kini naghatag og tinuod nga performance ug mga benepisyo sa seguridad sa imong sistema.

Mga Kinamaayohang Gawi sa Kubernetes. Kubernetes nga organisasyon nga adunay namespace

Pipila ka mga ad πŸ™‚

Salamat sa pagpabilin kanamo. Ganahan ka ba sa among mga artikulo? Gusto nga makakita og mas makapaikag nga sulod? Suportahi kami pinaagi sa pag-order o pagrekomenda sa mga higala, cloud VPS alang sa mga developers gikan sa $4.99, usa ka talagsaon nga analogue sa mga entry-level server, nga giimbento namo alang kanimo: Ang tibuok kamatuoran bahin sa VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps gikan sa $19 o unsaon pagpaambit sa usa ka server? (anaa sa RAID1 ug RAID10, hangtod sa 24 ka mga core ug hangtod sa 40GB DDR4).

Dell R730xd 2 ka beses nga mas barato sa Equinix Tier IV data center sa Amsterdam? Dinhi lang 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV gikan sa $199 sa Netherlands! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - gikan sa $99! Basaha ang mahitungod sa Unsaon pagtukod sa infrastructure corp. klase sa paggamit sa Dell R730xd E5-2650 v4 server nga nagkantidad ug 9000 euros sa usa ka sentimos?

Source: www.habr.com

Idugang sa usa ka comment