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.

Кроме того, большинство образов в Docker используют для базового образа Debian o Ubuntu, и хотя это обеспечивает отличную совместимость и легкую адаптацию (файл Docker занимает всего две строки кода), базовые образы способны добавить сотни мегабайтов дополнительной нагрузки в ваш контейнер. Например, простой файл node.js приложения Go «hello-world» занимают около 700 мегабайт, при том, что размер собственно вашего приложения составляет всего лишь несколько мегабайтов.

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

По умолчанию в Docker размер базового образа node:8 равен 670 МБ, а размер node: 8-alpine составляет всего 65 МБ, то есть в 10 раз меньше. Используя меньший базовый образ Alpine, вы существенно сократите размер вашего контейнера. Alpine -это небольшой и легкий дистрибутив Linux, который очень популярен среди пользователей Docker, потому что он совместим со многими приложениями, сохраняя при этом небольшой размер контейнеров. В отличие от стандартного образа Docker «node», «node:alpine» удаляет множество служебных файлов и программ, оставляя только те, которых достаточно для запуска вашего приложения.

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

С помощью этого обновления получается контейнер в 10 раз меньшего размера. Если ваш язык программирования или стек не имеет функции уменьшения базового образа, используйте Alpine Linux. Он также предоставит возможность полностью управлять содержимым контейнера. Использование базовых образов маленького размера — отличный способ быстрого создания небольших контейнеров. Но можно достичь еще большего уменьшения, используя 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

Код создается в первом контейнере и компилируется. Затем скомпилированный код упаковывается в конечный контейнер без компиляторов и инструментов, необходимых для компиляции этого кода. Давайте пропустим через этот процесс приложение Go. Во-первых, мы перейдем от образа onbuild к 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.

Raw Alpine Linux не имеет никаких установленных SSL сертификатов, что приведет к сбою большинства вызовов API по протоколу HTTPS, поэтому давайте установим несколько корневых сертификатов CA.

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

Pagdula sa video

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

Pagpalit kasaligan nga pag-host alang sa mga site nga adunay proteksyon sa DDoS, mga server sa VPS VDS 🔥 Pagpalit og kasaligang website hosting nga adunay proteksyon sa DDoS, VPS VDS servers | ProHoster