Kubernetes: Бо бартараф кардани маҳдудиятҳои CPU хидматҳои худро суръат бахшед

Боз дар соли 2016 мо дар Буфер будем ба Кубернетес гузашт, ва ҳоло тақрибан 60 гиреҳ (дар AWS) ва 1500 контейнер дар кластери k8s мо кор мекунанд, ки аз ҷониби коп. Бо вуҷуди ин, мо тавассути озмоиш ва хатогӣ ба хидматрасониҳои микросервис гузаштем ва ҳатто пас аз чанд соли кор бо k8s мо то ҳол бо мушкилоти нав рӯ ба рӯ мешавем. Дар ин мақола мо дар бораи он сӯҳбат хоҳем кард маҳдудиятҳои коркардкунанда: чаро мо фикр мекардем, ки онҳо таҷрибаи хубанд ва чаро онҳо ин қадар хуб набуданд.

Маҳдудиятҳои протсессор ва троттинг

Мисли бисёр дигар корбарони Kubernetes, Google тавсия медиҳад, ки маҳдудиятҳои CPU муқаррар карда шавад. Бидуни чунин танзимот, контейнерҳо дар гиреҳ метавонанд тамоми қувваи протсессорро гиранд, ки дар навбати худ боиси равандҳои муҳими Кубернетес мегардад (масалан kubelet) чавоб додан ба дархостхоро бас мекунад. Ҳамин тариқ, муқаррар кардани маҳдудиятҳои CPU як роҳи хуби муҳофизати гиреҳҳои шумост.

Маҳдудиятҳои протсессор як контейнерро ба вақти максималии CPU муқаррар мекунанд, ки он метавонад дар як давраи муайян истифода кунад (пешфарз 100 мс аст) ва контейнер ҳеҷ гоҳ аз ин маҳдудият зиёд нахоҳад буд. Дар Кубернетес барои дростинг контейнер ва аз хад зиёд гузаштани онро пешгирй мекунанд, асбоби махсус ба кор бурда мешавад Квота CFS, аммо ин маҳдудиятҳои сунъии CPU ба кор халал мерасонанд ва вақти вокуниши контейнерҳои шуморо зиёд мекунанд.

Агар мо маҳдудияти протсессорро муқаррар накунем, чӣ мешавад?

Мутаассифона, худи мо низ ба ин мушкилот дучор шудем. Ҳар як гиреҳ дорои равандест, ки барои идоракунии контейнерҳо масъул аст kubelet, ва ӯ посух додан ба дархостҳоро қатъ кард. Гиреҳ, вақте ки ин ҳодиса рӯй медиҳад, ба давлат дохил мешавад NotReady, ва контейнерҳо аз он ба ҷои дигар равона карда мешаванд ва дар гиреҳҳои нав ҳамон мушкилот эҷод мекунанд. На камтар аз гуфтан сенарияи идеалӣ нест.

Зуҳури мушкилоти дросселкунӣ ва вокуниш

Меъёри калидӣ барои пайгирии контейнер ин аст trottling, он нишон медиҳад, ки контейнери шумо чанд маротиба пахш карда шудааст. Мо бо таваҷҷӯҳ нигаред, дар баъзе контейнерҳо мавҷудияти дротлер, новобаста аз он ки сарбории протсессор шадид буд ё не. Ҳамчун мисол, биёед яке аз API-ҳои асосии моро бубинем:

Kubernetes: Бо бартараф кардани маҳдудиятҳои CPU хидматҳои худро суръат бахшед

Тавре ки шумо дар зер мебинед, мо маҳдудиятро муқаррар кардаем 800m (0.8 ё 80% аслӣ) ва арзишҳои қуллаи беҳтарин ба даст меоянд 200m (20% аслӣ). Чунин ба назар мерасад, ки пеш аз қатъ кардани хидмат, мо ҳоло ҳам қудрати зиёди протсессор дорем, аммо ...

Kubernetes: Бо бартараф кардани маҳдудиятҳои CPU хидматҳои худро суръат бахшед
Шумо шояд пай бурда бошед, ки ҳатто вақте ки сарбории протсессор аз ҳудуди муқарраршуда камтар аст - ба таври назаррас поёнтар - то ҳол тросскунӣ рух медиҳад.

Бо ин рӯ ба рӯ шуда, мо ба зудӣ якчанд захираҳоро кашф кардем (мушкилот дар github, презентатсия дар бораи задано, дар omio нашр кунед) дар бораи коҳиши кор ва вақти вокуниши хидматҳо аз сабаби дротллинг.

Чаро мо фишорро дар сарбории CPU кам мебинем? Варианти кӯтоҳ ин аст: "дар ядрои Linux хатогӣ вуҷуд дорад, ки боиси бесарусомонии контейнерҳо бо маҳдудиятҳои протсессори муайяншуда мегардад." Агар шумо ба табиати мушкилот таваҷҷӯҳ дошта бошед, шумо метавонед презентатсияро хонед (видео и матн имконоти) аз ҷониби Dave Chiluk.

Бартараф кардани маҳдудиятҳои CPU (бо эҳтиёти шадид)

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

Қарор осон набуд, зеро мо устувории кластери худро хеле қадр мекунем. Дар гузашта, мо аллакай ноустувории кластери худро озмуда будем ва он гоҳ хидматҳо захираҳои аз ҳад зиёдро истеъмол карда, кори тамоми гиреҳи онҳоро суст карданд. Акнун ҳама чиз то андозае дигар буд: мо дарки равшани он чизеро, ки аз кластерҳои худ интизор будем, инчунин стратегияи хуби татбиқи тағйироти пешбинишуда доштем.

Kubernetes: Бо бартараф кардани маҳдудиятҳои CPU хидматҳои худро суръат бахшед
Мукотиботи тичоратй оид ба масъалаи мудим.

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

Ҷудо кардани хидматҳои "бемаҳдуд":

Дар гузашта, мо аллакай дидаем, ки баъзе гиреҳҳо ба ҳолате ворид мешаванд notReady, пеш аз ҳама, аз ҳисоби хидматҳое, ки захираҳои аз ҳад зиёд истеъмол мекунанд.

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

Kubernetes: Бо бартараф кардани маҳдудиятҳои CPU хидматҳои худро суръат бахшед

Таъин кардани протсессори дуруст ва дархости хотира:

Бузургтарин тарси мо ин буд, ки ин раванд захираҳои зиёдро истеъмол мекунад ва гиреҳ посух додан ба дархостҳоро қатъ мекунад. Азбаски ҳоло (ба шарофати Datadog) мо метавонем ҳама хидматҳоро дар кластери худ ба таври возеҳ назорат кунем, ман якчанд моҳи фаъолияти хидматҳоеро, ки мо нақшаи "беаҳамият" таъин карданро будем, таҳлил кардам. Ман танҳо истифодаи ҳадди аксар CPU-ро бо маржаи 20% муқаррар кардам ва ба ин васила дар гиреҳ ҷой ҷудо кардам, агар k8s кӯшиш кунад, ки хидматҳои дигарро ба гиреҳ таъин кунад.

Kubernetes: Бо бартараф кардани маҳдудиятҳои CPU хидматҳои худро суръат бахшед

Тавре ки шумо дар график мебинед, ҳадди аксар сарбории протсессор расидааст 242m ядроҳои CPU (0.242 ядрои протсессори). Барои дархости протсессор, гирифтани рақами каме калонтар аз ин арзиш кофӣ аст. Лутфан таваҷҷӯҳ намоед, ки азбаски хидматҳо ба корбар нигаронида шудаанд, арзиши қуллаи сарборӣ бо трафик мувофиқат мекунад.

Бо истифодаи хотира ва пурсишҳо низ ҳамин тавр кунед ва voila - ҳамаатон танзим кардаед! Барои бехатарии бештар, шумо метавонед автоматии миқёси уфуқӣ илова кунед. Ҳамин тариқ, ҳар дафъае, ки сарбории захираҳо зиёд аст, автоматизатсия подкҳои нав эҷод мекунад ва кубернетҳо онҳоро ба гиреҳҳои дорои фазои холӣ тақсим мекунанд. Агар дар худи кластер ҷой намонад, шумо метавонед ба худ огоҳӣ таъин кунед ё иловаи гиреҳҳои навро тавассути автоматикунонии онҳо танзим кунед.

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

натиҷаҳои

Ман хушҳолам, ки ин натиҷаҳои олиҷанобро аз таҷрибаҳо дар тӯли чанд ҳафтаи охир нашр мекунам; мо аллакай дар посух дар тамоми хидматҳои тағирёфта беҳбудиҳои назаррасро мушоҳида кардем:

Kubernetes: Бо бартараф кардани маҳдудиятҳои CPU хидматҳои худро суръат бахшед

Мо дар саҳифаи хонагии худ натиҷаҳои беҳтарин ба даст овардем (инffer.com), дар он ҷо хидмат суръат гирифт бисту ду бор!

Kubernetes: Бо бартараф кардани маҳдудиятҳои CPU хидматҳои худро суръат бахшед

Оё хатои ядрои Linux ислоҳ шудааст?

Бале, Хатогӣ аллакай ислоҳ шудааст ва ислоҳ ба ядро ​​​​илова карда шудааст тақсимоти версияи 4.19 ва болотар.

Бо вуҷуди ин, ҳангоми хондан мушкилоти kubernetes дар github барои дуюми сентябри соли 2020 мо то ҳол бо зикри баъзе лоиҳаҳои Linux бо хатогиҳои шабеҳ дучор меоем. Ман боварӣ дорам, ки баъзе дистрибюторҳои Linux ҳоло ҳам ин хато доранд ва танҳо барои ислоҳи он кор мекунанд.

Агар версияи тақсимоти шумо аз 4.19 пасттар бошад, ман тавсия медиҳам, ки ба версияи охирин навсозӣ кунед, аммо дар ҳар сурат шумо бояд кӯшиш кунед, ки маҳдудиятҳои протсессорро аз байн баред ва бубинед, ки оё дроссел боқӣ мемонад. Дар зер шумо метавонед рӯйхати қисман хидматҳои идоракунии Kubernetes ва дистрибюторҳои Linuxро бинед:

  • Debian: ислоҳи ба версияи охирини тақсимот воридшуда, сертараддуд, ва хеле тару тоза менамояд (Августи 2020). Баъзе версияҳои қаблӣ низ метавонанд ислоҳ карда шаванд.
  • Ubuntu: ислоҳи ба версияи охирин воридшуда Ubuntu Focal Fossa 20.04
  • EKS ҳанӯз ислоҳ дорад дар моҳи декабри соли 2019. Агар версияи шумо аз ин пасттар бошад, шумо бояд AMI-ро навсозӣ кунед.
  • копс: Аз июни соли 2020 у kops 1.18+ Тасвири асосии мизбон Ubuntu 20.04 хоҳад буд. Агар версияи шумо аз kops кӯҳна бошад, шумо бояд ислоҳро интизор шавед. Худи мо ҳоло интизор ҳастем.
  • GKE (Google Cloud): Ислоҳи ҳамгирошуда дар моҳи январи соли 2020, аммо бо дростинг мушкилот вуҷуд дорад то ҳол мушоҳида мешавад.

Чӣ бояд кард, агар ислоҳ мушкилоти дросселро ҳал кунад?

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

хулоса

  • Агар шумо бо контейнерҳои Docker дар зери Linux кор кунед (новобаста аз Kubernetes, Mesos, Swarm ё дигарон), контейнерҳои шумо метавонанд аз сабаби дроттлатсия корашонро гум кунанд;
  • Кӯшиш кунед, ки ба версияи охирини тақсимоти худ навсозӣ кунед, то ин ки хатогӣ аллакай ислоҳ шудааст;
  • Бартараф кардани маҳдудиятҳои протсессор мушкилотро ҳал мекунад, аммо ин як техникаи хатарнок аст, ки бояд бо эҳтиёти шадид истифода шавад (беҳтар аст, ки аввал ядроро навсозӣ кунед ва натиҷаҳоро муқоиса кунед);
  • Агар шумо маҳдудиятҳои CPU-ро хориҷ карда бошед, истифодаи CPU ва хотираи худро бодиққат назорат кунед ва боварӣ ҳосил кунед, ки захираҳои CPU аз истеъмоли шумо зиёдтаранд;
  • Варианти бехатар ин аст, ки қуттиҳои автоматӣ барои эҷоди подкҳои нав дар ҳолати сарбории сахтафзор, то кубернетҳо онҳоро ба гиреҳҳои ройгон таъин кунанд.

Ман умедворам, ки ин паём ба шумо дар беҳтар кардани кори системаҳои контейнерии шумо кӯмак мекунад.

PS Ин аст, муаллиф бо хонандагон ва шорехон мукотиба мекунад (ба забони англией).


Манбаъ: will.com

Илова Эзоҳ