Ҷойгир кардани барномаҳо ба VM, Nomad ва Kubernetes

Салом ба ҳама! Номи ман Павел Агалетский. Ман ҳамчун роҳбари гурӯҳ дар гурӯҳе кор мекунам, ки системаи интиқоли Lamoda-ро таҳия мекунад. Дар соли 2018 ман дар конфронси HighLoad++ суханронӣ кардам ва имрӯз мехоҳам стенограммаи гузориши худро пешниҳод кунам.

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

Ҷойгир кардани барномаҳо дар VM

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

Чаро ин кор карда шуд?

Вақте ки мо версияҳои нави замимаи худро ҷойгир кардем, мо мехостем паҳншавии бефосила, яъне бидуни оқибатҳои намоён барои корбаронро таъмин кунем. Ин ба туфайли он ба даст омад, ки версияи навбатии тартибдодашуда бо истифода аз Ansible ба думбол бароварда шуд. Дар он ҷо одамоне, ки дар ҷойгиркунӣ иштирок доштанд, метавонистанд тафтиш кунанд ва боварӣ ҳосил кунанд, ки ҳама чиз хуб аст: ҳама ченакҳо, бахшҳо ва барномаҳо кор мекунанд; скриптхои зарурй ба кор андохта мешаванд. Танҳо пас аз он ки онҳо боварӣ ҳосил карданд, ки ҳама чиз хуб аст, ҳаракати нақлиёт иваз карда шуд. Он ба сервере, ки қаблан дум буд, оғоз ёфт. Ва он чизе, ки қаблан сарлавҳа буд, бидуни трафики корбар боқӣ монд, дар ҳоле ки дар он версияи қаблии замимаи мо мавҷуд буд.

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

Дар хамаи ин мо чй гуна бартарихоро дидем?

  1. Пеш аз ҳама, кофӣ аст он танҳо кор мекунад. Ҳама мефаҳманд, ки чунин нақшаи ҷойгиркунӣ чӣ гуна кор мекунад, зеро аксари одамон ҳамеша дар серверҳои муқаррарии виртуалӣ ҷойгир шудаанд.
  2. Ин кифоя аст боэътимод, зеро технологияи ҷойгиркунӣ оддӣ аст, ки аз ҷониби ҳазорҳо ширкатҳо озмуда шудааст. Миллионҳо серверҳо бо ин роҳ ҷойгир карда мешаванд. Чизеро шикастан душвор аст.
  3. Ва ниҳоят мо метавонем ба даст орем ҷойгиркунии атомӣ. Ҷойгиркунӣ, ки ҳамзамон барои корбарон бидуни марҳилаи намоёни гузариш байни версияи кӯҳна ва нав рух медиҳанд.

Вале мо дар хамаи ин як катор камбудихоро низ дидем:

  1. Илова ба муҳити истеҳсолӣ, муҳити рушд, муҳитҳои дигар вуҷуд доранд. Масалан, qa ва пешакй. Он вақт мо серверҳои зиёд ва тақрибан 60 хидмат доштем. Аз хамин сабаб зарур буд барои ҳар як хидмат версияи охирини онро нигоҳ доред мошини виртуалӣ. Ғайр аз он, агар шумо хоҳед, ки китобхонаҳоро навсозӣ кунед ё вобастагии нав насб кунед, шумо бояд ин корро дар ҳама муҳитҳо иҷро кунед. Шумо инчунин лозим буд, ки вақтро, ки шумо версияи навбатии замимаи худро ҷойгир карданиед, бо вақте, ки devops танзимоти зарурии муҳити зистро иҷро мекунад, ҳамоҳанг созед. Дар ин ҳолат, ба вазъияте ворид шудан осон аст, ки муҳити мо якбора дар ҳама муҳитҳо каме фарқ мекунад. Масалан, дар муҳити QA баъзе версияҳои китобхонаҳо мавҷуданд ва дар муҳити истеҳсолӣ версияҳои гуногун мавҷуданд, ки боиси мушкилот мешаванд.
  2. Мушкилоти навсозии вобастагӣ аризаи шумо. Ин на ба шумо, балки ба дастаи дигар вобаста аст. Маҳз аз дастаи devops, ки серверҳоро нигоҳ медорад. Шумо бояд ба онҳо вазифаи мувофиқ ва тавсифи он чизеро, ки мехоҳед анҷом диҳед, диҳед.
  3. Он вақт мо ҳам мехостем, ки монолитҳои калонеро, ки дар даст дорем, ба хидматҳои хурди алоҳида тақсим кунем, зеро фаҳмидем, ки онҳо торафт бештар хоҳанд шуд. Он вақт мо аллакай зиёда аз 100 ададро доштем.Барои ҳар як хидмати нав як мошини нави виртуалии алоҳида эҷод кардан лозим буд, ки онро низ нигоҳдорӣ ва ҷойгир кардан лозим буд. Илова бар ин, ба шумо на як мошин, балки ҳадди аққал ду мошин лозим аст. Ба ҳамаи ин муҳити QA илова карда шудааст. Ин боиси мушкилот мегардад ва сохтани системаҳои навро барои шумо мушкилтар мекунад. процесси мураккаб, гаронбахо ва тулонй.

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

Мо муддати дароз фикр мекардем, ки кадомашро гирифта метавонем. Гап дар он аст, ки дар он вақт ин стеки ҷойгиркунӣ дар серверҳои оддии виртуалӣ то андозае кӯҳна буд, зеро онҳо версияҳои охирини системаҳои оператсионӣ надоштанд. Дар баъзе мавридҳо ҳатто FreeBSD вуҷуд дошт, ки барои дастгирӣ он қадар қулай набуд. Мо фаҳмидем, ки мо бояд ҳарчи зудтар ба докер гузарем. Дево-нони мо ба тачрибаи мавчудаи худ бо роххои гуногун назар карда, системаеро ба мисли Nomad интихоб карданд.

Гузариш ба Nomad

Nomad маҳсулоти HashiCorp мебошад. Онҳо инчунин барои ҳалли дигарашон маълуманд:

Ҷойгир кардани барномаҳо ба VM, Nomad ва Kubernetes

"Консул" воситаи кашфи хидмат мебошад.

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

"Овора" ба шумо имкон медиҳад, ки мошинҳои виртуалиро ба таври маҳаллӣ ё дар абр тавассути файлҳои конфигуратсияи мушаххас ҷойгир кунед.

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

Барои ҷойгиркунии системаи шумо ба Nomad чӣ лозим аст?

  1. Пеш аз ҳама ба шумо лозим аст тасвири докер аризаи шумо. Шумо бояд онро созед ва онро дар анбори тасвири докер ҷойгир кунед. Дар ҳолати мо, ин артефактура аст - системае, ки ба шумо имкон медиҳад, ки артефактҳои гуногуни намудҳои гуногунро ба он тела диҳед. Он метавонад бойгонӣ, тасвирҳои докер, бастаҳои композитории PHP, бастаҳои NPM ва ғайраҳоро нигоҳ дорад.
  2. Инчунин лозим аст файли конфигуратсия, ки ба Nomad хабар медиҳад, ки шумо чӣ, дар куҷо ва ба кадом миқдор ҷойгир кардан мехоҳед.

Вақте ки мо дар бораи Nomad гап мезанем, он забони HCL-ро ҳамчун формати файли иттилоотии худ истифода мебарад, ки маънои онро дорад Забони конфигуратсияи HashiCorp. Ин як маҷмӯи Yaml аст, ки ба шумо имкон медиҳад хидмати худро бо истилоҳи Nomad тавсиф кунед.

Ҷойгир кардани барномаҳо ба VM, Nomad ва Kubernetes

Он ба шумо имкон медиҳад, ки бигӯед, ки чанд контейнерро ҷойгир кардан мехоҳед, ки аз кадом тасвирҳо ҳангоми ҷойгиркунӣ параметрҳои гуногунро ба онҳо интиқол диҳед. Ҳамин тариқ, шумо ин файлро ба Nomad медиҳед ва он мувофиқи он контейнерҳоро ба истеҳсолот оғоз мекунад.

Дар ҳолати мо, мо фаҳмидем, ки танҳо навиштани файлҳои комилан якхелаи HCL барои ҳар як хидмат чандон қулай нест, зеро хидматҳои зиёде мавҷуданд ва баъзан шумо мехоҳед онҳоро навсозӣ кунед. Чунин мешавад, ки як хидмат на дар як маврид, балки дар як қатор хидматҳои гуногун ҷойгир карда мешавад. Масалан, яке аз системаҳое, ки мо дар истеҳсолот дорем, зиёда аз 100 адад дар истеҳсолот мавҷуд аст. Онҳо аз як тасвирҳо кор мекунанд, аммо дар танзимоти конфигуратсия ва файлҳои конфигуратсия фарқ мекунанд.

Аз ин рӯ, мо тасмим гирифтем, ки барои мо нигоҳ доштани ҳамаи файлҳои конфигуратсияи худро барои ҷойгиркунӣ дар як анбори умумӣ қулай хоҳад буд. Ҳамин тавр онҳо намоён буданд: нигоҳдории онҳо осон буд ва мо дидем, ки чӣ гуна системаҳо дорем. Агар лозим бошад, навсозӣ ё тағир додани чизе низ осон аст. Илова кардани системаи нав низ душвор нест - ба шумо танҳо лозим аст, ки файли конфигуратсияро дар дохили директорияи нав созед. Дар дохили он файлҳои зерин мавҷуданд: service.hcl, ки тавсифи хидмати моро дар бар мегирад ва баъзе файлҳои env, ки имкон медиҳанд, ки ин хидмат ҳангоми ҷойгиркунӣ дар истеҳсолот танзим карда шавад.

Ҷойгир кардани барномаҳо ба VM, Nomad ва Kubernetes

Аммо баъзе системахои мо дар истехсолот на дар як нусха, балки якбора якчанд нусха чорй карда мешаванд. Аз ин рӯ, мо тасмим гирифтем, ки барои мо қулай хоҳад буд, ки конфигуратсияҳоро на дар шакли холис, балки дар шакли қолабии онҳо нигоҳ дорем. Ва мо интихоб кардем ҷинжа 2. Дар ин формат мо ҳам конфигуратсияҳои худи хадамот ва ҳам файлҳои env-ро, ки барои он заруранд, нигоҳ медорем.

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

Ҷойгир кардани барномаҳо ба VM, Nomad ва Kubernetes

Яъне, мо баъзе тағирёбандаҳои ҷойгиршавии конфигуратсияро бо тағирёбандаҳои воридшуда, ки аз файлҳои env ё дигар манбаъҳо гирифта шудаанд, иваз кардем. Илова бар ин, мо имконият пайдо кардем, ки файлҳои HCL-ро ба таври динамикӣ ҷамъоварӣ кунем, яъне мо метавонем на танҳо воридкунии тағирёбандаи муқаррариро истифода барем. Азбаски jinja ҳалқаҳо ва шартҳоро дастгирӣ мекунад, шумо инчунин метавонед дар он ҷо файлҳои конфигуратсияро эҷод кунед, ки вобаста ба он ки шумо барномаҳои худро дар куҷо ҷойгир мекунед, тағир меёбанд.

Масалан, шумо мехоҳед хидмати худро ба пеш аз истеҳсолот ва истеҳсолот истифода баред. Биёед бигӯем, ки ҳангоми пеш аз истеҳсол шумо намехоҳед скриптҳои cron -ро иҷро кунед, аммо танҳо мехоҳед хидматро дар домени алоҳида бубинед, то боварӣ ҳосил кунед, ки он кор мекунад. Барои ҳар касе, ки хидматро истифода мебарад, раванд хеле содда ва шаффоф менамояд. Ба шумо танҳо кор кардан лозим аст, ки файли deploy.sh -ро иҷро кунед, муайян кунед, ки кадом хидматро ҷойгир кардан мехоҳед ва ба кадом ҳадаф. Масалан, шумо мехоҳед як системаи муайянро дар Русия, Беларус ё Қазоқистон ҷойгир кунед. Барои ин, танҳо яке аз параметрҳоро тағир диҳед ва шумо файли конфигуратсияи дурустро хоҳед дошт.

Вақте ки хидмати Nomad аллакай дар кластери шумо ҷойгир шудааст, чунин менамояд.

Ҷойгир кардани барномаҳо ба VM, Nomad ва Kubernetes

Аввалан, ба шумо ягон намуди тавозункунанда дар берун лозим аст, ки тамоми трафики корбаронро қабул мекунад. Он дар якҷоягӣ бо консул кор мекунад ва аз он муайян мекунад, ки дар куҷо, дар кадом гиреҳ, дар кадом суроғаи IP хидмати мушаххас ҷойгир аст, ки ба номи домени мушаххас мувофиқ аст. Хизматрасонӣ дар Консул аз худи Nomad меояд. Азбаски инҳо маҳсулоти як ширкат мебошанд, онҳо ба ҳамдигар хеле алоқаманданд. Мо метавонем бигӯем, ки Nomad берун аз қуттӣ метавонад ҳамаи хидматҳои дар он оғозшударо дар дохили консул сабти ном кунад.

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

Гузариш ба мо аз ҷиҳати захираҳои инсонӣ чӣ қадар арзиш дошт?

Гузариши тамоми ширкат ба Номад тақрибан 5-6 моҳро дар бар гирифт. Мо дар асоси хидмат ба хидмат ҳаракат кардем, аммо бо суръати хеле тез. Ҳар як даста бояд контейнерҳои худро барои хидматҳо созад.

Мо чунин равишро қабул кардем, ки ҳар як даста барои тасвирҳои докерии системаҳои худ мустақилона масъул аст. DevOps инфрасохтори умумиеро, ки барои ҷойгиркунӣ зарур аст, таъмин мекунад, яъне дастгирии худи кластер, дастгирии системаи CI ва ғайра. Ва он вақт мо ба Nomad беш аз 60 система кӯчонида будем, ки тақрибан 2 ҳазор контейнерро ташкил медод.

Devops барои инфрасохтори умумии ҳама чизҳои марбут ба густариш ва серверҳо масъул аст. Ва ҳар як гурӯҳи таҳиякунанда, дар навбати худ, барои татбиқи контейнерҳо барои системаи мушаххаси худ масъул аст, зеро маҳз дастаест, ки медонад, ки ба он умуман дар як контейнер чӣ ниёз дорад.

Сабабҳои даст кашидан аз Nomad

Мо тавассути гузаштан ба ҷойгиркунӣ бо истифода аз Nomad ва docker, аз ҷумла, чӣ бартариҳо ба даст овардем?

  1. Мо ҳастем шароити баробар мухайё кард барои ҳама муҳитҳо. Дар таҳия, муҳити QA, пеш аз истеҳсол, истеҳсол, ҳамон тасвирҳои контейнерӣ бо ҳамон вобастагӣ истифода мешаванд. Аз ин рӯ, шумо амалан ҳеҷ гуна имконият надоред, ки он чизе, ки дар истеҳсолот ба охир мерасад, он чизест, ки шумо қаблан дар маҳал ё дар муҳити санҷиши худ санҷидаед.
  2. Мо хам фахмидем, ки ин кифоя аст ба осонӣ илова кардани хидмати нав. Аз нуқтаи назари ҷойгиркунӣ, ҳама гуна системаҳои нав хеле содда ба кор андохта мешаванд. Танҳо ба анборе, ки конфигуратсияҳоро нигоҳ медорад, равед, дар он ҷо конфигуратсияи дигареро барои системаи худ илова кунед ва шумо ҳама омодаед. Шумо метавонед системаи худро дар истеҳсолот бе ягон кӯшиши иловагӣ аз devops ҷойгир кунед.
  3. ҳама файлҳои конфигуратсия дар як анбори умумӣ мавриди баррасй карор гирифт. Вақте ки мо системаҳои худро бо истифода аз серверҳои виртуалӣ ҷойгир мекардем, мо Ansible-ро истифода мебурдем, ки дар он конфигуратсияҳо дар як анбор буданд. Аммо, барои аксари таҳиягарон кор кардан бо ин каме душвортар буд. Дар ин ҷо ҳаҷми конфигуратсияҳо ва рамзҳое, ки шумо бояд барои густариши хидмат илова кунед, хеле камтар шудааст. Илова бар ин, ислоҳ ё тағир додани он барои таҳиягарон хеле осон аст. Дар ҳолати гузариш, масалан, ба версияи нави Nomad, онҳо метавонанд ҳамаи файлҳои амалиётиро, ки дар як ҷо ҷойгиранд, гирифта ва навсозӣ кунанд.

Аммо мо инчунин ба як қатор камбудиҳо дучор шудем:

Маълум шуд, ки мо ба ҷойгиркунии бефосила ноил шуда натавонист дар мавриди Номад. Ҳангоми паҳн кардани контейнерҳо дар шароити гуногун, он метавонад кор кунад ва Nomad онро ҳамчун контейнере қабул кард, ки барои қабули трафик омода аст. Ин пеш аз он рӯй дод, ки замима дар дохили он ҳатто имкони оғозёбиро пайдо кунад. Аз ин сабаб, система дар як муддати кӯтоҳ ба 500 хатогӣ шурӯъ кард, зеро ҳаракати нақлиёт ба контейнере оғоз кард, ки ҳанӯз ба қабули он омода набуд.

Мо бо баъзеҳо дучор шудем аз тарафи ботлоқҳо. Муҳимтарин хато дар он аст, ки Nomad кластери калонро хуб идора намекунад, агар шумо системаҳо ва контейнерҳои зиёд дошта бошед. Вақте ки шумо хоҳед, ки яке аз серверҳоеро, ки ба кластери Nomad барои нигоҳдорӣ дохил карда шудааст, хориҷ кунед, эҳтимоли хеле баланд аст, ки кластер худро чандон хуб ҳис накунад ва пароканда шавад. Масалан, баъзе контейнерҳо метавонанд афтиданд ва баланд нашаванд - ин барои шумо хеле дертар арзиш хоҳад дошт, агар тамоми системаҳои истеҳсолии шумо дар кластере ҷойгир бошанд, ки аз ҷониби Nomad идора мешавад.

Аз ин рӯ, мо тасмим гирифтем, ки минбаъд ба куҷо равем. Дар он лаҳза, мо бештар дарк кардем, ки чӣ кор кардан мехостем. Махз: мо мехоҳем эътимоднокӣ, функсияҳои каме бештар аз он ки Nomad пешниҳод мекунад ва системаи баркамолтар ва устувортар.

Дар робита ба ин, интихоби мо ба Kubernetes ҳамчун платформаи маъмултарин барои оғози кластерҳо афтод. Махсусан бо назардошти он, ки андоза ва шумораи контейнерҳои мо ба қадри кофӣ калон буд. Барои чунин мақсадҳо, Кубернетес системаи мувофиқтарин ба назар мерасид, ки мо онро дида метавонем.

Гузариш ба Кубернетес

Ман ба шумо каме дар бораи мафҳумҳои асосии Кубернетес ва чӣ фарқияти онҳо аз Nomad нақл мекунам.

Ҷойгир кардани барномаҳо ба VM, Nomad ва Kubernetes

Пеш аз ҳама, мафҳуми асосӣ дар Кубернетес консепсияи под мебошад. Pod як гурӯҳи як ё якчанд контейнерҳоест, ки ҳамеша якҷоя кор мекунанд. Ва онҳо ҳамеша ба таври қатъӣ дар як мошини виртуалӣ кор мекунанд. Онҳо ба ҳамдигар тавассути IP 127.0.0.1 дар портҳои гуногун дастрасанд.

Фарз мекунем, ки шумо як барномаи PHP доред, ки аз nginx ва php-fpm иборат аст - схемаи классикӣ. Эҳтимол, шумо мехоҳед контейнерҳои nginx ва php-fpm -ро ҳамеша якҷоя нигоҳ доред. Кубернетес ба шумо имкон медиҳад, ки тавассути тавсифи онҳо ҳамчун як паҳлӯи умумӣ ба ин ноил шавед. Ин маҳз он чизест, ки мо бо Nomad ба даст оварда натавонистем.

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

Консепсияи сеюм аст хизматрасонӣ. Хидмати шумо воқеан системаи шумост, ки трафикро қабул мекунад ва сипас онро ба як ё якчанд подкастаҳои мувофиқ ба хидмати шумо интиқол медиҳад. Яъне он ба шумо имкон медиҳад бигӯед, ки тамоми трафики воридотӣ ба фалон хидмат бо фалон ном бояд ба ин подкастҳои мушаххас фиристода шавад. Ва дар айни замон он ба шумо мувозинати трафикро таъмин мекунад. Яъне, шумо метавонед ду паҳлӯи замимаи худро оғоз кунед ва тамоми трафики воридотӣ дар байни подкҳои марбут ба ин хидмат баробар мувозинат карда мешавад.

Ва консепсияи чоруми асосӣ ин аст Ingress. Ин хидматест, ки дар кластери Kubernetes кор мекунад. Он ҳамчун мувозинати беруна амал мекунад, ки тамоми дархостҳоро қабул мекунад. Бо истифода аз API Kubernetes, Ingress метавонад муайян кунад, ки ин дархостҳо бояд ба куҷо фиристода шаванд. Илова бар ин, вай ин корро хеле фасењ мекунад. Шумо метавонед бигӯед, ки ҳама дархостҳо ба ин мизбон ва фалон URL ба ин хидмат фиристода мешаванд. Ва ин дархостҳое, ки ба ин мизбон ва ба URL-и дигар меоянд, ба хидмати дигар фиристода мешаванд.

Чизи аз ҳама ҷолиб аз нуқтаи назари касе, ки барнома таҳия мекунад, ин аст, ки шумо метавонед ҳамаи онро худатон идора кунед. Бо гузоштани конфигуратсияи Ingress, шумо метавонед тамоми трафики ба фалон API омадаро ба контейнерҳои алоҳида, масалан, дар Go навишташуда фиристед. Аммо ин трафик, ки ба як домен меояд, аммо ба URL-и дигар, бояд ба контейнерҳои дар PHP навишташуда фиристода шавад, ки дар он мантиқ зиёд аст, аммо онҳо хеле зуд нестанд.

Агар ҳамаи ин мафҳумҳоро бо Номад муқоиса кунем, метавонем бигӯем, ки се мафҳуми аввал ҳама якҷоя Хизмат мебошанд. Ва мафхуми охирин дар худи Номад нест. Мо ҳамчун тавозуни беруна истифода бурдем: он метавонад haproxy, nginx, nginx+ ва ғайра бошад. Дар мавриди куб, ба шумо лозим нест, ки ин мафҳуми иловагиро алоҳида ворид кунед. Аммо, агар шумо ба Ingress дохилӣ нигоҳ кунед, он ё nginx, haproxy ё traefik аст, аммо як навъ дар Кубернетес сохта шудааст.

Ҳама мафҳумҳое, ки ман тавсиф кардам, воқеан захираҳое мебошанд, ки дар кластери Kubernetes мавҷуданд. Барои тавсифи онҳо дар куб, формати yaml истифода мешавад, ки дар мавриди Nomad нисбат ба файлҳои HCL хондантар ва шиностар аст. Аммо аз ҷиҳати сохторӣ онҳо ҳамон чизеро дар мавриди, масалан, pod тавсиф мекунанд. Мегӯянд, ки - Ман мехоҳам, ки дар он ҷо фалон понздаҳро бо фалон тасвир, ба фалон микдор ҷойгир кунам.

Ҷойгир кардани барномаҳо ба VM, Nomad ва Kubernetes

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

Мафҳумҳои асосӣ дар Helm

Руль аст мудири баста барои Кубернетес. Он ба кори менеҷерони бастаҳо дар забонҳои барномасозӣ хеле монанд аст. Онҳо ба шумо имкон медиҳанд, ки хидматеро, ки аз ҷумла аз nginx ҷойгиркунӣ, ҷойгиркунии php-fpm, конфигуратсия барои Ingress, конфигмапҳо иборат аст (ин объектест, ки ба шумо имкон медиҳад, ки env ва дигар параметрҳоро барои системаи шумо муқаррар кунед) дар шакли со- диаграммаҳо номида мешавад. Дар баробари ин Хельм дар болои Кубернетес мегузарад. Яъне, ин як намуди система нест, балки хидмати дигаре аст, ки дар дохили куб оғоз шудааст. Шумо бо он тавассути API-и он тавассути фармони консол ҳамкорӣ мекунед. Бароҳатӣ ва зебоии он дар он аст, ки ҳатто агар руль шикаста ё шумо онро аз кластер хориҷ кунед, хидматҳои шумо нопадид намешаванд, зеро helm аслан танҳо барои оғоз кардани система хидмат мекунад. Пас худи Кубернетес барои кор ва ҳолати хидматҳо масъул аст.

Мо низ инро дарк кардем шаблонсозӣ. Ҳама конфигуратсияҳое, ки шумо барои системаҳои худ эҷод мекунед, дар шакли қолибҳо нигоҳ дошта мешаванд, ки каме ба ҷинжа монанданд, аммо дар асл бо истифода аз қолаби забони Go, ки дар он руль навишта шудааст, ба монанди Кубернетес.

Helm барои мо боз чанд мафҳум илова мекунад.

харита - ин тавсифи хидмати шумост. Дар дигар менеҷерони бастаҳо он баста, баста ё чизи шабеҳ номида мешавад. Дар ин ҷо онро диаграмма меноманд.

Арзиши тағирёбандаҳое мебошанд, ки шумо мехоҳед барои сохтани конфигуратсияҳои худ аз қолибҳо истифода баред.

озод кардан. Ҳар дафъае, ки хидмате, ки бо истифода аз helm ҷойгир карда мешавад, версияи афзояндаи нашрро мегирад. Helm дар хотир дорад, ки конфигуратсияи хидмат дар версияи қаблӣ, барориши пеш аз он ва ғайра чӣ гуна буд. Аз ин рӯ, агар ба шумо лозим ояд, ки баргардед, танҳо фармони бозгашти helm-ро иҷро карда, онро ба версияи қаблии нашршуда нишон диҳед. Ҳатто агар конфигуратсияи мувофиқ дар анбори шумо дар вақти баргардонидан дастрас набошад ҳам, helm он чиро дар хотир нигоҳ медорад ва системаи шуморо ба ҳолати дар версияи қаблӣ будааш бармегардонад.

Дар ҳолате, ки мо helm-ро истифода мебарем, конфигуратсияҳои муқаррарии Kubernetes инчунин ба қолибҳое табдил меёбанд, ки дар онҳо тағирёбандаҳо, функсияҳоро истифода бурдан ва изҳороти шартиро истифода бурдан мумкин аст. Бо ин роҳ шумо метавонед конфигуратсияи хидмати худро вобаста ба муҳити зист ҷамъ кунед.

Ҷойгир кардани барномаҳо ба VM, Nomad ва Kubernetes

Дар амал мо тасмим гирифтем, ки корҳоро нисбат ба Nomad каме дигар кунем. Агар дар Nomad ҳам конфигуратсияҳои ҷойгиркунӣ ва ҳам n-тағирёбандаҳое, ки барои ҷойгиркунии хидмати мо лозим буданд, дар як анбор нигоҳ дошта шуда бошанд, дар ин ҷо мо тасмим гирифтем, ки онҳоро ба ду анбори алоҳида тақсим кунем. Анбори "ҷойгир" танҳо n-тағйирёбандаҳои барои густариш лозимиро нигоҳ медорад ва анбори "helm" конфигуратсияҳо ё диаграммаҳоро нигоҳ медорад.

Ҷойгир кардани барномаҳо ба VM, Nomad ва Kubernetes

Ин ба мо чй дод?

Сарфи назар аз он, ки мо дар худи файлҳои конфигуратсия ягон маълумоти ҳассосро нигоҳ намедорем. Масалан, паролҳо ба пойгоҳи додаҳо. Онҳо ҳамчун асрор дар Кубернетес нигоҳ дошта мешаванд, аммо бо вуҷуди ин, дар он ҷо чизҳои муайян мавҷуданд, ки мо намехоҳем ба ҳама дастрас кунем. Аз ин рӯ, дастрасӣ ба анбори "ҷойгир" маҳдудтар аст ва анбори "хелм" танҳо тавсифи хидматро дар бар мегирад. Аз ин сабаб, он метавонад аз ҷониби доираи васеи одамон бехатар дастрас бошад.

Азбаски мо на танҳо истеҳсолот, балки муҳитҳои дигар низ дорем, ба шарофати ин ҷудокунӣ мо метавонем диаграммаҳои чархаи худро дубора истифода барем, то хидматҳоро на танҳо дар истеҳсолот, балки инчунин, масалан, дар муҳити QA истифода барем. Ҳатто барои ҷойгиркунии онҳо ба таври маҳаллӣ бо истифода аз Миникубе - ин чизест, ки Kubernetes ба таври маҳаллӣ идора карда мешавад.

Дар дохили ҳар як репозиторий, мо як шӯъбаро ба феҳристҳои алоҳида барои ҳар як хидмат гузоштем. Яъне, дар дохили ҳар як директория қолабҳои марбут ба диаграммаи мувофиқ мавҷуданд ва захираҳоеро тавсиф мекунанд, ки барои ба кор андохтани системаи мо бояд истифода шаванд. Мо дар анбори "ҷойгиркунӣ" танҳо envҳоро боқӣ гузоштем. Дар ин маврид мо шаблонсозиро бо истифода аз ҷинжа истифода набурдем, зеро худи helm шаблонро аз қуттӣ таъмин мекунад - ин яке аз вазифаҳои асосии он аст.

Мо скрипти ҷойгиркунӣ - deploy.sh -ро тарк кардем, ки оғозро барои ҷойгиркунӣ бо истифода аз руль содда ва стандартизатсия мекунад. Ҳамин тавр, барои ҳар касе, ки мехоҳад ҷойгир кунад, интерфейси ҷойгиркунӣ маҳз ҳамон тавре ба назар мерасад, ки ҳангоми ҷойгиркунӣ тавассути Nomad. Ҳамин deploy.sh, номи хидмати шумо ва дар куҷо шумо мехоҳед онро ҷойгир кунед. Ин боиси сар задани руль дар дохили он мегардад. Он, дар навбати худ, конфигуратсияҳоро аз қолибҳо ҷамъоварӣ мекунад, ба онҳо файлҳои арзишҳои заруриро дохил мекунад ва сипас онҳоро ҷойгир карда, дар Kubernetes оғоз мекунад.

натиҷаҳои

Чунин ба назар мерасад, ки хидмати Kubernetes назар ба Nomad мураккабтар аст.

Ҷойгир кардани барномаҳо ба VM, Nomad ва Kubernetes

Дар ин ҷо трафики содиротӣ ба Ingress меояд. Ин танҳо як контролери пеш аст, ки ҳамаи дархостҳоро қабул мекунад ва баъдан онҳоро ба хидматҳои мувофиқи маълумоти дархост мефиристад. Он онҳоро дар асоси конфигуратсияҳое муайян мекунад, ки ҷузъи тавсифи барномаи шумо дар руль мебошанд ва таҳиягарон мустақилона муқаррар мекунанд. Хизматрасонӣ дархостҳоро ба қуттиҳои худ, яъне контейнерҳои мушаххас мефиристад, ки трафики даромадро байни ҳама контейнерҳои ба ин хидмат тааллуқдошта мувозинат мекунад. Ва, албатта, мо набояд фаромӯш кунем, ки мо набояд аз амният дар сатҳи шабака ба ҷое биравем. Аз ин рӯ, сегментатсия дар кластери Kubernetes кор мекунад, ки ба барчасп асос ёфтааст. Ҳама хидматҳо тегҳои муайян доранд, ки ҳуқуқи дастрасии хадамот ба захираҳои муайяни берунӣ/дохилӣ дар дохил ё берун аз кластер алоқаманд аст.

Вақте ки мо гузаришро анҷом додем, мо дидем, ки Кубернетес тамоми қобилиятҳои Nomad дорад, ки мо қаблан истифода карда будем ва инчунин бисёр чизҳои навро илова кардем. Он метавонад тавассути плагинҳо ва дар асл тавассути намудҳои захираҳои фармоишӣ васеъ карда шавад. Яъне, шумо имкон доред, ки на танҳо чизеро, ки бо Kubernetes аз қуттӣ истифода мешавад, истифода баред, балки захира ва хидмати шахсии худро эҷод кунед, ки манбаи шуморо мехонад. Ин ба шумо имконоти иловагиро барои васеъ кардани системаи шумо бидуни аз нав насб кардани Kubernetes ва бидуни тағир додани тағирот фароҳам меорад.

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

Аввалин ҷойгиркунии мо ба Kubernetes дар моҳи марти соли 2018 буд. Ва дар ин муддат мо ҳеҷ гоҳ бо он мушкилот надидаем. Он бе хатогиҳои назаррас хеле устувор кор мекунад. Илова бар ин, мо метавонем онро боз ҳам васеъ кунем. Имрӯз мо имкониятҳои кофӣ дорем ва ба мо суръати рушди Кубернетес хеле маъқул аст. Холо дар Кубернетес зиёда аз 3000 контейнер мавчуд аст. Кластер якчанд гиреҳҳоро ишғол мекунад. Дар айни замон, он хидматрасон, устувор ва хеле идорашаванда аст.

Манбаъ: will.com

Илова Эзоҳ