Бозёфтҳои мо аз як соли муҳоҷирати GitLab.com ба Kubernetes

Шарҳ. тарҷума.: Қабули Kubernetes дар GitLab яке аз ду омили асосии мусоидат ба рушди ширкат ҳисобида мешавад. Бо вуҷуди ин, то ба наздикӣ, инфрасохтори хидматрасонии онлайнии GitLab.com дар мошинҳои виртуалӣ сохта шуда буд ва танҳо тақрибан як сол пеш муҳоҷирати он ба K8s оғоз ёфт, ки то ҳол анҷом наёфтааст. Мо бо камоли хушнудӣ тарҷумаи мақолаи ба наздикӣ нашршудаи муҳандиси GitLab SRE-ро дар бораи он, ки ин чӣ гуна рух медиҳад ва муҳандисони иштирокчии лоиҳа чӣ хулоса мебароранд, пешкаш мекунем.

Бозёфтҳои мо аз як соли муҳоҷирати GitLab.com ба Kubernetes

Тақрибан як сол аст, ки шӯъбаи инфрасохтори мо ҳама хидматҳоеро, ки дар GitLab.com кор мекунанд, ба Kubernetes интиқол медиҳад. Дар ин муддат, мо на танҳо бо интиқоли хидматҳо ба Кубернетес, балки инчунин бо идоракунии ҷойгиркунии гибридӣ дар давраи гузариш ба мушкилот дучор шудем. Дарсҳои пурарзише, ки мо гирифтаем, дар ин мақола муҳокима хоҳанд шуд.

Аз ибтидои GitLab.com серверҳои он дар абр дар мошинҳои виртуалӣ кор мекарданд. Ин мошинҳои виртуалӣ аз ҷониби Chef идора карда мешаванд ва бо истифода аз мо насб карда мешаванд бастаи расмии Linux. Стратегияи ҷойгиркунӣ дар ҳолате, ки барнома бояд навсозӣ шавад, танҳо аз навсозии парки сервер ба таври ҳамоҳангшуда ва пайдарпай бо истифода аз лӯлаи CI иборат аст. Ин усул - ҳарчанд суст ва каме дилгиркунанда - кафолат медиҳад, ки GitLab.com ҳамон таҷрибаҳои насбкунӣ ва конфигуратсияро ҳамчун корбарони офлайнӣ истифода мебарад (худ идорашаванда) Барои ин насби GitLab бо истифода аз бастаҳои Linux-и мо.

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

Қадамҳои аввал ба Kubernetes ва GitLab-и абрӣ

Лоиҳа дар соли 2017 таъсис дода шудааст Диаграммаҳои GitLab ки GitLab-ро барои ҷойгиркунии абр омода созад ва ба корбарон имкон диҳад, ки GitLab-ро дар кластерҳои Kubernetes насб кунанд. Мо он вақт медонистем, ки интиқоли GitLab ба Kubernetes миқёспазирии платформаи SaaS-ро афзоиш медиҳад, ҷойгиркуниро содда мекунад ва самаранокии захираҳои ҳисоббарориро беҳтар мекунад. Дар айни замон, бисёре аз вазифаҳои замимаи мо аз қисмҳои насбшудаи NFS вобаста буданд, ки гузаришро аз мошинҳои виртуалӣ суст карданд.

Талаба ба сӯи абрҳои ватанӣ ва Кубернетес ба муҳандисони мо имкон дод, ки гузариши тадриҷанро ба нақша гиранд, ки дар давоми он мо баъзе вобастагии барномаро аз нигаҳдории шабака тарк карда, ҳангоми идома додани таҳияи хусусиятҳои нав. Азбаски мо ба нақша гирифтани муҳоҷират дар тобистони соли 2019 оғоз кардем, бисёре аз ин маҳдудиятҳо ҳал карда шуданд ва раванди интиқоли GitLab.com ба Kubernetes ҳоло хуб идома дорад!

Хусусиятҳои GitLab.com дар Kubernetes

Барои GitLab.com, мо як кластери ягонаи минтақавии GKE-ро истифода мебарем, ки тамоми трафики барномаҳоро идора мекунад. Барои кам кардани мураккабии (аллакай душвор) муҳоҷират, мо ба хидматҳое таваҷҷӯҳ мекунем, ки ба нигаҳдории маҳаллӣ ё NFS такя намекунанд. GitLab.com базаи рамзии асосан монолитии Rails-ро истифода мебарад ва мо трафикро дар асоси хусусиятҳои сарбории корӣ ба нуқтаҳои гуногуни ниҳоӣ, ки дар ҳавзҳои гиреҳи худ ҷудо шудаанд, равона мекунем.

Дар мавриди фронтенд, ин намудҳо ба дархостҳо ба веб, API, Git SSH/HTTPS ва Реестр тақсим мешаванд. Дар мавриди пуштибонӣ, мо ҷойҳои корро дар навбат аз рӯи хусусиятҳои гуногун вобаста ба он тақсим мекунем предопределенных границ ресурсов, ки ба мо имкон медиҳад, ки Ҳадафҳои Сатҳи Хизматрасониро (SLO) барои сарбории кории гуногун муқаррар кунем.

Ҳамаи ин хидматҳои GitLab.com бо истифода аз диаграммаи тағирнаёфтаи GitLab Helm танзим карда мешаванд. Конфигуратсия дар зерчартаҳо сурат мегирад, ки онҳоро ба таври интихобӣ фаъол кардан мумкин аст, зеро мо тадриҷан хидматҳоро ба кластер интиқол медиҳем. Гарчанде ки мо тасмим гирифтем, ки баъзе хидматҳои давлатии худро ба муҳоҷират дохил накунем, ба монанди Redis, Postgres, GitLab Pages ва Gitaly, истифодаи Kubernetes ба мо имкон медиҳад, ки шумораи VM-ро, ки ҳоло Chef идора мекунад, ба таври куллӣ кам кунем.

Намоиш ва идоракунии конфигуратсияи Kubernetes

Ҳама танзимотҳо аз ҷониби худи GitLab идора карда мешаванд. Барои ин се лоиҳаи конфигуратсия дар асоси Terraform ва Helm истифода мешаванд. Мо мекӯшем, ки то ҳадди имкон худи GitLab-ро истифода барем, аммо барои иҷрои вазифаҳои амалиётӣ мо насби алоҳидаи GitLab дорем. Ин барои боварӣ ҳосил кардан лозим аст, ки шумо ҳангоми ҷойгиркунӣ ва навсозии GitLab.com аз мавҷудияти GitLab.com вобаста набошед.

Гарчанде ки қубурҳои мо барои кластери Kubernetes дар насби алоҳидаи GitLab кор мекунанд, оинаҳои анбори кодҳо мавҷуданд, ки дар суроғаҳои зерин дастрасанд:

  • k8s-workloads/gitlab-com — Чаҳорчӯби конфигуратсияи GitLab.com барои диаграммаи GitLab Helm;
  • k8s-борҳои корӣ/gitlab-helmfiles - Конфигуратсияҳоеро барои хидматҳое дар бар мегирад, ки мустақиман бо барномаи GitLab алоқаманд нестанд. Инҳо конфигуратсияҳо барои сабти ном ва мониторинги кластер, инчунин абзорҳои интегралӣ ба монанди PlantUML;
  • Gitlab-com-инфраструктураи - Конфигуратсияи Terraform барои Kubernetes ва инфрасохтори меросии VM. Дар ин ҷо шумо тамоми захираҳои заруриро барои идора кардани кластер танзим мекунед, аз ҷумла худи кластер, ҳавзҳои гиреҳ, ҳисобҳои хидматӣ ва қайдҳои суроғаи IP.

Бозёфтҳои мо аз як соли муҳоҷирати GitLab.com ба Kubernetes
При внесении изменений показывается общедоступное мухтасар мухтасар бо истинод ба фарқияти муфассал, ки SRE пеш аз ворид кардани тағирот ба кластер таҳлил мекунад.

Барои SRE, истинод ба фарқияти муфассал дар насби GitLab оварда мерасонад, ки барои истеҳсол истифода мешавад ва дастрасӣ ба он маҳдуд аст. Ин ба кормандон ва ҷомеа имкон медиҳад, ки бидуни дастрасӣ ба лоиҳаи амалиётӣ (ки танҳо барои SRE кушода аст) тағироти конфигуратсияи пешниҳодшударо бубинанд. Бо омезиши як мисоли ҷамъиятии GitLab барои код бо намунаи хусусӣ барои лӯлаҳои CI, мо ҷараёни кори ягонаро нигоҳ медорем ва мустақилиятро аз GitLab.com барои навсозиҳои конфигуратсия таъмин мекунем.

Он чизеро, ки мо дар вақти муҳоҷират дарёфтем

Ҳангоми ҳаракат, таҷрибае ба даст омад, ки мо ба муҳоҷират ва ҷойгиркунии нав дар Кубернетес муроҷиат мекунем.

1. Афзоиши хароҷот аз ҳисоби ҳаракати нақлиёт байни минтақаҳои дастрас

Бозёфтҳои мо аз як соли муҳоҷирати GitLab.com ба Kubernetes
Омори ҳаррӯзаи баромад (байтҳо дар як рӯз) барои флоти анбори Git дар GitLab.com

Google шабакаи худро ба минтақаҳо тақсим мекунад. Онҳо, дар навбати худ, ба минтақаҳои дастрас (AZ) тақсим мешаванд. Хостинги Git бо миқдори зиёди маълумот алоқаманд аст, аз ин рӯ барои мо назорат кардани баромади шабака муҳим аст. Барои трафики дохилӣ, баромад танҳо дар сурате ройгон аст, ки он дар як минтақаи дастрас боқӣ монад. То замони ин навиштан, мо дар як рӯзи кори муқаррарӣ тақрибан 100 TB маълумотро пешниҳод мекунем (ва ин танҳо барои анбори Git аст). Хидматҳое, ки дар ҳамон мошинҳои маҷозӣ дар топологияи кӯҳнаи VM-и мо зиндагӣ мекарданд, ҳоло дар қуттиҳои гуногуни Kubernetes кор мекунанд. Ин маънои онро дорад, ки баъзе трафик, ки қаблан дар VM маҳаллӣ буд, эҳтимолан берун аз минтақаҳои дастрас сафар кунад.

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

2. Маҳдудиятҳо, дархостҳои захираҳо ва миқёс

Бозёфтҳои мо аз як соли муҳоҷирати GitLab.com ба Kubernetes
Шумораи нусхаҳои коркарди трафики истеҳсолӣ дар registry.gitlab.com. Қуллаи трафик дар ~15:00 UTC.

Ҳикояи муҳоҷирати мо дар моҳи августи соли 2019 оғоз ёфт, вақте ки мо аввалин хидмати худ, Registry Container GitLab -ро ба Kubernetes интиқол додем. Ин хидмати аз ҷиҳати рисолати муҳим ва сердаромад интихоби хуб барои муҳоҷирати аввал буд, зеро он як барномаи бешаҳрвандӣ бо чанд вобастагии беруна мебошад. Мушкилоти аввалине, ки мо бо он дучор шудем, шумораи зиёди қуттиҳои хориҷшуда аз сабаби набудани хотира дар гиреҳҳо буд. Аз ин сабаб, мо маҷбур шудем, ки дархостҳо ва маҳдудиятҳоро тағир диҳем.

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

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

Бозёфтҳои мо аз як соли муҳоҷирати GitLab.com ба Kubernetes
Бахши инфрасохтор ба таъхир, сатҳи хатогиҳо ва сершавӣ бо насб тамаркуз мекунад ҳадафҳои сатҳи хидматрасонӣ (SLO) алоқаманд аст дастрасии умумии системаи мо.

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

Ин масъала қариб дарҳол пас аз интиқоли баъзе сарбории корӣ ба кластер ошкор карда шуд. Ин махсусан вақте шадид шуд, ки мо бояд функсияҳоро тафтиш кунем, ки шумораи дархостҳо барои онҳо кам буд, аммо вобастагии конфигуратсияи хеле мушаххас доштанд. Яке аз дарсҳои калидӣ аз муҳоҷират ин зарурати ба назар гирифтани на танҳо нишондиҳандаҳо ҳангоми мониторинг, балки гузоришҳо ва “думи дароз” буд. (ин дар бораи чунин тақсимоти онҳо дар диаграмма - тақрибан. тарҷума.) хатогиҳо. Ҳоло барои ҳар як муҳоҷират мо рӯйхати муфассали дархостҳои гузоришро дохил мекунем (пурсишҳои сабт) ва ба нақша гирифтани расмиёти возеҳи бозгашт, ки дар сурати ба миён омадани мушкилот аз як баст ба дигараш интиқол додан мумкин аст.

Хизматрасонии якхела дархостҳо дар инфрасохтори кӯҳнаи VM ва инфрасохтори нави Кубернетес як мушкили беназиреро пеш овард. Баръакси муҳоҷирати лифт ва баст (интиқоли зуди барномаҳо "чунон ки ҳаст" ба инфрасохтори нав; тафсилоти бештарро хондан мумкин аст, масалан, дар ин ҷо - тахминан. тарҷума.), кори мувозӣ дар VM-ҳои "кӯҳна" ва Кубернетес талаб мекунад, ки абзорҳои мониторинг бо ҳарду муҳит мувофиқ бошанд ва тавонанд ченакҳоро дар як намоиш муттаҳид кунанд. Муҳим аст, ки мо ҳамон панелҳои идоракунӣ ва дархостҳои сабтро истифода барем, то дар давраи гузариш ба мушоҳидаи доимӣ ноил шавем.

4. Гузаронидани трафик ба кластери нав

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

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

5. Иқтидорҳои захиравӣ ва истифодаи онҳо

Қариб дарҳол мушкилоти зерин муайян карда шуд: подкҳо барои хидмати Реестр зуд оғоз ёфтанд, аммо ба кор андохтани подкҳо барои Sidekiq то ҳадди имкон тӯл кашид. ду дақиқа. Вақти тӯлонии оғозёбӣ барои pods Sidekiq мушкилоте гардид, вақте ки мо ба интиқоли сарбории корӣ ба Кубернетес барои коргароне шурӯъ кардем, ки корҳоро зуд коркард ва миқёси тезро талаб мекарданд.

Дар ин ҳолат, дарс ин буд, ки дар ҳоле ки Кубернетес 'Horizontal Pod Autoscaler (HPA) афзоиши трафикро хуб идора мекунад, муҳим аст, ки хусусиятҳои сарбории корро ба инобат гирифта, иқтидори эҳтиётиро ба поддонҳо тақсим кунем (хусусан вақте ки талабот нобаробар тақсим карда мешавад). Дар ҳолати мо, афзоиши ногаҳонии ҷойҳои корӣ ба амал омад, ки ба миқёси босуръат оварда расонд, ки пеш аз он ки мо барои васеъ кардани ҳавзи гиреҳ вақт пайдо кунем, ба сер шудани захираҳои CPU оварда расонд.

Ҳамеша васвасаи фишурдани ҳарчи бештар аз кластер вуҷуд дорад, аммо, ки дар аввал бо мушкилоти иҷроиш дучор шудем, мо ҳоло бо буҷаи саховатманд оғоз мекунем ва баъдтар онро кам карда, ба SLO-ҳо бодиққат нигоҳ мекунем. Ифтитоҳи pods барои хидмати Sidekiq ба таври назаррас суръат гирифт ва ҳоло ба ҳисоби миёна тақрибан 40 сонияро мегирад. От сокращения времени запуска pod’ов выиграл как GitLab.com, так и наши пользователи инсталляций self-managed, работающие с официальным Helm-чартом GitLab.

хулоса

Пас аз интиқоли ҳар як хидмат, мо аз бартариҳои истифодаи Kubernetes дар истеҳсол шод шудем: ҷобаҷогузории зудтар ва бехатари барномаҳо, миқёс ва тақсимоти самараноки захираҳо. Гузашта аз ин, бартариҳои муҳоҷират фаротар аз хидмати GitLab.com мебошанд. Ҳар як такмилдиҳии диаграммаи расмии Helm ба корбарони он манфиат меорад.

Умедворам, ки ба шумо достони моҷароҳои муҳоҷирати Кубернетес писанд омад. Мо интиқоли ҳама хидматҳои навро ба кластер идома медиҳем. Маълумоти иловагиро дар нашрияҳои зерин дастрас кардан мумкин аст:

PS аз тарҷумон

Инчунин дар блоги мо хонед:

Манбаъ: will.com

Илова Эзоҳ