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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Бо Google Container Registry (GCR) шумо танҳо барои нигоҳдории хом ва шабака пардохт мекунед ва ҳеҷ гуна ҳаққи идоракунии контейнерҳои иловагӣ вуҷуд надорад. Ин хусусӣ, бехатар ва хеле зуд аст. GCR барои суръат бахшидан ба амалиёти кашидан ҳилаҳои зиёдеро истифода мебарад. Тавре ки шумо мебинед, ворид кардани контейнери Docker Container Image бо истифода аз go:onbuild вобаста ба кори компютер аз 15 то 48 сония вақт мегирад ва ҳамон амалиёт бо контейнери хурдтар аз 14 то 16 сония ва барои мошинҳои каммахсул вақтро мегирад. афзалият дар суръати кор 3 баробар меафзояд. Барои мошинҳои калонтар, вақт тақрибан якхела аст, зеро 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

Илова Эзоҳ