Миқёси автоматӣ ва идоракунии захираҳо дар Kubernetes (баррасӣ ва гузориши видео)

27 апрель дар конференция Корпартоӣ 2019, дар доираи бахши "DevOps" гузориши "Автомаскализатсия ва идоракунии захираҳо дар Кубернетес" дода шуд. Он дар бораи он, ки чӣ гуна шумо метавонед K8-ро истифода баред, то дастрасии баланди замимаҳои худро таъмин кунед ва иҷрои баландтаринро таъмин кунед.

Миқёси автоматӣ ва идоракунии захираҳо дар Kubernetes (баррасӣ ва гузориши видео)

Аз рӯи анъана мо бо хушнудӣ пешниҳод мекунем видеои гузориш (44 дақиқа, хеле бештар аз мақола) ва хулосаи асосӣ дар шакли матн. Бирав!

Мавзуи маърузаро калима ба калима тахлил карда, аз охир сар мекунем.

Кубернитель

Фарз мекунем, ки мо дар мизбони худ контейнерҳои Docker дорем. Барои чӣ? Барои таъмини такрорӣ ва ҷудокунӣ, ки дар навбати худ барои ҷойгиркунии оддӣ ва хуб имкон медиҳад, CI/CD. Дар мо ин гуна машинахои контейнердор бисьёранд.

Kubernetes дар ин ҳолат чӣ медиҳад?

  1. Мо дар бораи ин мошинҳо фикр карданро бас мекунем ва бо "абр" кор мекунем кластери контейнерҳо ё кӯзаҳо (гурӯҳҳои контейнерҳо).
  2. Гузашта аз ин, мо ҳатто дар бораи қуттиҳои инфиродӣ фикр намекунем, балки бештарро идора мекунемогурӯҳҳои калонтар. Чунин ибтидоии сатҳи баланд ба мо иҷозат диҳед бигӯем, ки як қолаб барои иҷро кардани сарбории муайян вуҷуд дорад ва дар ин ҷо шумораи зарурии мисолҳо барои иҷро кардани он мавҷуд аст. Агар мо минбаъд қолабро тағир диҳем, ҳама мисолҳо тағир меёбанд.
  3. Бо кӯмаки API-и декларативӣ Ба ҷои иҷрои пайдарпайии фармонҳои мушаххас, мо “сохтори ҷаҳон”-ро (дар YAML), ки аз ҷониби Кубернетес сохта шудааст, тавсиф мекунем. Ва боз: вақте ки тавсиф тағир меёбад, намоиши воқеии он низ тағир меёбад.

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

ВПМ - Воҳиди Пардозиши Марказӣ

Биёед nginx, php-fpm ва mysql-ро дар сервер иҷро кунем. Ин хидматҳо воқеан равандҳои бештаре доранд, ки ҳар кадоми онҳо захираҳои компютериро талаб мекунанд:

Миқёси автоматӣ ва идоракунии захираҳо дар Kubernetes (баррасӣ ва гузориши видео)
(рақамҳо дар слайд "тӯтиҳо" мебошанд, ниёзҳои абстрактии ҳар як раванд барои қудрати ҳисоббарорӣ)

Барои осон кардани кор бо ин, муттаҳид кардани равандҳо ба гурӯҳҳо мантиқист (масалан, ҳама равандҳои nginx ба як гурӯҳи “nginx”). Роҳи оддӣ ва равшани иҷрои ин ин аст, ки ҳар як гурӯҳро дар як контейнер ҷойгир кунед:

Миқёси автоматӣ ва идоракунии захираҳо дар Kubernetes (баррасӣ ва гузориши видео)

Барои идома додан, шумо бояд дар хотир доред, ки контейнер чист (дар Linux). Намуди зоҳирии онҳо ба шарофати се хусусияти калидӣ дар ядро, ки хеле пештар амалӣ шуда буданд, имконпазир гардид: Имкониятҳо, номҳо и гурӯҳҳо. Ва ба рушди минбаъдаи технологияҳои дигар мусоидат карданд (аз ҷумла "снарядҳои" қулай ба монанди Docker):

Миқёси автоматӣ ва идоракунии захираҳо дар Kubernetes (баррасӣ ва гузориши видео)

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

Биёед ба талаботи CPU барои ин равандҳо ва ҳоло барои гурӯҳҳои равандҳо баргардем:

Миқёси автоматӣ ва идоракунии захираҳо дар Kubernetes (баррасӣ ва гузориши видео)
(Такрор мекунам, ки ҳама рақамҳо ифодаи абстрактии ниёз ба захираҳо мебошанд)

Дар айни замон, худи CPU дорои манбаи муайяни ниҳоӣ мебошад (дар мисол ин 1000 аст), ки ҳама метавонад норасо бошад (маҷмӯи ниёзҳои ҳамаи гурӯҳҳо 150+850+460=1460 аст). Дар ин ҳолат чӣ мешавад?

Ядро ба тақсими захираҳо оғоз мекунад ва онро "одилона" иҷро мекунад ва ба ҳар як гурӯҳ ҳамон миқдори захираҳоро медиҳад. Аммо дар ҳолати аввал шумораи онҳо аз зарурат зиёд аст (333>150), бинобар ин зиёдатӣ (333-150=183) дар захира боқӣ мемонад, ки он низ байни ду зарфи дигар баробар тақсим мешавад:

Миқёси автоматӣ ва идоракунии захираҳо дар Kubernetes (баррасӣ ва гузориши видео)

Натичаи хамин аст: дар зарфи якум захираи кофй дошт, дуюм — ба кадри кифоя, дар зарфи сейум — ба кадри кифоя ресурс надошт. Ин натиҷаи амалҳост банақшагирии "одилона" дар Linux - CFS. Фаъолияти онро бо истифода аз супориш танзим кардан мумкин аст вазни ҳар як контейнер. Масалан, ба ин монанд:

Миқёси автоматӣ ва идоракунии захираҳо дар Kubernetes (баррасӣ ва гузориши видео)

Биёед мисоли нарасидани захираҳоро дар контейнери дуюм (php-fpm) дида бароем. Ҳама захираҳои контейнерӣ дар байни равандҳо баробар тақсим карда мешаванд. Дар натича процесси усто нагз кор мекунад, вале хамаи коргарон суръати корро суст карда, камтар аз нисфи он чизеро, ки ба онхо лозим аст, мегиранд:

Миқёси автоматӣ ва идоракунии захираҳо дар Kubernetes (баррасӣ ва гузориши видео)

Банақшагирии CFS ҳамин тавр кор мекунад. Мо минбаъд вазнҳоеро, ки ба контейнерҳо таъин мекунем, меномем дархостҳо. Чаро ин тавр аст - минбаъд нигаред.

Биёед тамоми вазъиятро аз дигар тараф дида бароем. Тавре ки шумо медонед, ҳама роҳҳо ба Рум ва дар сурати компютер, ба CPU мебарад. Як CPU, бисёр вазифаҳо - ба шумо чароғаки светофор лозим аст. Роҳи оддитарини идоракунии захираҳо ин "светофор" мебошад: онҳо ба як раванд вақти муайяни дастрасӣ ба CPU, баъд ба дигараш ва ғайра доданд.

Миқёси автоматӣ ва идоракунии захираҳо дар Kubernetes (баррасӣ ва гузориши видео)

Ин равишро квотаҳои сахт меноманд (маҳдудияти сахт). Биёед инро ба таври оддӣ ба ёд орем маҳдудиятҳо. Аммо, агар шумо маҳдудиятҳоро ба ҳама контейнерҳо тақсим кунед, мушкилот ба миён меояд: mysql дар роҳ ҳаракат мекард ва дар як лаҳза эҳтиёҷоти он ба CPU хотима ёфт, аммо ҳамаи равандҳои дигар маҷбур мешаванд, ки то CPU интизор шаванд. бекор.

Миқёси автоматӣ ва идоракунии захираҳо дар Kubernetes (баррасӣ ва гузориши видео)

Биёед ба ядрои Linux ва ҳамкории он бо CPU баргардем - тасвири умумӣ чунин аст:

Миқёси автоматӣ ва идоракунии захираҳо дар Kubernetes (баррасӣ ва гузориши видео)

cgroup дорои ду танзимот аст - аслан ин ду "твист"-и оддӣ мебошанд, ки ба шумо имкон медиҳанд, ки муайян кунед:

  1. вазн барои контейнер (дархостҳо) аст саҳмияҳои;
  2. фоизи вақти умумии CPU барои кор оид ба вазифаҳои контейнер (лимити) аст квота.

CPU-ро чӣ гуна бояд чен кард?

Роҳҳои гуногун вуҷуд доранд:

  1. чӣ parrots, ҳеҷ кас намедонад - шумо бояд ҳар дафъа гуфтушунид кунед.
  2. Мушкилот равшантар, аммо нисбӣ: 50% сервер бо 4 ядро ​​ва 20 ядро ​​чизҳои тамоман гуногун мебошанд.
  3. Шумо метавонед чизҳои дар боло зикршударо истифода баред вазни, ки Linux медонад, аммо онҳо низ нисбӣ мебошанд.
  4. Варианти аз ҳама мувофиқ ин чен кардани захираҳои компютерӣ дар сония. Онхое. дар сонияҳои вақти протсессор нисбат ба сонияҳои вақти воқеӣ: 1 сонияи вақти протсессор дар як сонияи воқеӣ дода шудааст - ин як ядрои тамоми CPU аст.

Барои боз ҳам осонтар кардани сухан, онҳо ба ченкунии мустақим шурӯъ карданд ядроҳо, маънои аз ҷониби онҳо ҳамон вақти CPU нисбат ба вақти воқеӣ. Азбаски Linux вазнҳоро дарк мекунад, аммо на он қадар вақти CPU/core, барои тарҷума аз як ба дигар механизм лозим буд.

Биёед як мисоли оддиро бо сервери дорои 3 ядрои CPU дида бароем, ки дар он се pods вазнҳо дода мешаванд (500, 1000 ва 1500), ки ба осонӣ ба қисмҳои мувофиқи ядроҳои ба онҳо ҷудошуда (0,5, 1 ва 1,5) табдил меёбанд.

Миқёси автоматӣ ва идоракунии захираҳо дар Kubernetes (баррасӣ ва гузориши видео)

Агар шумо сервери дуюмро гиред, ки дар он ҷо ду маротиба зиёд ядроҳо хоҳанд буд (6) ва дар он ҷо якхелаҳо ҷойгир карда шаванд, тақсимоти ядроҳоро ба осонӣ тавассути зарб задан ба 2 (мутаносибан 1, 2 ва 3) ҳисоб кардан мумкин аст. Аммо як лаҳзаи муҳим вақте рух медиҳад, ки дар ин сервер як падлуи чорум пайдо мешавад, ки вазни он барои роҳат 3000 хоҳад буд. Он як қисми захираҳои CPU-ро (нисфи ядроҳоро) мегирад ва барои pods боқимонда онҳо аз нав ҳисоб карда мешаванд (нисфи кам):

Миқёси автоматӣ ва идоракунии захираҳо дар Kubernetes (баррасӣ ва гузориши видео)

Kubernetes ва захираҳои CPU

Дар Kubernetes, захираҳои CPU одатан дар чен карда мешаванд миллиадракс, яъне. 0,001 ядро ​​ҳамчун вазни асосӣ гирифта мешавад. (Ҳамон чиз дар истилоҳоти Linux/cgroups ҳиссаи CPU номида мешавад, гарчанде дақиқтараш, 1000 милликор = 1024 саҳмияҳои CPU.) K8s кафолат медиҳад, ки он дар сервер назар ба захираҳои CPU барои миқдори вазнҳои ҳамаи подкҳо бештар подкҳоро ҷойгир намекунад.

Ин чӣ гуна рӯй медиҳад? Вақте ки шумо серверро ба кластери Kubernetes илова мекунед, гузориш дода мешавад, ки он чанд ядрои CPU дорад. Ва ҳангоми сохтани як подкоҳи нав, банақшагирии Кубернетес медонад, ки ба ин подк чанд ядро ​​лозим аст. Ҳамин тариқ, pod ба сервере таъин карда мешавад, ки дар он ҷо ядроҳои кофӣ мавҷуданд.

Агар чй мешавад не дархост муайян карда шудааст (яъне поддон шумораи муайяни ядроҳои лозимиро надорад)? Биёед бифаҳмем, ки чӣ тавр Кубернетес захираҳоро умуман ҳисоб мекунад.

Барои подкаст шумо метавонед ҳам дархостҳоро (нақшаи CFS) ва ҳам маҳдудиятҳоро (светофорро дар хотир доред?):

  • Агар онҳо баробар муайян карда шаванд, пас ба подксин синфи QoS таъин карда мешавад кафолат дода мешавад. Ин шумораи ядроҳои ҳамеша дастрас барои он кафолат дода мешавад.
  • Агар дархост камтар аз маҳдудият бошад - синфи QoS тарканда. Онхое. Мо интизорем, ки як pod, масалан, ҳамеша 1 ядроро истифода мебарад, аммо ин арзиш барои он маҳдудият нест: баъзан pod метавонад бештар истифода барад (вақте ки сервер барои ин захираҳои ройгон дорад).
  • Инчунин синфи QoS мавҷуд аст беҳтарин кӯшишҳои — ба он махз хамон подкахое дохил мешаванд, ки дархост барои онхо муайян карда нашудааст. Захираҳо ба онҳо охирин дода мешаванд.

хотира

Бо хотира, вазъият якхела аст, аммо каме фарқ мекунад - дар ниҳоят, табиати ин захираҳо гуногун аст. Умуман, аналогия чунин аст:

Миқёси автоматӣ ва идоракунии захираҳо дар Kubernetes (баррасӣ ва гузориши видео)

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

Миқёси автоматӣ ва идоракунии захираҳо дар Kubernetes (баррасӣ ва гузориши видео)

Ин на ҳамеша ба мо мувофиқат мекунад, бинобар ин метавон танзим кард, ки кадом равандҳо барои мо муҳиманд ва набояд кушта шаванд. Барои ин, параметрро истифода баред oom_score_adj.

Биёед ба синфҳои QoS-и CPU баргардем ва бо арзишҳои oom_score_adj, ки афзалиятҳои истеъмоли хотираро барои pods муайян мекунанд, муқоиса кунем:

  • Қимати пасттарин oom_score_adj барои pod - -998 - маънои онро дорад, ки чунин pod бояд дар охир кушта шавад, ин кафолат дода мешавад.
  • Баландтарин - 1000 - аст беҳтарин кӯшишҳои, ин гуна куракхо аввал кушта мешаванд.
  • Барои ҳисоб кардани арзишҳои боқимонда (тарканда) формулае вучуд дорад, ки мохияти он аз он иборат аст, ки хар кадар як подразделения ресурсхои бештар талаб карда бошад, хамон кадар кам мешавад.

Миқёси автоматӣ ва идоракунии захираҳо дар Kubernetes (баррасӣ ва гузориши видео)

"Твист" дуюм - маҳдуд_дар_байт - барои маҳдудият. Бо он, ҳама чиз осонтар аст: мо танҳо миқдори максималии хотираи додашударо таъин мекунем ва дар ин ҷо (баръакси CPU) дар бораи чӣ гуна чен кардани он (хотира) саволе нест.

Ҳамагӣ

Ҳар як pod дар Кубернетес дода мешавад requests и limits - ҳарду параметрҳо барои CPU ва хотира:

  1. дар асоси дархостҳо, ҷадвали Kubernetes кор мекунад, ки подкҳоро байни серверҳо тақсим мекунад;
  2. дар асоси ҳамаи параметрҳо, синфи QoS pod муайян карда мешавад;
  3. Вазнҳои нисбӣ дар асоси дархостҳои CPU ҳисоб карда мешаванд;
  4. банақшагирии CFS дар асоси дархостҳои CPU танзим карда мешавад;
  5. OOM қотил дар асоси дархостҳои хотира танзим карда мешавад;
  6. "светофор" дар асоси маҳдудиятҳои CPU танзим карда мешавад;
  7. Дар асоси маҳдудиятҳои хотира, маҳдудият барои гурӯҳ танзим карда мешавад.

Миқёси автоматӣ ва идоракунии захираҳо дар Kubernetes (баррасӣ ва гузориши видео)

Умуман, ин расм ба ҳама саволҳо дар бораи он ки чӣ гуна қисми асосии идоракунии захираҳо дар Кубернетес рух медиҳад, ҷавоб медиҳад.

Миқёси автоматӣ

K8s кластер-автомасштабкунанда

Биёед тасаввур кунем, ки тамоми кластер аллакай ишғол шудааст ва як паҳлӯи нав бояд эҷод карда шавад. Ҳангоме ки поддон пайдо шуда наметавонад, он дар ҳолати овезон мемонад дар давоми. Барои он ки он пайдо шавад, мо метавонем сервери навро ба кластер пайваст кунем ё... кластер-автошкаларо насб кунем, ки ин корро барои мо иҷро мекунад: мошини виртуалиро аз провайдери абр фармоиш диҳед (бо истифода аз дархости API) ва онро ба кластер пайваст кунед , ки пас аз он подшох илова карда мешавад.

Миқёси автоматӣ ва идоракунии захираҳо дар Kubernetes (баррасӣ ва гузориши видео)

Ин автоматизатсияи кластери Kubernetes аст, ки хуб кор мекунад (дар таҷрибаи мо). Аммо, мисли дигар ҷойҳо, дар ин ҷо баъзе нозукиҳо мавҷуданд ...

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

Кластери 3 серверро баррасӣ кунед, ки ҷойгиркунӣ дорад. Он дорои 6 қуттӣ аст: ҳоло барои ҳар як сервер 2 адад мавҷуд аст. Бо баъзе сабабҳо мо мехостем, ки яке аз серверҳоро хомӯш кунем. Барои ин мо фармонро истифода мебарем kubectl drain, ки:

  • фиристодани подкҳои навро ба ин сервер манъ мекунад;
  • подкастҳои мавҷудаи серверро нест мекунад.

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

Миқёси автоматӣ ва идоракунии захираҳо дар Kubernetes (баррасӣ ва гузориши видео)

Бо вуҷуди ин, дар ин ҷо як нозуки вуҷуд дорад. Дар вазъияти шабеҳ, барои StatefulSet (ба ҷои ҷойгиркунӣ), амалҳо гуногун хоҳанд буд. Ҳоло мо аллакай як замимаи давлатӣ дорем - масалан, се pods бо MongoDB, ки яке аз онҳо ягон мушкилот дорад (маълумот вайрон шудааст ё хатои дигаре, ки ба дуруст оғоз кардани pod монеъ мешавад). Ва мо боз тасмим гирифтем, ки як серверро хомӯш кунем. Чӣ мешавад?

Миқёси автоматӣ ва идоракунии захираҳо дар Kubernetes (баррасӣ ва гузориши видео)

Муғулистон метавонист бимирад, зеро он ба кворум ниёз дорад: барои кластери се насб, ҳадди аққал дуто бояд кор кунанд. Аммо, ин рӯй намедиҳад - ба шарофати PodDisruptionBudget. Ин параметр шумораи ҳадди ақали зарурии подкҳои кории корро муайян мекунад. Донистани он, ки яке аз қуттиҳои MongoDB дигар кор намекунад ва дидани он, ки PodDisruptionBudget барои MongoDB муқаррар шудааст minAvailable: 2, Kubernetes ба шумо имкон намедиҳад, ки подкастро нест кунед.

Сатри поён: барои дуруст кор кардани ҳаракати (ва воқеан, дубора эҳёи) поддонҳо ҳангоми баровардани кластер, PodDisruptionBudget-ро танзим кардан лозим аст.

Миқёси уфуқӣ

Биёед вазъияти дигарро дида бароем. Дар Kubernetes барномае мавҷуд аст, ки ҳамчун Deployment кор мекунад. Трафики корбар ба қуттиҳои худ меояд (масалан, сетои онҳо вуҷуд доранд) ва мо дар онҳо нишондиҳандаи муайянро чен мекунем (масалан, сарбории CPU). Вақте ки сарборӣ зиёд мешавад, мо онро дар ҷадвал сабт мекунем ва шумораи подкҳоро барои паҳн кардани дархостҳо зиёд мекунем.

Имрӯз дар Кубернетес ин корро дастӣ кардан лозим нест: афзоиш/камшавии автоматии шумораи қубурҳо вобаста ба арзишҳои нишондиҳандаҳои сарбории ченшуда танзим карда мешавад.

Миқёси автоматӣ ва идоракунии захираҳо дар Kubernetes (баррасӣ ва гузориши видео)

Саволҳои асосӣ дар ин ҷо инҳоянд: чиро аниқ чен кардан лозим аст и чи тавр шарх додан арзишҳои ба даст овардашуда (барои қабули қарор дар бораи тағир додани шумораи pods). Шумо метавонед бисёр андоза кунед:

Миқёси автоматӣ ва идоракунии захираҳо дар Kubernetes (баррасӣ ва гузориши видео)

Инро чӣ гуна бояд аз ҷиҳати техникӣ иҷро кард - ҷамъ кардани метрҳо ва ғайра. — Ман дар маъруза муфассал сухан рондам Мониторинг ва Kubernetes. Ва маслиҳати асосӣ барои интихоби параметрҳои оптималӣ аст озмоиш!

вуҷуд доранд Усули ИСТИФОДА (Теъдоди истифода ва хатогиҳо), маънии он чунин аст. Дар кадом асос васеъ кардани миқёс, масалан, php-fpm маъно дорад? Дар асоси он, ки коргарон тамом мешаванд, ин аст истифода. Ва агар коргарон тамом шуда бошанд ва алоқаҳои нав қабул карда нашаванд, ин аллакай аст оромӣ. Ҳардуи ин параметрҳо бояд чен карда шаванд ва вобаста ба арзишҳо, миқёс бояд анҷом дода шавад.

Ба ҷои хулоса

Ҳисобот идома дорад: дар бораи миқёси амудӣ ва чӣ гуна интихоб кардани захираҳои дуруст. Ман дар ин бора дар видеоҳои оянда сӯҳбат хоҳам кард YouTube-и мо - обуна шавед, то ки аз фурсат маҳрум нашавед!

Видеоҳо ва слайдҳо

Видео аз намоиш (44 дақиқа):

Муаррифии гузориш:

PS

Дигар гузоришҳо дар бораи Kubernetes дар блоги мо:

Манбаъ: will.com

Илова Эзоҳ