Таҷрибаҳои беҳтарини Kubernetes. Эҷоди контейнерҳои хурд

Таҷрибаҳои беҳтарини Kubernetes. Эҷоди контейнерҳои хурд

Қадами аввал дар ҷойгиркунии Kubernetes ин ҷойгир кардани аризаи шумо дар контейнер мебошад. Дар ин силсила мо дида мебароем, ки чӣ тавр сохтани тасвири контейнери хурд ва бехатар.
Бо шарофати Docker, эҷод кардани тасвирҳои контейнер ҳеҷ гоҳ осон набуд. Тасвири асосиро муайян кунед, тағиротҳои худро илова кунед ва контейнер эҷод кунед.

Таҷрибаҳои беҳтарини Kubernetes. Эҷоди контейнерҳои хурд

Гарчанде ки ин техника барои оғози кор хеле хуб аст, истифодаи тасвирҳои асосии пешфарз метавонад ҳангоми кор бо тасвирҳои калон, ки пур аз осебпазирӣ ҳастанд, боиси ноамнӣ гардад.

Ғайр аз он, аксари тасвирҳои Docker тасвири асосии Debian ё Ubuntu истифода мебаранд. Гарчанде ки ин мутобиқати аъло ва мутобиқсозии осонро таъмин мекунад (файли Docker танҳо ду сатри кодро мегирад), тасвирҳои асосӣ метавонанд ба контейнери шумо садҳо мегабайт бори иловагӣ илова кунанд. Масалан, файли оддии node.js барои барномаи Go "salam-world" тақрибан 700 мегабайтро мегирад, гарчанде ки худи барномаи воқеӣ ҳамагӣ чанд мегабайт аст.

Таҷрибаҳои беҳтарини Kubernetes. Эҷоди контейнерҳои хурд

Ҳамин тавр, ҳамаи ин хароҷоти изофӣ беҳудаи фазои рақамӣ ва ҷои беҳтарин барои осебпазирӣ ва хатогиҳои амниятӣ мебошад. Пас, биёед ду роҳи кам кардани андозаи тасвири контейнерро дида бароем.

Якум бо истифода аз тасвирҳои хурди асосӣ, дуюмаш намунаи Builder -ро истифода мебарад. Истифодаи тасвирҳои хурдтари асосӣ эҳтимол роҳи осонтарини кам кардани андозаи контейнери шумост. Эҳтимол аст, ки забон ё стек шумо тасвири аслии барномаро тавлид мекунад, ки аз тасвири пешфарз хеле хурдтар аст. Биёед ба контейнери Node.js назар андозем.

Таҷрибаҳои беҳтарини Kubernetes. Эҷоди контейнерҳои хурд

Бо нобаёнӣ, гиреҳ: 8 тасвири асосӣ дар Docker 670 МБ аст, дар ҳоле ки гиреҳ: 8-alpine танҳо 65 МБ ё 10 маротиба хурдтар аст. Истифодаи тасвири хурдтари пойгоҳи Алпӣ андозаи контейнери шуморо ба таври назаррас коҳиш медиҳад. Alpine як тақсимоти хурд ва сабуки Linux мебошад, ки дар байни корбарони Docker хеле маъмул аст, зеро он бо бисёр барномаҳо мувофиқ аст ва андозаи контейнерро хурд нигоҳ медорад. Баръакси тасвири стандартии "гиреҳ" Docker, "node:alpine" бисёр файлҳо ва барномаҳои хидматиро нест мекунад ва танҳо онҳоеро, ки барои иҷрои барномаи шумо заруранд, боқӣ мегузорад.

Барои гузаштан ба тасвири хурдтари асосӣ, танҳо Dockerfile-ро навсозӣ кунед, то бо тасвири нави асосӣ оғоз кунед:

Таҷрибаҳои беҳтарини Kubernetes. Эҷоди контейнерҳои хурд

Ҳоло, бар хилофи тасвири кӯҳнаи сохташуда, шумо бояд рамзи худро ба контейнер нусхабардорӣ кунед ва ҳама гуна вобастагиҳоро насб кунед. Дар Dockerfile нав, контейнер бо гиреҳ оғоз меёбад: тасвири кӯҳӣ, сипас директория барои код эҷод мекунад, вобастагиҳоро бо истифода аз мудири бастаи NPM насб мекунад ва дар ниҳоят server.js -ро иҷро мекунад.

Таҷрибаҳои беҳтарини Kubernetes. Эҷоди контейнерҳои хурд

Ин навсозӣ ба як контейнер оварда мерасонад, ки андозаи он 10 маротиба хурдтар аст. Агар забони барномасозӣ ё стеки шумо кам кардани тасвири асосиро дастгирӣ накунад, истифодаи Alpine Linux-ро баррасӣ кунед. Он инчунин назорати пурраи мундариҷаи контейнерро таъмин мекунад. Истифодаи тасвирҳои хурди асосӣ роҳи олии зуд сохтани контейнерҳои хурд аст. Шумо метавонед бо истифода аз Намунаи Builder ба коҳиши боз ҳам бузургтар ноил шавед.

Таҷрибаҳои беҳтарини Kubernetes. Эҷоди контейнерҳои хурд

Дар забонҳои тафсиршаванда, рамзи ибтидоӣ аввал ба тарҷумон интиқол дода мешавад ва сипас иҷро карда мешавад. Дар забонҳои тартибдодашуда, рамзи ибтидоӣ аввал ба рамзи тартибдодашуда табдил дода мешавад. Тартиб аксар вақт асбобҳоро истифода мебарад, ки воқеан барои иҷро кардани код лозим нестанд. Ин маънои онро дорад, ки шумо метавонед ин асбобҳоро аз контейнери ниҳоӣ комилан хориҷ кунед. Барои ин, шумо метавонед намунаи Builder -ро истифода баред.

Таҷрибаҳои беҳтарини Kubernetes. Эҷоди контейнерҳои хурд

Рамз дар контейнери аввал сохта мешавад ва тартиб дода мешавад. Пас аз он коди тартибдодашуда бе компиляторҳо ва асбобҳое, ки барои тартиб додани код лозиманд, ба контейнери ниҳоӣ бастабандӣ карда мешавад. Биёед ин равандро барои барномаи Go гузаред. Аввалан, мо аз тасвири сохташуда ба Alpine Linux мегузарем.

Таҷрибаҳои беҳтарини Kubernetes. Эҷоди контейнерҳои хурд

Дар файли нави Docker, контейнер бо тасвири golang: alpine оғоз меёбад. Он гоҳ барои код директория эҷод мекунад, онро ба коди ибтидоӣ нусхабардорӣ мекунад, он рамзи сарчашмаро месозад ва барномаро иҷро мекунад. Ин контейнер аз контейнери дарунсохт хеле хурдтар аст, аммо он ҳанӯз ҳам компилятор ва дигар абзорҳои Go-ро дар бар мегирад, ки ба мо аслан лозим нестанд. Пас, биёед танҳо барномаи тартибдодашударо хориҷ кунем ва онро дар контейнери худ гузорем.

Таҷрибаҳои беҳтарини Kubernetes. Эҷоди контейнерҳои хурд

Шумо шояд дар ин Dockerfile чизи аҷиберо мушоҳида кунед: он дорои ду сатри FROM мебошад. Қисмати чаҳор сатри аввал маҳз ба Dockerfile қаблӣ монанд аст, ба истиснои он, ки барои номгузорӣ кардани ин марҳила калимаи калидии AS -ро истифода мебарад. Қисми навбатӣ дорои хати нави FROM мебошад, ки ба мо имкон медиҳад, ки тасвири навро оғоз кунем. Ба ҷои истифодаи тасвири golang:alpine ҳамчун тасвири асосӣ, мо Raw alpine -ро истифода мебарем.

Raw Alpine Linux ягон сертификати SSL насб накардааст, ки боиси ноком шудани аксари зангҳои API тавассути HTTPS мегардад, аз ин рӯ биёед баъзе сертификатҳои решаи CA-ро насб кунем.

Ҳоло ин қисми шавқовар аст: барои нусхабардории рамзи тартибдодашуда аз контейнери якум ба дуюм, шумо метавонед танҳо фармони COPY -ро истифода баред, ки дар сатри 5 қисми дуюм ҷойгир аст. Ин танҳо як файли барномаро нусхабардорӣ мекунад ва ба абзорҳои коммуналии Go таъсир намерасонад. Дар муқоиса бо андозаи тасвири аслии контейнер, ки 700 мегабайт аст, дар Dockerfile бисёрсатҳи нав тасвири контейнерии ҳамагӣ 12 мегабайтро дар бар мегирад - фарқияти калон!
Ҳамин тавр, бо истифода аз тасвирҳои хурди асосӣ ва Намунаи Builder роҳҳои олии эҷоди контейнерҳои хурдтар бидуни кори зиёд мебошанд.
Вобаста аз стеки барнома, метавонад роҳҳои иловагии кам кардани тасвир ва андозаи контейнер вуҷуд дошта бошад, аммо оё контейнерҳои хурд воқеан фоидаи ченшаванда пешкаш мекунанд? Биёед ду соҳаро бубинем, ки контейнерҳои хурд хеле самараноканд: самаранокӣ ва амният.

Барои арзёбии фоидаи кор, вақти эҷоди контейнерро ба назар гиред, онро ба реестр дохил кунед (пуш) ва сипас онро гиред (кашед). Шумо мебинед, ки як контейнери хурдтар аз як контейнери калонтар бартарии хос дорад.

Таҷрибаҳои беҳтарини Kubernetes. Эҷоди контейнерҳои хурд

Docker қабатҳоро кэш мекунад, бинобар ин сохтани минбаъда хеле зуд хоҳад буд. Бо вуҷуди ин, бисёре аз системаҳои CI, ки барои сохтан ва санҷиши контейнерҳо истифода мешаванд, қабатҳои кэш намекунанд, аз ин рӯ ин сарфаи назарраси вақтро ифода мекунад. Тавре ки шумо мебинед, сохтани як контейнери калон вобаста ба кори мошини шумо аз 34 то 54 сония вақтро мегирад, ҳангоми истифодаи зарфе, ки бо истифода аз Намунаи Builder хурд карда шудааст, аз 23 то 28 сония вақт мегирад. Барои ин гуна амалиёт, фоидаи кор 40-50% -ро ташкил медиҳад. Ҳамин тавр, танҳо фикр кунед, ки шумо коди худро чӣ қадар зуд-зуд месозед ва санҷед.

Пас аз сохта шудани контейнер, шумо бояд тасвири онро ба реестри контейнерӣ интиқол диҳед, то онро дар кластери Kubernetes истифода баред. Ман тавсия медиҳам, ки реестри Google Container-ро истифода барем.

Таҷрибаҳои беҳтарини Kubernetes. Эҷоди контейнерҳои хурд

Бо Google Container Registry (GCR), шумо танҳо барои нигоҳдории хом ва шабакавӣ пардохт мекунед, бидуни пардохти иловагии идоракунии контейнер. Он хусусӣ, бехатар ва бениҳоят зуд аст. GCR барои суръат бахшидан ба амалиёти кашидан ҳилаҳои зиёдеро истифода мебарад. Тавре ки шумо мебинед, ворид кардани тасвири Docker Container бо истифода аз go:onbuild вобаста ба кори компютери шумо аз 15 то 48 сония вақт мегирад, дар ҳоле ки як амалиёт бо контейнери хурдтар аз 14 то 16 сонияро мегирад ва бартарии суръат дар мошинҳои каммахсул се баробар меафзояд. Дар мошинҳои калонтар вақт тақрибан якхела аст, зеро GCR кэши глобалиро барои махзани тасвирҳои муштарак истифода мебарад, яъне ба шумо умуман лозим нест, ки онҳоро зеркашӣ кунед. Дар компютери камқувват, CPU мушкил аст, бинобар ин бартарии истифодаи контейнерҳои хурдтар хеле назаррас аст.

Агар шумо GCR-ро истифода баред, ман тавсия медиҳам, ки Google Container Builder (GCB) -ро ҳамчун як қисми системаи сохтани худ истифода баред.

Таҷрибаҳои беҳтарини Kubernetes. Эҷоди контейнерҳои хурд

Тавре ки шумо мебинед, истифодаи он ба шумо имкон медиҳад, ки дар кам кардани вақти кори Build+Push назар ба як мошини баландсифат натиҷаҳои назаррас ба даст оред - дар ин ҳолат, раванди сохтан ва фиристодани контейнерҳо ба мизбон тақрибан 2 маротиба тезтар аст. Ғайр аз он, шумо ҳар рӯз 120 дақиқа вақти ройгони сохтмон мегиред, ки аксари ниёзҳои эҷоди контейнерро қонеъ мекунад.

Минбаъд муҳимтарин ченаки иҷроиш меояд - суръати кашидан ё зеркашии контейнерҳо. Гарчанде ки шумо дар бораи вақти тела додан махсусан ташвиш надоред, дарозии раванди кашидан ба кори умумии система ба таври ҷиддӣ таъсир мерасонад. Фарз мекунем, ки шумо кластери се гиреҳ доред ва яке аз онҳо ноком мешавад. Агар шумо системаи идоракуниро ба мисли Google Kubernetes Engine истифода баред, он ба таври худкор гиреҳи нокомро бо наваш иваз мекунад. Аммо, ин гиреҳи нав комилан холӣ хоҳад буд ва шумо бояд ҳамаи контейнерҳои худро ба он кашед, то онро ба кор дароред. Агар амалиёти кашолакунӣ муддати тӯлонӣ талаб кунад, кластери шумо дар ин муддат иҷрои камро эҳсос хоҳад кард.

Сенарияҳои зиёде мавҷуданд, ки ин метавонад рух диҳад: илова кардани гиреҳи нав ба кластер, навсозии гиреҳҳо ё ҳатто гузариш ба контейнери нав барои ҷойгиркунӣ. Аз ин рӯ, кам кардани вақти кашидан муҳим аст. Ин раднопазир аст, ки контейнери хурд назар ба як контейнери калон тезтар зеркашӣ карда мешавад. Агар шумо якчанд контейнерҳоро дар кластери Kubernetes иҷро кунед, сарфаи вақт метавонад назаррас бошад.

Таҷрибаҳои беҳтарини Kubernetes. Эҷоди контейнерҳои хурд

Муқоисаи зерро бубинед: амалиёти кашидан бо зарфҳои хурд вобаста ба кори мошин назар ба ҳамон амалиёт бо истифодаи go:onbuild 4-9 маротиба тезтар мегирад. Истифодаи тасвирҳои муштарак ва хурди контейнерӣ вақт ва суръатро, ки бо он гиреҳҳои нави Kubernetes ҷойгир ва ба онлайн интиқол дода мешаванд, ба таври назаррас суръат мебахшад.

Биёед масъалаи амниятро дида бароем. Гумон меравад, ки контейнерҳои хурдтар нисбат ба контейнерҳои калонтар бехатартаранд, зеро онҳо сатҳи ҳамлаи хурдтар доранд. Оё ин воқеан дуруст аст? Яке аз хусусиятҳои муфиди Google Container Registry қобилияти он барои скан кардани контейнерҳои шумо барои осебпазирӣ мебошад. Чанд моҳ пеш, ман ҳам контейнерҳои дарунсохт ва ҳам бисёрзинагӣ сохтам, бинобар ин биёед бубинем, ки оё ягон осебпазирӣ вуҷуд дорад.

Таҷрибаҳои беҳтарини Kubernetes. Эҷоди контейнерҳои хурд

Натиҷаҳо ҳайратоваранд: контейнери хурд танҳо 3 осебпазирии мӯътадилро пайдо кард, дар ҳоле ки дар контейнери калон 16 осебпазирии муҳим ва 376 осебпазирии дигар мавҷуд аст. Ба мундариҷаи контейнери калон нигоҳ карда, маълум мешавад, ки аксари масъалаҳои амниятӣ ба замимаи мо ҳеҷ иртиботе надоранд, аммо бо барномаҳое, ки мо ҳатто истифода намебарем, алоқаманд аст. Ҳамин тавр, вақте ки одамон дар бораи сатҳи ҳамлаи калон гап мезананд, маҳз ҳаминро дар назар доранд.

Таҷрибаҳои беҳтарини Kubernetes. Эҷоди контейнерҳои хурд

Талабот равшан аст: контейнерҳои хурд эҷод кунед, зеро онҳо ба системаи шумо фоидаҳои воқеӣ ва бехатарӣ медиҳанд.

Таҷрибаҳои беҳтарини Kubernetes. Ташкилоти Кубернетес бо фазои ном

Видеоро нависед

Баъзе рекламаҳо 🙂

Ташаккур ба шумо барои бо мо мондан. Мақолаҳои мо ба шумо маъқуланд? Мехоҳед мундариҷаи ҷолибтарро бубинед? Бо фармоиш додан ё тавсия додан ба дӯстон моро дастгирӣ кунед, абр VPS барои таҳиягарон аз $4.99, аналоги беназири серверҳои сатҳи ибтидоӣ, ки аз ҷониби мо барои шумо ихтироъ шудааст: Тамоми ҳақиқат дар бораи VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps аз $19 ё чӣ гуна мубодила кардани сервер? (бо RAID1 ва RAID10, то 24 ядро ​​ва то 40 ГБ DDR4 дастрас аст).

Dell R730xd дар маркази додаҳои Equinix Tier IV дар Амстердам 2 маротиба арзонтар аст? Танҳо дар ин ҷо 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 ТВ аз $199 дар Нидерландия! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - аз $99! Дар бораи хондан Корпоратсияи инфраструктураро чӣ гуна бояд сохт. синф бо истифодаи серверҳои Dell R730xd E5-2650 v4 ба маблағи 9000 XNUMX евро барои як динор?

Манбаъ: will.com

Илова Эзоҳ