Kubernetes мыкты тажрыйбалары. Чакан контейнерлерди түзүү

Kubernetes мыкты тажрыйбалары. Чакан контейнерлерди түзүү

Kubernetes'ке жайылтуунун биринчи кадамы - бул колдонмоңузду контейнерге жайгаштыруу. Бул серияда биз кичинекей, коопсуз контейнер сүрөтүн кантип түзө аларыңызды карап чыгабыз.
Dockerдин аркасында контейнер сүрөттөрүн түзүү эч качан оңой болгон эмес. Негизги сүрөттү көрсөтүңүз, өзгөртүүлөрүңүздү кошуп, контейнерди түзүңүз.

Kubernetes мыкты тажрыйбалары. Чакан контейнерлерди түзүү

Бул ыкма баштоо үчүн сонун болгону менен, демейки базалык сүрөттөрдү колдонуу аялуу жерлерге толгон чоң сүрөттөр менен кооптуу иштөөгө алып келиши мүмкүн.

Кошумчалай кетсек, Dockerдеги сүрөттөрдүн көбү негизги сүрөт үчүн Debian же Ubuntu колдонушат жана бул эң сонун шайкештикти жана жеңил ыңгайлаштырууну камсыз кылганы менен (Docker файлы эки эле кодду талап кылат), базалык сүрөттөр контейнериңизге жүздөгөн мегабайт кошумча жүктү кошо алат. Мисалы, Go "салам дүйнө" тиркемеси үчүн жөнөкөй node.js файлы болжол менен 700 мегабайт, ал эми сиздин иш жүзүндөгү тиркемеңиз бир нече мегабайт өлчөмүндө гана.

Kubernetes мыкты тажрыйбалары. Чакан контейнерлерди түзүү

Ошентип, бул кошумча жүктүн баары санариптик мейкиндикти текке кетирүү жана коопсуздуктун алсыздыктары жана мүчүлүштүктөр үчүн эң сонун жашынуучу жай. Ошентип, контейнер сүрөтүнүн көлөмүн кичирейтүүнүн эки жолун карап көрөлү.

Биринчиси - кичинекей базалык сүрөттөрдү колдонуу, экинчиси - Builder Pattern колдонуу. Кичинекей базалык сүрөттөрдү колдонуу, балким, контейнериңиздин көлөмүн азайтуунун эң оңой жолу. Кыязы, сиз колдонуп жаткан тил же стек демейки сүрөттөлүштөн бир топ кичине оригиналдуу колдонмо сүрөтүн берет. Келгиле, биздин node.js контейнерибизди карап көрөлү.

Kubernetes мыкты тажрыйбалары. Чакан контейнерлерди түзүү

Докерде демейки боюнча, түйүн:8 негизги сүрөттүн өлчөмү 670 МБ, ал эми түйүн: 8-альпиялык сүрөттүн көлөмү болгону 65 МБ, башкача айтканда, 10 эсе кичине. Кичинекей Альпинин негизги сүрөтүн колдонуу менен, сиз контейнериңиздин көлөмүн бир топ кичирейтесиз. Alpine - бул Docker колдонуучулары арасында абдан популярдуу болгон кичинекей жана жеңил Linux дистрибьютору, анткени ал контейнерлерди кичине кармап, көптөгөн тиркемелерге шайкеш келет. Стандарттык Docker "түйүнүнүн" сүрөтүнөн айырмаланып, "node: alpine" көптөгөн кызматтык файлдарды жана программаларды жок кылып, колдонмоңузду иштетүү үчүн жетиштүү болгондорун гана калтырат.

Кичирээк базалык сүрөткө өтүү үчүн, жаңы базалык сүрөт менен иштөө үчүн Dockerfileди жаңыртыңыз:

Kubernetes мыкты тажрыйбалары. Чакан контейнерлерди түзүү

Эми, эски орнотулган сүрөттөлүштөн айырмаланып, кодуңузду контейнерге көчүрүп, көз карандылыкты орнотуу керек. Жаңы Dockerfileде контейнер node:alpine сүрөтү менен башталат, андан кийин код үчүн каталогду түзөт, NPM пакет башкаргычын колдонуп, көз карандылыкты орнотот жана аягында server.js иштетет.

Kubernetes мыкты тажрыйбалары. Чакан контейнерлерди түзүү

Бул жаңыртуу көлөмү 10 эсе аз болгон контейнерге алып келет. Эгерде сиздин программалоо тилиңизде же стекиңизде негизги сүрөттү кыскартуу функциясы жок болсо, Alpine Linux колдонуңуз. Ал ошондой эле контейнердин мазмунун толук башкаруу мүмкүнчүлүгүн берет. Чакан базалык сүрөттөрдү колдонуу - кичинекей контейнерлерди тез түзүүнүн эң сонун жолу. Бирок андан да чоң кыскартууга Builder Pattern жардамы менен жетишүүгө болот.

Kubernetes мыкты тажрыйбалары. Чакан контейнерлерди түзүү

Котормо тилдерде булак коду адегенде котормочуга берилип, андан соң түздөн-түз аткарылат. Компиляцияланган тилдерде баштапкы код алгач компиляцияланган кодго айландырылат. Бирок, компиляция көбүнчө кодду иштетүү үчүн кереги жок куралдарды колдонот. Бул сиз бул куралдарды акыркы контейнерден толугу менен алып салсаңыз болот дегенди билдирет. Бул үчүн Builder Pattern колдоно аласыз.

Kubernetes мыкты тажрыйбалары. Чакан контейнерлерди түзүү

Код биринчи контейнерде түзүлөт жана түзүлөт. Андан кийин компиляцияланган код ошол кодду компиляциялоо үчүн зарыл болгон компиляторлор жана куралдарсыз акыркы контейнерге топтолот. Бул процесс аркылуу Go тиркемесин иштетели. Биринчиден, биз орнотулган сүрөттөлүштөн Alpine Linuxке өтөбүз.

Kubernetes мыкты тажрыйбалары. Чакан контейнерлерди түзүү

Жаңы Dockerfileде контейнер голанг: альп сүрөтү менен башталат. Андан кийин ал код үчүн каталогду түзүп, аны баштапкы кодго көчүрүп, ошол баштапкы кодду түзүп, тиркемени иштетет. Бул контейнер орнотулган контейнерден бир топ кичине, бирок ал дагы эле компиляторду жана бизге кереги жок башка Go куралдарын камтыйт. Ошентип, жөн гана түзүлгөн программаны чыгарып, аны өзүнүн контейнерине салалы.

Kubernetes мыкты тажрыйбалары. Чакан контейнерлерди түзүү

Бул Docker файлында кызыктай нерсени байкасаңыз болот: ал эки FROM сызыгын камтыйт. Биринчи 4 сап бөлүмү мурунку Dockerfile менен так окшош көрүнөт, бирок бул этапты атоо үчүн AS ачкыч сөзүн колдонот. Кийинки бөлүмдө жаңы сүрөттү баштоо үчүн жаңы FROM сызыгы бар, анда голанг: альп сүрөтүнүн ордуна биз негизги сүрөт катары Raw alpine колдонобуз.

Raw Alpine Linux'тун SSL тастыктамалары орнотулган эмес, бул HTTPS аркылуу API чалууларынын көбү ишке ашпай калышына алып келет, андыктан кээ бир түпкү CA тастыктамаларын орнотуп алалы.

Эми кызыктуу бөлүк келет: түзүлгөн кодду биринчи контейнерден экинчисине көчүрүү үчүн, сиз жөн гана экинчи бөлүмдүн 5-сапында жайгашкан COPY буйругун колдонсоңуз болот. Ал бир гана колдонмо файлын көчүрөт жана Go утилитасынын куралдарына таасирин тийгизбейт. Жаңы көп баскычтуу Docker файлы 12 мегабайт болгон баштапкы контейнер сүрөтүнө салыштырмалуу көлөмү болгону 700 мегабайт болгон контейнер сүрөтүн камтыйт, бул чоң айырма!
Ошентип, кичинекей базалык сүрөттөрдү жана Builder Patternди колдонуу - көп жумушсуз эле кичинекей контейнерлерди түзүүнүн эң сонун жолу.
Колдонмо стекине жараша сүрөттү жана контейнердин өлчөмүн кичирейтүүнүн кошумча жолдору болушу мүмкүн, бирок кичинекей контейнерлердин чындап эле өлчөнгөн пайдасы барбы? Келгиле, кичинекей контейнерлер өтө натыйжалуу болгон эки чөйрөнү карап көрөлү - аткаруу жана коопсуздук.

Иштин натыйжалуулугун жогорулатууга баа берүү үчүн, контейнерди түзүү процессинин узактыгын карап, аны реестрге киргизүү (түртүү), андан кийин аны ошол жерден алуу (тартуу). Кичинекей идиш чоңураак контейнерге караганда өзгөчө артыкчылыгы бар экенин көрө аласыз.

Kubernetes мыкты тажрыйбалары. Чакан контейнерлерди түзүү

Докер катмарларды кэштейт, андыктан кийинки түзүлүштөр абдан тез болот. Бирок, контейнерлерди куруу жана сыноо үчүн колдонулган көптөгөн CI системалары катмарларды кэштебейт, андыктан убакытты үнөмдөйт. Көрүнүп тургандай, машинаңыздын кубаттуулугуна жараша чоң контейнерди куруу убактысы 34 секунддан 54 секундага чейин, ал эми Builder Pattern аркылуу контейнерди колдонууда 23 секунддан 28 секундага чейин кыскарган. Мындай түрдөгү операциялар үчүн өндүрүмдүүлүк 40-50%ды түзөт. Ошентип, кодуңузду канча жолу куруп, сынап жатканыңыз жөнүндө ойлонуп көрүңүз.

Контейнер курулгандан кийин, анын сүрөтүн (контейнердин сүрөтүн түртүп) контейнер реестрине түртүшүңүз керек, ошондо сиз аны Kubernetes кластериңизде колдоно аласыз. Мен Google Container Registry колдонууну сунуштайм.

Kubernetes мыкты тажрыйбалары. Чакан контейнерлерди түзүү

Google Container Registry (GCR) менен сиз чийки сактоо жана тармак үчүн гана төлөйсүз жана контейнерди башкаруу үчүн кошумча төлөмдөр жок. Бул купуя, коопсуз жана абдан тез. GCR тартуу операциясын тездетүү үчүн көптөгөн амалдарды колдонот. Көрүнүп тургандай, go:onbuild жардамы менен Docker Container Image контейнерин салуу компьютердин иштешине жараша 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 Контейнер Реестринин эң пайдалуу өзгөчөлүктөрүнүн бири – бул сиздин контейнерлериңиздеги аялуу жерлерди автоматтык түрдө сканерлөө мүмкүнчүлүгү. Бир нече ай мурун мен курулган жана көп баскычтуу контейнерлерди түзгөм, андыктан ал жерде кандайдыр бир аялуу жерлер бар-жогун карап көрөлү.

Kubernetes мыкты тажрыйбалары. Чакан контейнерлерди түзүү

Натыйжа укмуштуудай болуп саналат: кичинекей контейнерде 3 гана орто чабал, ал эми чоң контейнерде 16 критикалык жана 376 башка аялуу табылган. Эгер чоң контейнердин мазмунун карасак, коопсуздук көйгөйлөрүнүн көбү биздин тиркеме менен эч кандай байланышы жок, бирок биз колдонбогон программаларга байланыштуу экенин көрөбүз. Ошентип, адамдар чоң чабуулдун бети жөнүндө айтканда, алар эмнени билдирет.

Kubernetes мыкты тажрыйбалары. Чакан контейнерлерди түзүү

Алып кетчү нерсе түшүнүктүү: кичинекей контейнерлерди куруңуз, анткени алар сиздин тутумуңузга реалдуу аткарууну жана коопсуздукту камсыз кылат.

Kubernetes мыкты тажрыйбалары. Ат мейкиндиги менен Kubernetes уюштуруу

Кээ бир жарнамалар 🙂

Биз менен болгонуңуз үчүн рахмат. Биздин макалалар сизге жагабы? Көбүрөөк кызыктуу мазмунду көргүңүз келеби? Буйрутма берүү же досторуңузга сунуштоо менен бизди колдоңуз, иштеп чыгуучулар үчүн булут VPS 4.99 доллардан, биз сиз үчүн ойлоп тапкан баштапкы деңгээлдеги серверлердин уникалдуу аналогу: VPS (KVM) E5-2697 v3 (6 өзөктүү) 10 ГБ DDR4 480 ГБ SSD 1 Гбит/с 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 доллардан! Жөнүндө окуу Инфраструктураны кантип куруу керек. бир тыйынга 730 евро турган Dell R5xd E2650-4 v9000 серверлерин колдонуу менен класс?

Source: www.habr.com

Комментарий кошуу