Kubernetes дар DomClick: чӣ гуна метавон оромона хоб кард, ки кластери 1000 микросервисро идора кунад

Номи ман Виктор Ягофаров аст ва ман платформаи Kubernetes-ро дар DomClick ҳамчун менеҷери рушди техникӣ дар гурӯҳи Ops (амалиёт) таҳия мекунам. Ман мехоҳам дар бораи сохтори равандҳои Dev <-> Ops мо, хусусиятҳои кори яке аз калонтарин кластерҳои k8s дар Русия ва инчунин таҷрибаҳои DevOps/SRE, ки дастаи мо татбиқ мекунад, сӯҳбат кунам.

Kubernetes дар DomClick: чӣ гуна метавон оромона хоб кард, ки кластери 1000 микросервисро идора кунад

Дастаи амалиёти

Дар айни замой хайати опхо 15 кас дорад. Се нафари онҳо барои офис масъуланд, ду нафар дар минтақаи вақти дигар кор мекунанд ва дастрасанд, аз ҷумла шабона. Ҳамин тариқ, касе аз Ops ҳамеша дар монитор аст ва омода аст, ки ба ҳодисаи ҳама гуна мураккаб вокуниш нишон диҳад. Мо сменаҳои шабона надорем, ки рӯҳияи моро нигоҳ медорад ва ба ҳама имкон медиҳад, ки хоби кофӣ бигирад ва вақти фароғатро на танҳо дар назди компютер гузаронад.

Kubernetes дар DomClick: чӣ гуна метавон оромона хоб кард, ки кластери 1000 микросервисро идора кунад

Ҳар як шахс дорои салоҳиятҳои гуногун аст: шабакачиён, DBAs, мутахассисони стекҳои ELK, маъмурон/таҳиягарони Kubernetes, мониторинг, виртуализатсия, мутахассисони сахтафзор ва ғайра. Як чиз ҳамаро муттаҳид мекунад - ҳама метавонад ҳар яки моро то андозае иваз кунад: масалан, гиреҳҳои навро ба кластери k8s ворид кунед, PostgreSQL-ро навсозӣ кунед, CI/CD + лӯлаи Ansible нависед, чизеро дар Python/Bash/Go автоматӣ кунед, сахтафзорро ба Маркази маълумот. Салоҳиятҳои қавӣ дар ягон соҳа ба шумо имкон намедиҳад, ки самти фаъолиятатонро тағир диҳед ва дар ягон соҳаи дигар такмил диҳед. Масалан, ман ба ширкат ҳамчун мутахассиси PostgreSQL ҳамроҳ шудам ва ҳоло соҳаи асосии масъулияти ман кластерҳои Kubernetes мебошад. Дар коллектив хар гуна баландй кабул карда, хисси фишанг хеле инкишоф ёфтааст.

Дар омади гап, мо шикор мекунем. Талабот ба номзадҳо хеле стандартӣ мебошанд. Шахсан барои ман муҳим он аст, ки шахс ба даста мувофиқат кунад, ихтилоф надошта бошад, балки инчунин донад, ки нуқтаи назари худро ҳимоя кунад, рушд кардан мехоҳад ва аз анҷом додани кори нав натарсад ва идеяҳои худро пешниҳод кунад. Инчунин, малакаҳои барномасозӣ дар забонҳои скрипт, дониши асосҳои Linux ва англисӣ талаб карда мешавад. Забони англисӣ танҳо лозим аст, ки шахс дар ҳолати факап ҳалли мушкилотро дар 10 сония дар Google ҷустуҷӯ кунад, на дар 10 дақиқа. Ҳоло пайдо кардани мутахассисони дорои дониши амиқи Linux хеле душвор аст: ин хандаовар аст, аммо аз се номзад ду нафар ба саволи "Миёнаи сарборӣ чист? Он аз чӣ сохта шудааст?" ва саволи "Чӣ тавр ҷамъ кардани партови аслӣ аз барномаи C" чизе аз ҷаҳони суперменҳо ... ё динозаврҳо ҳисобида мешавад. Мо бояд ба ин тоқат кунем, зеро одатан одамон салоҳиятҳои дигарро хеле инкишоф медиҳанд, аммо мо Linux-ро таълим медиҳем. Ҷавоб ба саволи "чаро муҳандиси DevOps бояд ҳамаи инро дар ҷаҳони муосири абрҳо донад" бояд берун аз доираи мақола гузошта шавад, аммо бо се калима: ҳамаи ин зарур аст.

Воситаҳои даста

Дастаи Tools дар автоматизатсия нақши муҳим мебозад. Вазифаи асосии онҳо эҷод кардани абзорҳои мувофиқи графикӣ ва CLI барои таҳиягарон мебошад. Масалан, Конференсияи рушди дохилии мо ба шумо имкон медиҳад, ки аслан бо чанд клики муш як барномаро ба Kubernetes паҳн кунед, захираҳои он, калидҳоро аз анбор ва ғайра танзим кунед. Пештар, Jenkins + Helm 2 вуҷуд дошт, аммо ман маҷбур будам, ки асбоби шахсии худро таҳия кунам, то нусхабардориро аз байн барам ва ба давраи зиндагии нармафзор якхела оварам.

Дастаи Ops барои таҳиягарон қубурҳо наменависад, аммо метавонад дар ҳама гуна масъалаҳо дар навиштани онҳо маслиҳат диҳад (баъзе одамон ҳоло ҳам Helm 3 доранд).

DevOps

Дар мавриди DevOps, мо онро чунин мебинем:

Дастаҳои Dev код менависанд ва онро тавассути Confer to dev -> qa/stage -> prod паҳн мекунанд. Масъулият барои кафолат додани он, ки код суст нашавад ва хатогиҳоро дар бар нагирад, ба зиммаи дастаҳои Dev ва Ops аст. Рӯзона навбатдори гурӯҳи оперативӣ бояд пеш аз ҳама ба ҳодиса бо аризаи худ посух диҳад ва бегоҳ ва шабона маъмури навбатдор (ОП) бояд таҳиягари навбатдорро бедор кунад, агар ӯ медонад боварӣ ҳосил кунед, ки мушкилот дар инфрасохтор нест. Ҳама нишондиҳандаҳо ва огоҳиҳо дар мониторинг ба таври худкор ё нимаавтоматӣ пайдо мешаванд.

Майдони масъулияти Ops аз лаҳзаи ба истеҳсолот ворид шудани барнома оғоз мешавад, аммо масъулияти Dev бо ин тамом намешавад - мо ҳамон корро мекунем ва дар як қаиқ ҳастем.

Таҳиягарон ба маъмурон маслиҳат медиҳанд, ки агар онҳо дар навиштани микросервиси маъмурӣ ба кӯмак ниёз дошта бошанд (масалан, Go backend + HTML5) ва маъмурон ба таҳиягарон дар ҳама гуна масъалаҳои инфрасохтор ё масъалаҳои марбут ба k8s маслиҳат медиҳанд.

Дар омади гап, мо умуман монолит надорем, танҳо хидматрасонии микроэлементҳо. Шумораи онҳо то ҳол дар кластери prod k900s аз 1000 то 8 тағйир меёбад, агар аз рӯи рақам чен карда шавад ҷойгиркуниҳо. Миқдори гулҳо аз 1700 то 2000 тағйир меёбад. Ҳоло дар кластери маҳсулот тақрибан 2000 дона мавҷуд аст.

Ман рақамҳои дақиқ дода наметавонам, зеро мо хидматрасониҳои нолозимро назорат мекунем ва онҳоро ба таври нимаавтоматӣ бурида мемонем. K8s ба мо кӯмак мекунад, ки объектҳои нолозимро пайгирӣ кунем оператори бефоида, ки ин бисьёр ресурсю маблагро сарфа мекунад.

Идоракунии захираҳо

Мониторинг

Мониторинги сохторбандишуда ва иттилоотӣ санги асосии фаъолияти кластери калон мегардад. Мо то ҳол ҳалли универсалиро наёфтаем, ки 100% тамоми эҳтиёҷоти мониторингро фаро гирад, аз ин рӯ мо давра ба давра дар ин муҳит қарорҳои фармоишии гуногун эҷод мекунем.

  • Зарифӣ. Мониторинги хуби кӯҳна, ки пеш аз ҳама барои пайгирии ҳолати умумии инфрасохтор пешбинӣ шудааст. Он ба мо мегӯяд, ки вақте гиреҳ аз ҷиҳати коркард, хотира, дискҳо, шабака ва ғайра мемирад. Ҳеҷ чизи ғайриоддӣ нест, аммо мо инчунин агентҳои алоҳидаи DaemonSet дорем, ки мо бо ёрии онҳо, масалан, мо ҳолати DNS-ро дар кластер назорат мекунем: мо қуттиҳои аблаҳии coredns-ро меҷӯем, мавҷудияти ҳостҳои берунаро месанҷем. Чунин ба назар мерасад, ки чаро бо ин ғамхорӣ кардан лозим аст, аммо бо миқдори зиёди трафик ин ҷузъ як нуқтаи ҷиддии нокомист. ман аллакай тавсиф карда шудааст, чӣ гуна ман бо иҷрои DNS дар кластер мубориза мебурдам.
  • Оператор Prometheus. Маҷмӯи содиркунандагони гуногун шарҳи васеи ҳамаи ҷузъҳои кластерро медиҳад. Баъдан, мо ҳамаи инро дар панелҳои калони Grafana тасаввур мекунем ва барои огоҳиҳо alertmanager истифода мебарем.

Боз як воситаи муфид барои мо буд рӯйхат ворид шудан. Мо онро пас аз чанд маротиба навиштем, ки мо бо вазъияте дучор шудем, ки як даста бо роҳи воридшавии дастаи дигар бархӯрд кард, ки дар натиҷа хатогиҳои 50x ба амал омад. Ҳоло пеш аз ҷойгиркунӣ дар истеҳсолот, таҳиягарон тафтиш мекунанд, ки ҳеҷ кас таъсир намерасонад ва барои дастаи ман ин як воситаи хуб барои ташхиси ибтидоии мушкилот бо Ingresses мебошад. Аҷиб аст, ки дар аввал он барои администраторҳо навишта шуда буд ва он ба таври “ранҷ” ба назар мерасид, аммо пас аз он ки дастаҳои таҳиягарон ба ин асбоб ошиқ шуданд, он хеле тағйир ёфт ва ба назар нарасид, ки “админ барои администраторҳо чеҳраи веб сохт. » Ба қарибӣ мо аз ин асбоб даст мекашем ва чунин ҳолатҳо ҳатто пеш аз ба кор андохтани қубур тасдиқ карда мешаванд.

Захираҳои даста дар Cube

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

Барои фаҳмидани он ки кадом дастаҳо ва ба кадом миқдор онҳоро истифода мебаранд захираҳо (протсессор, хотира, SSD маҳаллӣ), мо ҳар як фармонро барои худ ҷудо мекунем ном дар "Cube" ва ҳадди аксар имкониятҳои онро аз ҷиҳати протсессор, хотира ва диск маҳдуд кунед, ки қаблан ниёзҳои дастаҳоро баррасӣ карда буд. Мувофиқи он, як фармон, дар маҷмӯъ, тамоми кластерро барои ҷойгиркунӣ маҳкам намекунад ва ҳазорҳо ядро ​​​​ва терабайтҳои хотираро ҷудо мекунад. Дастрасӣ ба фазои номҳо тавассути AD дода мешавад (мо RBAC-ро истифода мебарем). Фазоҳои номҳо ва ҳудуди онҳо тавассути дархости кашидан ба анбори GIT илова карда мешаванд ва он гоҳ ҳама чиз ба таври худкор тавассути лӯлаи Ansible интиқол дода мешавад.

Намунаи тақсимоти захираҳо ба гурӯҳ:

namespaces:

  chat-team:
    pods: 23
    limits:
      cpu: 11
      memory: 20Gi
    requests:
      cpu: 11
      memory: 20Gi

Дархостҳо ва маҳдудиятҳо

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

Роҳи дурусти баромадан аз ин вазъият ин аст, ки ба истеъмоли воқеии захираҳо назар андозед ва онро бо маблағи дархостшуда муқоиса кунед (Дархост).

Kubernetes дар DomClick: чӣ гуна метавон оромона хоб кард, ки кластери 1000 микросервисро идора кунад
Kubernetes дар DomClick: чӣ гуна метавон оромона хоб кард, ки кластери 1000 микросервисро идора кунад

Дар скриншотҳои боло шумо мебинед, ки CPU-ҳои "Дархостшуда" ба шумораи воқеии риштаҳо мувофиқат мекунанд ва Маҳдудиятҳо метавонанд аз шумораи воқеии риштаҳои CPU зиёд бошанд =)

Акнун биёед баъзе фазои номҳоро ба таври муфассал дида бароем (ман фазои номи kube-системаро интихоб кардам - ​​фазои номи система барои ҷузъҳои худи "Cube") ва таносуби вақти протсессори воқеан истифодашуда ва хотираро ба фазои дархостшуда бубинем:

Kubernetes дар DomClick: чӣ гуна метавон оромона хоб кард, ки кластери 1000 микросервисро идора кунад

Равшан аст, ки хотираи бештар ва CPU барои хидматҳои система нисбат ба он ки воқеан истифода мешавад, ҷудо карда шудааст. Дар мавриди системаи kube, ин асоснок аст: чунин рӯй дод, ки контроллерҳои воридшавии nginx ё nodelocaldns дар авҷи худ ба CPU зад ва RAM-и зиёдеро истеъмол карданд, бинобар ин дар ин ҷо чунин захира асоснок аст. Илова бар ин, мо наметавонем ба диаграммаҳо дар давоми 3 соати охир такя кунем: матлуб аст, ки ченакҳои таърихиро дар тӯли муддати тӯлонӣ бинем.

Системам «тавсияхо» тартиб дода шуд. Масалан, дар ин ҷо шумо метавонед бубинед, ки кадом захираҳо баланд бардоштани “лимити” (бар болои иҷозатдодашуда) беҳтар аст, то “тотл” ба амал наояд: лаҳзае, ки манба аллакай CPU ё хотираро дар қисмати вақти ҷудошуда сарф кардааст ва мунтазири он аст, ки он "яхнашуда" шавад:

Kubernetes дар DomClick: чӣ гуна метавон оромона хоб кард, ки кластери 1000 микросервисро идора кунад

Ва инҳо қуттиҳое ҳастанд, ки бояд иштиҳои онҳоро боздоранд:

Kubernetes дар DomClick: чӣ гуна метавон оромона хоб кард, ки кластери 1000 микросервисро идора кунад

ба дростинг + мониторинги захираҳо, шумо метавонед зиёда аз як мақола нависед, бинобар ин дар шарҳҳо саволҳо диҳед. Бо чанд сухан, ман метавонам бигӯям, ки вазифаи автоматикунонии чунин ченакҳо хеле душвор аст ва вақти зиёдро талаб мекунад ва амали мувозинат бо функсияҳои "равзана" ва "CTE" Prometheus / VictoriaMetrics (ин истилоҳҳо дар нохунак оварда шудаанд, зеро тақрибан вуҷуд дорад. чизе монанди ин дар PromQL нест ва шумо бояд дархостҳои даҳшатнокро ба якчанд экранҳои матн тақсим кунед ва онҳоро оптимизатсия кунед).

Дар натиҷа, таҳиягарон асбобҳои мониторинги фазои номҳои худро дар Cube доранд ва онҳо метавонанд худашон интихоб кунанд, ки дар куҷо ва дар кадом вақт кадом барномаҳо метавонанд захираҳои худро "бурида" кунанд ва ба кадом серверҳо тамоми шаб тамоми CPU дода шавад.

Методологияҳо

Дар корхона чи тавре ки хозир аст муд, мо ба DevOps риоя мекунем- ва SRE-амалкунанда Вақте ки ширкат дорои 1000 хидматрасонии хурд, тақрибан 350 таҳиягар ва 15 администратор барои тамоми инфрасохтор, шумо бояд "мӯд" бошед: дар паси ин ҳама "калимаҳо" зарурати фаврӣ барои автоматикунонии ҳама чиз ва ҳама вуҷуд дорад ва администраторҳо набояд монеа бошанд. дар равандҳо.

Ҳамчун Ops, мо барои таҳиягарон ченакҳо ва панелҳои гуногунро пешниҳод мекунем, ки ба суръати посухи хидмат ва хатогиҳо алоқаманданд.

Мо усулҳои зеринро истифода мебарем: сурх, ИСЛОҲОТ и Сигналҳои тиллоӣбо якҷоя кардани онҳо. Мо мекӯшем, ки шумораи панелҳои идоракуниро ба ҳадди ақалл кам кунем, то дар як нигоҳ маълум шавад, ки кадом хидмат ҳоло таназзул дорад (масалан, кодҳои посух дар як сония, вақти вокуниш ба 99 фоиз) ва ғайра. Ҳамин ки баъзе ченакҳои нав барои панелҳои умумӣ заруранд, мо фавран онҳоро кашида, илова мекунем.

Ман як моҳ аст, ки графикҳо накашидаам. Эҳтимол, ин як аломати хуб аст: ин маънои онро дорад, ки аксарияти "хоҳишҳо" аллакай амалӣ шудаанд. Чунин рӯй дод, ки дар давоми ҳафта ман ақаллан як маротиба дар як рӯз ягон диаграммаи нав мекашам.

Kubernetes дар DomClick: чӣ гуна метавон оромона хоб кард, ки кластери 1000 микросервисро идора кунад

Kubernetes дар DomClick: чӣ гуна метавон оромона хоб кард, ки кластери 1000 микросервисро идора кунад

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

Амалиёт Хадамоти Mesh наздик аст ва бояд зиндагии ҳамагонро хеле осон кунад, ҳамкорон аз Tools аллакай ба татбиқи реферат "Истии шахси солим" наздиканд: давраи зиндагии ҳар як дархости HTTP(ҳо) дар мониторинг намоён хоҳад шуд ва Ҳангоми ҳамкории байнихизматрасонӣ (ва на танҳо) ҳамеша фаҳмидан мумкин аст, ки "дар кадом марҳила ҳама чиз шикастааст". Ба ахбор аз маркази DomClick обуна шавед. =)

Дастгирии инфрасохтори Kubernetes

Таърихан, мо версияи часпакро истифода мебарем Кубеспрай - Нақши муассир барои ҷойгиркунӣ, васеъ ва навсозии Kubernetes. Дар баъзе мавриддо аз шохаи асосй дастгирй кардани установкадои гайрикубеадм бурида шуда, процесси гузаштан ба кубеадм пешнидод карда нашуд. Дар натиҷа, ширкати Southbridge фаршҳои худро сохт (бо дастгирии kubeadm ва ҳалли зуд барои мушкилоти ҷиддӣ).

Раванди навсозии ҳамаи кластерҳои k8s чунин менамояд:

  • Андешидани Кубеспрай аз Southbridge, бо риштаи мо, Мерҷим тафтиш кунед.
  • Мо навсозиро ба кор мебарем стресс- «Куб».
  • Мо навсозиро дар як вақт як гиреҳ мебарорем (дар Ansible ин "серия: 1" аст) дар Дев- «Куб».
  • Мо навсозӣ мекунем PROD шоми шанбе як гиреҳ дар як вақт.

Дар оянда иваз кардани он пешбинй шудааст Кубеспрай барои чизи зудтар ва рафтан ба кубеадм.

Дар маҷмӯъ мо се "Куб" дорем: Стресс, Dev ва Prod. Мо нақша дорем, ки боз яки дигарро ба кор андозем (интизории гарм) Прод-«Куб» дар маркази маълумоти дуюм. стресс и Дев дар "мошинҳои виртуалӣ" зиндагӣ кунед (oVirt for Stress ва абри VMWare барои Dev). PROD- "Cube" дар "метали луч" зиндагӣ мекунад: ин гиреҳҳои якхела бо 32 риштаи CPU, 64-128 ГБ хотира ва 300 ГБ SSD RAID 10 мебошанд - дар маҷмӯъ 50 адад ҳастанд. Се гиреҳи "лоғар" ба "устодон" бахшида шудаанд PROD- "Куба": 16 ГБ хотира, 12 риштаи CPU.

Барои фурӯш, мо бартарӣ медиҳем, ки "метали луч" -ро истифода барем ва аз қабатҳои нолозим ба монанди худдорӣ кунем OpenStack: ба мо "ҳамсояҳои пурғавғо" ва CPU лозим нест вақт дуздӣ. Ва мураккабии маъмурият дар ҳолати дохилии OpenStack тақрибан ду баробар меафзояд.

Барои CI/CD "Cubic" ва дигар ҷузъҳои инфрасохтор мо сервери алоҳидаи GIT-ро истифода мебарем, Helm 3 (ин гузариши хеле дардовар аз Helm 2 буд, аммо мо аз имконоти хеле қаноатмандем. атом), Ҷенкинс, Ансибл ва Докер. Мо шохаҳои хусусият ва ҷойгиркунии муҳитҳои гуногунро аз як анбор дӯст медорем.

хулоса

Kubernetes дар DomClick: чӣ гуна метавон оромона хоб кард, ки кластери 1000 микросервисро идора кунад
Дар маҷмӯъ, ин аст, ки раванди DevOps дар DomClick аз нуқтаи назари муҳандиси амалиёт чӣ гуна аст. Мақола назар ба он ки ман интизор будам, техникӣ камтар буд: аз ин рӯ, ба хабарҳои DomClick дар Ҳабре пайравӣ кунед: мақолаҳои "хардкор" дар бораи Кубернетес ва ғайра бештар хоҳанд буд.

Манбаъ: will.com

Илова Эзоҳ