Тасвирҳои истеҳсолӣ барои k8s

Ин ҳикоя дар бораи он аст, ки чӣ гуна мо контейнерҳоро дар муҳити истеҳсолӣ истифода мебарем, махсусан Кубернетес. Мақола ба ҷамъоварии метрика ва гузоришҳо аз контейнерҳо, инчунин сохтани тасвирҳо бахшида шудааст.

Тасвирҳои истеҳсолӣ барои k8s

Мо аз ширкати fintech Exness ҳастем, ки хидматрасониро барои тиҷорати онлайн ва маҳсулоти финтех барои B2B ва B2C таҳия мекунад. R&D мо дорои гурӯҳҳои гуногуни гуногун аст, шӯъбаи рушд 100+ корманд дорад.

Мо гурӯҳеро намояндагӣ мекунем, ки барои платформаи таҳиягарони мо барои ҷамъоварӣ ва иҷро кардани код масъул аст. Аз ҷумла, мо барои ҷамъоварӣ, нигоҳдорӣ ва гузориш додани ченакҳо, гузоришҳо ва рӯйдодҳо аз барномаҳо масъулем. Мо дар айни замон тақрибан се ҳазор контейнерҳои Docker-ро дар муҳити истеҳсолӣ истифода мебарем, нигаҳдории маълумоти бузурги 50 TB-и худро нигоҳ медорем ва қарорҳои меъмориро пешниҳод менамоем, ки дар атрофи инфрасохтори мо сохта шудаанд: Kubernetes, Rancher ва провайдерҳои гуногуни абрии ҷамъиятӣ. 

Ҳавасмандии мо

Чӣ месузад? Ҳеҷ кас ҷавоб дода наметавонад. Оташ куҷост? Фаҳмидани он душвор аст. Он кай оташ гирифт? Шумо метавонед фаҳмед, аммо дарҳол не. 

Тасвирҳои истеҳсолӣ барои k8s

Чаро баъзе контейнерҳо истодаанд, дар ҳоле ки дигарон афтодаанд? Кадом контейнер гунаҳкор буд? Охир, беруни зарфхо як хел аст, вале дар дохили хар кадомаш Нео-хои худро дорад.

Тасвирҳои истеҳсолӣ барои k8s

Таҳиягарони мо бачаҳои босалоҳият мебошанд. Онҳо хидматҳои хубе мекунанд, ки ба ширкат фоида меорад. Аммо вақте ки контейнерҳо бо барномаҳо гум мешаванд, нокомиҳо мавҷуданд. Як контейнер CPU аз ҳад зиёд истеъмол мекунад, дигаре шабакаро истеъмол мекунад, сеюмӣ амалиёти воридот / баромадро истеъмол мекунад ва чорум комилан норавшан аст, ки бо розеткаҳо чӣ кор мекунад. Ҳамааш меафтад ва киштӣ ғарқ мешавад. 

Агентиҳо

Барои фаҳмидани он ки дар дохили он чӣ рӯй дода истодааст, мо тасмим гирифтем, ки агентҳоро мустақиман дар контейнерҳо ҷойгир кунем.

Тасвирҳои истеҳсолӣ барои k8s

Ин агентҳо барномаҳои маҳдудкунанда мебошанд, ки контейнерҳоро дар чунин ҳолат нигоҳ медоранд, ки якдигарро нашикананд. Агентҳо стандартизатсия карда шудаанд ва ин имкон медиҳад, ки муносибати стандартишуда ба хидматрасонии контейнерҳо истифода шавад. 

Дар ҳолати мо, агентҳо бояд гузоришҳоро дар формати стандартӣ, нишонашуда ва бандшуда пешниҳод кунанд. Онҳо инчунин бояд ба мо ченакҳои стандартишударо пешниҳод кунанд, ки аз нуқтаи назари татбиқи тиҷорат васеъ карда мешаванд.

Агентҳо инчунин маънои утилитҳоро барои истифода ва нигоҳдорӣ доранд, ки метавонанд дар системаҳои гуногуни оркестр кор кунанд, ки тасвирҳои гуногунро дастгирӣ мекунанд (Debian, Alpine, Centos ва ғайра).

Дар ниҳоят, агентҳо бояд CI/CD-и оддиро, ки файлҳои Docker-ро дар бар мегиранд, дастгирӣ кунанд. Дар акси ҳол, киштӣ ба ҳам меафтад, зеро контейнерҳо аз рӯи рельсҳои «каҷ» интиқол дода мешаванд.

Сохтани раванд ва дастгоҳи тасвири мақсаднок

Барои нигоҳ доштани ҳама чиз стандартӣ ва идорашаванда, бояд як навъ раванди сохтани стандартӣ риоя карда шавад. Бинобар ин, мо тасмим гирифтем, ки контейнерҳоро бо контейнерҳо ҷамъ кунем - ин рекурсия аст.

Тасвирҳои истеҳсолӣ барои k8s

Дар ин ҷо контейнерҳо бо контурҳои мустаҳкам тасвир шудаанд. Ҳамзамон, онҳо тасмим гирифтанд, ки маҷмӯаҳои тақсимотро дар онҳо гузоранд, то "ҳаёт ба малина монанд накунад". Чаро ин кор карда шуд, мо дар зер шарҳ медиҳем.
 
Натиҷа як асбоби сохтан аст - контейнери версияи мушаххас, ки ба версияҳои тақсимоти мушаххас ва версияҳои мушаххаси скрипт истинод мекунад.

Мо онро чӣ тавр истифода мебарем? Мо як Hub Docker дорем, ки дорои контейнер мебошад. Мо онро дар дохили системаи худ инъикос мекунем, то аз вобастагии беруна халос шавем. Дар натиҷа як контейнер бо ранги зард нишон дода шудааст. Мо як қолаберо эҷод мекунем, то ҳамаи дистрибюсияҳо ва скриптҳои лозимаро дар контейнер насб кунем. Пас аз ин, мо тасвири барои истифода омодаро ҷамъ меорем: таҳиягарон ба он код ва баъзе вобастагии махсуси худро мегузоранд. 

Ин равиш чӣ фоида дорад? 

  • Якум, назорати версияи пурраи асбобҳои сохтмон - сохтани контейнер, скрипт ва версияҳои тақсимот. 
  • Сониян, мо ба стандартизатсия ноил шудем: мо шаблонҳо, тасвири мобайнӣ ва барои истифода омодаро ҳамин тавр эҷод мекунем. 
  • Сеюм, контейнерҳо ба мо қобили интиқол медиҳанд. Имрӯз мо Gitlab-ро истифода мебарем ва фардо мо ба TeamCity ё Ҷенкинс мегузарем ва мо метавонем контейнерҳои худро ҳамин тавр идора кунем. 
  • Чорум, кам кардани вобастагӣ. Тасодуфан набуд, ки мо маҷмӯаҳои тақсимотро дар контейнер ҷойгир кардем, зеро ин ба мо имкон медиҳад, ки ҳар дафъа онҳоро аз Интернет зеркашӣ кунем. 
  • Панҷум, суръати сохтмон зиёд шуд - мавҷудияти нусхаҳои маҳаллии тасвирҳо ба шумо имкон медиҳад, ки вақтро барои зеркашӣ пешгирӣ кунед, зеро тасвири маҳаллӣ вуҷуд дорад. 

Ба ибораи дигар, мо ба раванди идорашаванда ва фасеҳи васлкунӣ ноил шудем. Мо ҳамон асбобҳоро барои сохтани ҳама гуна контейнерҳои версияи пурра истифода мебарем. 

Тартиби сохтани мо чӣ гуна кор мекунад

Тасвирҳои истеҳсолӣ барои k8s

Ассамблея бо як фармон оғоз карда мешавад, раванд дар тасвир иҷро карда мешавад (бо ранги сурх таъкид карда мешавад). Таҳиягар дорои файли Docker (бо ранги зард таъкид шудааст), мо онро бо тағирёбандаҳо бо арзишҳо иваз мекунем. Ва дар роҳ мо сарлавҳаҳо ва поёнтарро илова мекунем - инҳо агентҳои мо мебошанд. 

Сарлавҳа тақсимотҳоро аз тасвирҳои мувофиқ илова мекунад. Ва поёнтар хидматҳои моро дар дохили он насб мекунад, оғози сарбории корӣ, сабти ном ва агентҳои дигарро танзим мекунад, нуқтаи вурудро иваз мекунад ва ғайра. 

Тасвирҳои истеҳсолӣ барои k8s

Мо дуру дароз фикр мекардем, ки назоратчй гузошта шавад ё не. Дар охир мо тасмим гирифтем, ки ба ӯ лозим аст. Мо S6-ро интихоб кардем. Роҳбар идоракунии контейнерро таъмин мекунад: ба шумо имкон медиҳад, ки ба он пайваст шавед, агар раванди асосӣ вайрон шавад ва идоракунии дастии контейнерро бидуни аз нав сохтани он таъмин мекунад. Журналҳо ва ченакҳо равандҳое мебошанд, ки дар дохили контейнер кор мекунанд. Онҳоро низ бо ягон роҳ назорат кардан лозим аст ва мо ин корро бо кӯмаки супервайзер мекунем. Ниҳоят, S6 нигоҳубини хона, коркарди сигнал ва дигар вазифаҳоро иҷро мекунад.

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

 Тасвирҳои истеҳсолӣ барои k8s

Барои як контейнер мо дар Docker ва Kubernetes дарахтони гуногуни равандро мегирем:

Тасвирҳои истеҳсолӣ барои k8s

Пардохт дар зери назорати S6 иҷро карда мешавад. Ба коллектор ва рӯйдодҳо диққат диҳед - инҳо агентҳои мо барои гузоришҳо ва метрика масъуланд. Кубернетес онҳоро надорад, аммо Докер дорад. Чаро? 

Агар мо ба мушаххасоти "под" (минбаъд - Kubernetes pod) назар андозем, мо мебинем, ки контейнери рӯйдодҳо дар як подкаст иҷро карда мешавад, ки дорои контейнери коллектори алоҳида мебошад, ки вазифаи ҷамъоварии метрика ва гузоришҳоро иҷро мекунад. Мо метавонем қобилиятҳои Kubernetes -ро истифода барем: контейнерҳоро дар як порча, дар як раванд ва/ё фазои шабакавӣ. Дар асл агентҳои худро муаррифӣ кунед ва баъзе вазифаҳоро иҷро кунед. Ва агар ҳамон контейнер дар Docker ба кор андохта шавад, он ҳама қобилиятҳоро ҳамчун баромад мегирад, яъне он метавонад гузоришҳо ва ченакҳоро интиқол диҳад, зеро агентҳо дар дохили он ба кор андохта мешаванд. 

Метрикҳо ва гузоришҳо

Интиқоли ченакҳо ва гузоришҳо кори мураккаб аст. Дар қарори ӯ якчанд ҷанбаҳо мавҷуданд.
Инфрасохтор на барои ба таври оммавӣ фиристодани логҳо, балки барои иҷрои борҳои фоиданок сохта шудааст. Яъне, ин раванд бояд бо талаботи ҳадди ақали захираҳои контейнерӣ иҷро карда шавад. Мо мекӯшем, ки ба таҳиягарони худ кӯмак расонем: "Контейнери Docker Hub гиред, онро идора кунед ва мо метавонем гузоришҳоро расонем." 

Ҷанбаи дуюм маҳдуд кардани ҳаҷми гузоришҳо мебошад. Агар афзоиши ҳаҷми гузоришҳо дар якчанд контейнер ба амал ояд (барнома стек-traceро дар як ҳалқа мебарорад), сарборӣ ба CPU, каналҳои иртиботӣ ва системаи коркарди гузоришҳо меафзояд ва ин ба кори ҳост ҳамчун сервер таъсир мерасонад. пурра ва дигар контейнерҳо дар болои мизбон, пас баъзан ин боиси «афтидани» мизбон мегардад. 

Ҷанбаи сеюм ин аст, ки зарур аст, ки ҳарчи бештари усулҳои ҷамъоварии метрикаро аз қуттӣ дастгирӣ кард. Аз хондани файлҳо ва пурсиши Prometheus-endpoint то истифодаи протоколҳои мушаххаси барнома.

Ва ҷанбаи охирин кам кардани истеъмоли захираҳо мебошад.

Мо як ҳалли кушодаи Go бо номи Telegraf интихоб кардем. Ин як пайвасткунаки универсалӣ мебошад, ки зиёда аз 140 намуди каналҳои вуруд (плагинҳои вуруд) ва 30 намуди каналҳои баромадро (плагинҳои баромад) дастгирӣ мекунад. Мо онро ба анҷом расонидем ва ҳоло мо ба шумо мегӯям, ки чӣ тавр мо онро бо истифода аз Kubernetes ҳамчун намуна истифода мебарем. 

Тасвирҳои истеҳсолӣ барои k8s

Фарз мекунем, ки таҳиягар сарбории корро ҷойгир мекунад ва Кубернетес дархост барои сохтани подкаст мегирад. Дар ин лаҳза, контейнер бо номи Коллектор ба таври худкор барои ҳар як подк сохта мешавад (мо вебхуки мутатсияро истифода мебарем). Коллектор агенти мост. Дар оғоз, ин контейнер худро барои кор бо Prometheus ва системаи ҷамъоварии гузоришҳо танзим мекунад.

  • Барои ин, он тавзеҳи подҳоро истифода мебарад ва вобаста ба мундариҷаи худ, масалан, нуқтаи охири Прометейро эҷод мекунад; 
  • Дар асоси тавсифи подкаст ва танзимоти мушаххаси контейнер, он тасмим мегирад, ки чӣ гуна гузоришҳоро интиқол диҳад.

Мо гузоришҳоро тавассути API Docker ҷамъоварӣ мекунем: таҳиягарон танҳо бояд онҳоро дар stdout ё stderr гузоранд ва Коллектор онро ҷудо мекунад. Гузоришҳо дар қисмҳо бо каме таъхир ҷамъоварӣ карда мешаванд, то сарбории эҳтимолии мизбонро пешгирӣ кунанд. 

Метрикҳо дар сарбории корӣ (равандҳо) дар контейнерҳо ҷамъ карда мешаванд. Ҳама чиз қайд карда мешавад: фазои ном, зери ва ғайра, ва сипас ба формати Prometheus табдил дода мешавад - ва барои ҷамъоварӣ дастрас мешавад (ба истиснои гузоришҳо). Мо инчунин гузоришҳо, ченакҳо ва рӯйдодҳоро ба Кафка мефиристем ва минбаъд:

  • Гузоришҳо дар Graylog дастрасанд (барои таҳлили визуалӣ);
  • Гузоришҳо, ченакҳо, рӯйдодҳо ба Clickhouse барои нигоҳдории дарозмуддат фиристода мешаванд.

Ҳама чиз дар AWS якхела кор мекунад, танҳо мо Graylog-ро бо Кафка бо Cloudwatch иваз мекунем. Мо гузоришҳоро ба он ҷо мефиристем ва ҳама чиз хеле қулай мешавад: фавран маълум мешавад, ки онҳо ба кадом кластер ва контейнер тааллуқ доранд. Ин ба Google Stackdriver низ дахл дорад. Яъне, нақшаи мо ҳам дар дохили бино бо Кафка ва ҳам дар абр кор мекунад. 

Агар мо Kubernetes бо pods надорем, схема каме мураккабтар аст, аммо он дар ҳамон принсипҳо кор мекунад.

Тасвирҳои истеҳсолӣ барои k8s

Ҳамин равандҳо дар дохили контейнер иҷро карда мешаванд, онҳо бо истифода аз S6 ташкил карда мешаванд. Ҳама равандҳои якхела дар дохили як контейнер иҷро мешаванд.

Дар натиҷа,

Мо як ҳалли мукаммалро барои сохтан ва оғоз кардани тасвирҳо бо имконоти ҷамъоварӣ ва интиқоли гузоришҳо ва ченакҳо офаридаем:

  • Мо як равиши стандартикунонидашудаи васлкунии тасвирҳоро таҳия кардем ва дар асоси он мо қолибҳои CI таҳия кардем;
  • Агентҳои ҷамъоварии маълумот васеъшавии Telegraf-и мо мебошанд. Мо онхоро дар истехсолот нагз санчида;
  • Мо webhook-и мутатсияро барои татбиқи контейнерҳо бо агентҳо дар pods истифода мебарем; 
  • Интегратсияшуда ба экосистемаи Kubernetes/Rancher;
  • Мо метавонем як контейнерҳоро дар системаҳои гуногуни оркестр иҷро кунем ва натиҷаи интизориамонро ба даст орем;
  • Конфигуратсияи комилан динамикии идоракунии контейнерро эҷод кард. 

Ҳаммуаллиф: Илья Прудников

Манбаъ: will.com

Илова Эзоҳ