Trys automatinio mastelio keitimo lygiai „Kubernetes“: kaip juos efektyviai naudoti

Trys automatinio mastelio keitimo lygiai „Kubernetes“: kaip juos efektyviai naudoti
Norėdami visiškai įvaldyti „Kubernetes“, turite žinoti skirtingus klasterio išteklių mastelio keitimo būdus: pagal pasak sistemos kūrėjų, tai viena pagrindinių Kubernetes užduočių. Pateikėme aukšto lygio horizontalaus ir vertikalaus automatinio mastelio keitimo ir grupių dydžio keitimo mechanizmų apžvalgą bei rekomendacijas, kaip juos efektyviai naudoti.

Straipsnis „Kubernetes Autoscaling 101“: klasterio automatinis mastelio keitiklis, horizontalusis automatinis mastelio keitiklis ir vertikalios talpos automatinis skalavimo įrankis išvertė komanda, įdiegusi automatinį mastelį Kubernetes aaS iš Mail.ru.

Kodėl svarbu galvoti apie mastelio keitimą

Kubernetes - išteklių valdymo ir orkestravimo įrankis. Žinoma, malonu padirbėti su šauniomis podelių diegimo, stebėjimo ir valdymo funkcijomis (dėklas yra konteinerių grupė, kuri paleidžiama pagal užklausą).

Tačiau taip pat turėtumėte pagalvoti apie šiuos klausimus:

  1. Kaip pakeisti modulių ir programų mastelį?
  2. Kaip užtikrinti, kad konteineriai veiktų ir veiktų efektyviai?
  3. Kaip reaguoti į nuolatinius kodo pokyčius ir vartotojų darbo krūvius?

„Kubernetes“ grupių konfigūravimas siekiant suderinti išteklius ir našumą gali būti sudėtingas ir reikalauja ekspertų žinių apie vidinį „Kubernetes“ veikimą. Jūsų programos ar paslaugų darbo krūvis gali svyruoti visą dieną ar net valandą, todėl balansavimą geriausia laikyti nuolatiniu procesu.

Kubernetes automatinio mastelio keitimo lygiai

Veiksmingam automatiniam mastelio keitimui reikalingas dviejų lygių koordinavimas:

  1. Pod lygis, įskaitant horizontalųjį (Horizontal Pod Autoscaler, HPA) ir vertikalųjį automatinį skalerį (Vertical Pod Autoscaler, VPA). Tai sumažina galimus jūsų sudėtinių rodinių išteklius.
  2. Klasterio lygis, kurį valdo Cluster Autoscaler (CA), kuris padidina arba sumažina mazgų skaičių klasteryje.

Horizontalus automatinio mastelio (HPA) modulis

Kaip rodo pavadinimas, HPA padidina ankšties kopijų skaičių. Dauguma „devop“ naudoja procesoriaus ir atminties apkrovą kaip paleidiklius, kad pakeistų kopijų skaičių. Tačiau galima keisti sistemos mastelį tinkinta metrika, jų derinys или даже išorinės metrikos.

Aukšto lygio HPA veikimo schema:

  1. HPA nuolat tikrina matavimo reikšmes, nurodytas diegimo metu, numatytuoju 30 sekundžių intervalu.
  2. HPA bando padidinti modulių skaičių, jei pasiekiamas nurodytas slenkstis.
  3. HPA atnaujina kopijų skaičių diegimo / replikacijos valdiklyje.
  4. Tada diegimo / replikacijos valdiklis diegia visus būtinus papildomus modulius.

Trys automatinio mastelio keitimo lygiai „Kubernetes“: kaip juos efektyviai naudoti
HPA pradeda modulio diegimo procesą, kai pasiekiama metrinė riba

Naudodami HPA, atsižvelkite į šiuos dalykus:

  • Numatytasis HPA tikrinimo intervalas yra 30 sekundžių. Jį nustato vėliava horizontalus-pod-autoscaler-sync-period valdiklio vadove.
  • Numatytoji santykinė klaida yra 10%.
  • Po paskutinio modulių skaičiaus padidinimo HPA tikisi, kad rodikliai stabilizuosis per tris minutes. Šis intervalas nustatomas vėliava horizontalus-pod-autoscaler-upscale-delay.
  • Po paskutinio modulių skaičiaus sumažinimo HPA laukia penkias minutes, kol stabilizuosis. Šis intervalas nustatomas vėliava horizontalus-pod-autoscaler-downscale-delay.
  • HPA geriausiai veikia su diegimo objektais, o ne su replikacijos valdikliais. Horizontalus automatinis mastelio keitimas nesuderinamas su nuolatiniu atnaujinimu, kuris tiesiogiai manipuliuoja replikacijos valdikliais. Diegiant, kopijų skaičius tiesiogiai priklauso nuo diegimo objektų.

Vertikalus ankščių automatinis skalavimas

Vertikalus automatinis mastelio keitimas (VPA) skiria daugiau (arba mažiau) procesoriaus laiko arba atminties esamiems blokams. Tinka būsenos arba be būsenos ankštims, bet daugiausia skirta būsenos paslaugoms. Tačiau taip pat galite naudoti VPA moduliams be būsenos, jei reikia automatiškai koreguoti iš pradžių skirtų išteklių kiekį.

VPA taip pat reaguoja į OOM (out of memory) įvykius. Norint pakeisti procesoriaus laiką ir atmintį, reikia iš naujo paleisti blokus. Iš naujo paleidus VPA atsižvelgiama į paskirstymo biudžetą (ankščių platinimo biudžetas, PBP), kad būtų garantuotas minimalus reikiamas modulių skaičius.

Kiekvienam moduliui galite nustatyti minimalius ir maksimalius išteklius. Taigi galite apriboti didžiausią skiriamos atminties kiekį iki 8 GB. Tai naudinga, jei dabartiniai mazgai tikrai negali skirti daugiau nei 8 GB atminties vienam konteineriui. Išsamios specifikacijos ir veikimo mechanizmas aprašyti oficiali VPA wiki.

Be to, VPA turi įdomią rekomendacijų funkciją (VPA Recommender). Jis stebi išteklių naudojimą ir visų modulių OOM įvykius, kad pasiūlytų naujas atminties ir procesoriaus laiko reikšmes, pagrįstas intelektualiu algoritmu, pagrįstu istorine metrika. Taip pat yra API, kuri perima pod rankeną ir grąžina siūlomas išteklių reikšmes.

Verta paminėti, kad VPA Recommender neseka išteklių „ribos“. Dėl to modulis gali monopolizuoti išteklius mazguose. Geriau nustatyti ribą vardų erdvės lygiu, kad išvengtumėte didžiulio atminties ar procesoriaus suvartojimo.

Aukšto lygio VPA veikimo schema:

  1. VPA nuolat tikrina matavimo reikšmes, nurodytas diegimo metu, numatytuoju 10 sekundžių intervalu.
  2. Pasiekus nurodytą slenkstį, VPA bando pakeisti skiriamą išteklių kiekį.
  3. VPA atnaujina išteklių skaičių diegimo / replikacijos valdiklyje.
  4. Kai moduliai paleidžiami iš naujo, sukurtiems egzemplioriams pritaikomi visi nauji ištekliai.

Trys automatinio mastelio keitimo lygiai „Kubernetes“: kaip juos efektyviai naudoti
VPA prideda reikiamą kiekį išteklių

Naudodami VPA atminkite šiuos dalykus:

  • Norint pakeisti mastelį, reikia iš naujo paleisti bloką. Tai būtina norint išvengti nestabilaus veikimo po pakeitimų. Siekiant patikimumo, moduliai paleidžiami iš naujo ir paskirstomi mazguose pagal naujai paskirtus išteklius.
  • VPA ir HPA dar nesuderinami vienas su kitu ir negali veikti tuose pačiuose moduliuose. Jei naudojate abu mastelio keitimo mechanizmus tame pačiame klasteryje, įsitikinkite, kad nustatymai neleidžia jų suaktyvinti tuose pačiuose objektuose.
  • VPA derina konteinerių užklausas dėl išteklių tik pagal ankstesnį ir dabartinį naudojimą. Jis nenustato išteklių naudojimo apribojimų. Gali kilti problemų dėl netinkamai veikiančių programų ir pradedančių perimti vis daugiau išteklių, todėl „Kubernetes“ išjungs šį bloką.
  • VPA vis dar yra ankstyvoje kūrimo stadijoje. Būkite pasirengę, kad artimiausiu metu sistema gali pasikeisti. Galite perskaityti apie žinomi apribojimai и plėtros planus. Taigi planuojama įgyvendinti bendrą VPA ir HPA veikimą, taip pat diegti modulius kartu su vertikalaus automatinio mastelio keitimo politika (pavyzdžiui, speciali etiketė „reikia VPA“).

Automatinis Kubernetes klasterio mastelio keitimas

Cluster Autoscaler (CA) pakeičia mazgų skaičių pagal laukiančių grupių skaičių. Sistema periodiškai tikrina laukiančius modulius ir padidina klasterio dydį, jei reikia daugiau išteklių ir jei klasteris neviršija nustatytų ribų. CA bendrauja su debesijos paslaugų teikėju, prašo papildomų mazgų arba išleidžia neveikiančius mazgus. Pirmoji visuotinai prieinama CA versija buvo pristatyta Kubernetes 1.8 versijoje.

Aukšto lygio SA veikimo schema:

  1. CA tikrina laukiančius modulius numatytuoju 10 sekundžių intervalu.
  2. Jei vienas ar daugiau blokų yra budėjimo būsenoje, nes klasteris neturi pakankamai išteklių jiems paskirstyti, jis bando numatyti vieną ar daugiau papildomų mazgų.
  3. Kai debesijos paslaugų teikėjas paskiria reikiamą mazgą, jis prisijungia prie klasterio ir yra pasirengęs aptarnauti ankštis.
  4. Kubernetes planavimo priemonė paskirsto laukiančius blokus naujam mazgui. Jei po to kai kurie moduliai vis dar lieka laukimo būsenoje, procesas kartojamas ir į klasterį įtraukiami nauji mazgai.

Trys automatinio mastelio keitimo lygiai „Kubernetes“: kaip juos efektyviai naudoti
Automatinis klasterio mazgų aprūpinimas debesyje

Naudodami CA atsižvelkite į šiuos dalykus:

  • CA užtikrina, kad visi grupės blokai turėtų vietos veikti, nepaisant procesoriaus apkrovos. Taip pat bandoma užtikrinti, kad klasteryje nebūtų nereikalingų mazgų.
  • CA užregistruoja poreikį keisti mastelį maždaug po 30 sekundžių.
  • Kai mazgas nebereikalingas, CA pagal numatytuosius nustatymus laukia 10 minučių prieš sumažindama sistemos mastelį.
  • Automatinio mastelio keitimo sistema turi plėtiklių koncepciją. Tai skirtingos mazgų grupės, prie kurios bus pridedami nauji mazgai, pasirinkimo strategijos.
  • Naudokitės pasirinkimu atsakingai cluster-autoscaler.kubernetes.io/safe-to-evict (true). Jei įdiegsite daug ankšties arba jei daugelis iš jų yra išsklaidytos visuose mazguose, iš esmės prarasite galimybę išplėsti grupę.
  • Naudokite PodDisruptionBudgetskad būtų išvengta ankšties ištrynimo, nes dėl to kai kurios programos gali visiškai sugesti.

Kaip „Kubernetes“ automatiniai skalės įrenginiai sąveikauja tarpusavyje

Norint pasiekti tobulą harmoniją, automatinis mastelio keitimas turėtų būti taikomas ir pod (HPA/VPA), ir klasterio lygiu. Jie sąveikauja vienas su kitu gana paprastai:

  1. HPA arba VPA atnaujina priedų kopijas arba esamoms grupėms skirtus išteklius.
  2. Jei nėra pakankamai mazgų planuojamam mastelio keitimui, CA pastebi, kad ankštys yra laukiančios būsenos.
  3. CA skiria naujus mazgus.
  4. Moduliai paskirstomi naujiems mazgams.

Trys automatinio mastelio keitimo lygiai „Kubernetes“: kaip juos efektyviai naudoti
Bendradarbiaujanti „Kubernetes“ padidinimo sistema

Dažnos Kubernetes automatinio skalavimo klaidos

Yra keletas bendrų problemų, su kuriomis „devops“ susiduria bandydami įdiegti automatinį mastelio keitimą.

HPA ir VPA priklauso nuo metrikos ir kai kurių istorinių duomenų. Jei nebus skirta pakankamai išteklių, moduliai bus sumažinti ir negalės generuoti metrikos. Šiuo atveju automatinis mastelio keitimas niekada neįvyks.

Pati mastelio keitimo operacija yra jautri laikui. Norime, kad moduliai ir klasteris greitai padidėtų – naudotojams nepastebėjus jokių problemų ir gedimų. Todėl reikia atsižvelgti į vidutinį ankščių ir grupės mastelio keitimo laiką.

Idealus scenarijus – 4 minutės:

  1. 30 sekundžių. Atnaujinti tikslinę metriką: 30–60 sekundžių.
  2. 30 sekundžių. HPA tikrina metrines reikšmes: 30 sekundžių.
  3. Mažiau nei 2 sekundes. Ankštys sukuriamos ir pereina į laukimo būseną: 1 sekundė.
  4. Mažiau nei 2 sekundes. CA mato laukiančius modulius ir siunčia skambučius į aprūpinimo mazgus: 1 sekundė.
  5. 3 minutes. Debesų paslaugų teikėjas skiria mazgus. K8s laukia, kol bus paruošti: iki 10 minučių (priklauso nuo kelių veiksnių).

Blogiausias (tikresnis) scenarijus – 12 minučių:

  1. 30 sekundžių. Atnaujinkite tikslinę metriką.
  2. 30 sekundžių. HPA tikrina metrines reikšmes.
  3. Mažiau nei 2 sekundes. Ankštys sukuriamos ir pereina į budėjimo būseną.
  4. Mažiau nei 2 sekundes. CA mato laukiančius modulius ir iškviečia mazgus.
  5. 10 minučių. Debesų paslaugų teikėjas skiria mazgus. K8s laukia, kol bus paruošti. Laukimo laikas priklauso nuo kelių veiksnių, pvz., tiekėjo delsos, OS delsos ir palaikymo įrankių.

Nepainiokite debesų paslaugų teikėjų mastelio keitimo mechanizmų su mūsų CA. Pastarasis veikia „Kubernetes“ klasteryje, o debesies teikėjo variklis veikia mazgo paskirstymo pagrindu. Jis nežino, kas vyksta su jūsų ankštimis ar programa. Šios sistemos veikia lygiagrečiai.

Kaip valdyti mastelio keitimą „Kubernetes“.

  1. Kubernetes yra išteklių valdymo ir orkestravimo įrankis. Pods ir klasterio išteklių valdymo operacijos yra pagrindinis Kubernetes įsisavinimo etapas.
  2. Supraskite pod mastelio logiką atsižvelgiant į HPA ir VPA.
  3. CA turėtų būti naudojamas tik tuo atveju, jei gerai suprantate savo ankščių ir talpyklų poreikius.
  4. Norėdami optimaliai sukonfigūruoti grupę, turite suprasti, kaip skirtingos mastelio keitimo sistemos veikia kartu.
  5. Apskaičiuodami mastelio keitimo laiką, turėkite omenyje blogiausio ir geriausio atvejo scenarijus.

Šaltinis: www.habr.com

Добавить комментарий