Кубернетедегі автомасштабтаудың үш деңгейі: оларды қалай тиімді пайдалану керек

Кубернетедегі автомасштабтаудың үш деңгейі: оларды қалай тиімді пайдалану керек
Kubernetes-ті толық меңгеру үшін кластерлік ресурстарды масштабтаудың әртүрлі жолдарын білу керек: бойынша жүйені жасаушылардың айтуынша, бұл Кубернетестің негізгі міндеттерінің бірі. Біз көлденең және тік автомасштабтау және кластер өлшемін өзгерту механизмдерінің жоғары деңгейлі шолуын, сондай-ақ оларды тиімді пайдалану бойынша ұсыныстарды ұсындық.

Мақала Kubernetes Автомасштабтау 101: Кластердің Автомасштабтаушысы, Көлденең автомасштабтауышы және Тік Pod Автомасштабтаушысы автомасштабтауды енгізген топпен аударылған Mail.ru сайтынан Kubernetes aaS.

Неліктен масштабтау туралы ойлану маңызды

Kubernetes - ресурстарды басқару және оркестрлеу құралы. Әрине, подкасттарды орналастыру, бақылау және басқарудың керемет мүмкіндіктерімен танысу жақсы (под - сұрауға жауап ретінде іске қосылатын контейнерлер тобы).

Дегенмен, сіз келесі сұрақтар туралы да ойлануыңыз керек:

  1. Модульдер мен қолданбаларды қалай масштабтауға болады?
  2. Контейнерлерді қалай жұмыс істейтін және тиімді ұстауға болады?
  3. Пайдаланушылар тарапынан код пен жұмыс жүктемесінің тұрақты өзгеруіне қалай жауап беруге болады?

Ресурстар мен өнімділікті теңестіру үшін Kubernetes кластерлерін конфигурациялау қиын болуы мүмкін және Kubernetes ішкі жұмысының сарапшылық білімін қажет етеді. Қолданбаңыздың немесе қызметтердің жұмыс жүктемесі күні бойы немесе тіпті бір сағат ішінде өзгеруі мүмкін, сондықтан теңгерімдеуді үздіксіз процесс ретінде қарастырған жөн.

Kubernetes автомасштабтау деңгейлері

Тиімді автомасштабтау екі деңгей арасындағы үйлестіруді қажет етеді:

  1. Көлденең (горизонтальды Pod Autoscaler, HPA) және тік автоматты масштабтауды (Vertical Pod Autoscaler, VPA) қоса, Pod деңгейі. Бұл контейнерлеріңіз үшін қолжетімді ресурстарды масштабтау.
  2. Кластердегі түйіндердің санын көбейтетін немесе азайтатын Cluster Autoscaler (CA) басқаратын кластер деңгейі.

Көлденең автоматты масштабтау (HPA) модулі

Аты айтып тұрғандай, HPA подкрепликалардың санын таразылайды. Көптеген әзірлеушілер репликалар санын өзгерту үшін триггерлер ретінде процессор мен жад жүктемесін пайдаланады. Дегенмен, жүйені негізінде масштабтауға болады теңшелетін көрсеткіштер, олардың комбинациясы немесе тіпті сыртқы көрсеткіштер.

Жоғары деңгейдегі HPA жұмыс диаграммасы:

  1. HPA орнату кезінде көрсетілген метрикалық мәндерді 30 секундтық әдепкі аралықта үздіксіз тексереді.
  2. Көрсетілген шекке жеткен жағдайда HPA модульдер санын көбейтуге әрекет жасайды.
  3. HPA орналастыру/репликация контроллері ішіндегі көшірмелердің санын жаңартады.
  4. Одан кейін орналастыру/репликация контроллері кез келген қажетті қосымша модульдерді орналастырады.

Кубернетедегі автомасштабтаудың үш деңгейі: оларды қалай тиімді пайдалану керек
HPA метрикалық шекке жеткенде модульді орналастыру процесін бастайды

HPA пайдаланған кезде мыналарды ескеріңіз:

  • Әдепкі HPA тексеру аралығы 30 секунд. Ол тумен белгіленеді көлденең-под-автомасштаб-синхрондау-кезеңі контроллер менеджерінде.
  • Әдепкі салыстырмалы қате 10% құрайды.
  • Модульдер санының соңғы ұлғаюынан кейін HPA көрсеткіштер үш минут ішінде тұрақталады деп күтеді. Бұл интервал жалаушамен орнатылады көлденең-под-автомасштабтаушы-жоғарғы масштабты-кідірту.
  • Модульдер санының соңғы азаюынан кейін HPA тұрақтану үшін бес минут күтеді. Бұл интервал жалаушамен орнатылады көлденең-под-автомасштабтаушы-масштабты азайту-кідірту.
  • HPA репликация контроллерімен емес, орналастыру нысандарымен жақсы жұмыс істейді. Көлденең автомасштабтау репликация контроллерін тікелей басқаратын жылжымалы жаңартумен үйлеспейді. Орналастыру кезінде көшірмелердің саны орналастыру нысандарына тікелей байланысты.

Қоспаларды тік автомасштабтау

Тік автомасштабтау (VPA) процессордың уақытын немесе жадты бар подкасттарға көбірек (немесе аз) бөледі. Күйі бар немесе азаматтығы жоқ қосқыштар үшін қолайлы, бірақ негізінен күйді көрсететін қызметтерге арналған. Дегенмен, бастапқы бөлінген ресурстардың мөлшерін автоматты түрде реттеу қажет болса, азаматтығы жоқ модульдер үшін VPA пайдалануға болады.

VPA сонымен қатар OOM (жады жоқ) оқиғаларына жауап береді. Процессордың уақытын және жадын өзгерту подкасттарды қайта іске қосуды талап етеді. Қайта іске қосылғанда, VPA бөлу бюджетін құрметтейді (pods тарату бюджеті, PDB) модульдердің ең аз қажетті санына кепілдік беру үшін.

Әрбір модуль үшін ең аз және максималды ресурстарды орнатуға болады. Осылайша, сіз бөлінген жадтың максималды көлемін 8 ГБ дейін шектей аласыз. Бұл ағымдағы түйіндер бір контейнерге 8 ГБ-тан астам жадты бөле алмаса пайдалы. Егжей-тегжейлі сипаттамалар мен жұмыс механизмі бөлімде сипатталған ресми VPA вики.

Сонымен қатар, VPA-да қызықты ұсыныс функциясы бар (VPA Recommender). Ол тарихи көрсеткіштерге негізделген интеллектуалды алгоритм негізінде жаңа жад пен процессор уақытының мәндерін ұсыну үшін барлық модульдердің ресурстарды пайдалануын және OOM оқиғаларын бақылайды. Сондай-ақ, қосқышты қабылдайтын және ұсынылған ресурс мәндерін қайтаратын API бар.

Айта кетейік, VPA Recommender ресурс «шектеуін» қадағаламайды. Бұл модульдің түйіндер ішіндегі ресурстарды монополиялауына әкелуі мүмкін. Үлкен жадты немесе процессорды тұтынуды болдырмау үшін шектеуді аттар кеңістігі деңгейінде орнатқан дұрыс.

Жоғары деңгейлі VPA жұмыс схемасы:

  1. VPA орнату кезінде көрсетілген метрикалық мәндерді 10 секундтық әдепкі аралықта үздіксіз тексереді.
  2. Көрсетілген шекке жетсе, VPA ресурстардың бөлінген көлемін өзгертуге әрекет жасайды.
  3. VPA орналастыру/репликация контроллері ішіндегі ресурстардың санын жаңартады.
  4. Модульдер қайта іске қосылғанда, барлық жаңа ресурстар жасалған даналарға қолданылады.

Кубернетедегі автомасштабтаудың үш деңгейі: оларды қалай тиімді пайдалану керек
VPA ресурстардың қажетті мөлшерін қосады

VPA пайдалану кезінде келесі тармақтарды есте сақтаңыз:

  • Масштабтау подкастты міндетті түрде қайта іске қосуды талап етеді. Бұл өзгерістер енгізілгеннен кейін тұрақсыз жұмысты болдырмау үшін қажет. Сенімділік үшін модульдер қайта іске қосылады және жаңадан бөлінген ресурстар негізінде түйіндер бойынша таратылады.
  • VPA және HPA әлі бір-бірімен үйлеспейді және бір подкасттарда жұмыс істей алмайды. Бір кластерде екі масштабтау механизмін де пайдалансаңыз, параметрлеріңіз олардың бірдей нысандарда іске қосылуына жол бермейтініне көз жеткізіңіз.
  • VPA тек бұрынғы және ағымдағы пайдалану негізінде ресурстарға арналған контейнер сұрауларын реттейді. Ол ресурстарды пайдалану шектеулерін белгілемейді. Қолданбалардың дұрыс жұмыс істемеуі және барған сайын көбірек ресурстарды иеленуіне байланысты мәселелер туындауы мүмкін, бұл Кубернеттердің осы подкастты өшіруіне әкеледі.
  • VPA әлі дамудың бастапқы кезеңінде. Жүйе жақын болашақта кейбір өзгерістерге ұшырауы мүмкін екеніне дайын болыңыз. туралы оқи аласыз белгілі шектеулер и даму жоспарлары. Осылайша, VPA және HPA бірлескен жұмысын жүзеге асыру, сондай-ақ олар үшін тік автомасштабтау саясатымен бірге модульдерді орналастыру жоспарлары бар (мысалы, арнайы белгі «VPA қажет»).

Kubernetes кластерін автоматты масштабтау

Cluster Autoscaler (CA) күту подкасттарының санына негізделген түйіндер санын өзгертеді. Жүйе күтудегі модульдерді мерзімді түрде тексереді - және егер көбірек ресурстар қажет болса және кластер белгіленген шектеулерден аспаса, кластер өлшемін арттырады. CA бұлттық қызмет провайдерімен байланысады, одан қосымша түйіндерді сұрайды немесе бос тұрғандарды шығарады. CA-ның бірінші жалпы қолжетімді нұсқасы Kubernetes 1.8-де енгізілді.

SA жұмысының жоғары деңгейлі схемасы:

  1. CA күтудегі модульдерді 10 секунд әдепкі аралықпен тексереді.
  2. Бір немесе бірнеше подкаст күту күйінде болса, кластерде оларды бөлу үшін жеткілікті қолжетімді ресурстар жоқ болса, ол бір немесе бірнеше қосымша түйіндерді қамтамасыз етуге әрекет жасайды.
  3. Бұлттық қызмет провайдері қажетті түйінді бөлгенде, ол кластерге қосылады және подкасттарға қызмет көрсетуге дайын болады.
  4. Kubernetes жоспарлаушысы күтудегі подкасттарды жаңа түйінге таратады. Осыдан кейін кейбір модульдер әлі күту күйінде қалса, процесс қайталанады және кластерге жаңа түйіндер қосылады.

Кубернетедегі автомасштабтаудың үш деңгейі: оларды қалай тиімді пайдалану керек
Бұлттағы кластерлік түйіндерді автоматты түрде қамтамасыз ету

CA пайдалану кезінде мыналарды ескеріңіз:

  • CA кластердегі барлық қосқыштарда CPU жүктемесіне қарамастан іске қосу үшін орын болуын қамтамасыз етеді. Ол сондай-ақ кластерде қажетсіз түйіндердің болмауын қамтамасыз етуге тырысады.
  • CA шамамен 30 секундтан кейін масштабтау қажеттілігін тіркейді.
  • Түйін қажет болмай қалса, CA әдепкі бойынша жүйені масштабтаудан бұрын 10 минут күтеді.
  • Автомасштабтау жүйесінде кеңейткіштер түсінігі бар. Бұл жаңа түйіндер қосылатын түйіндер тобын таңдаудың әртүрлі стратегиялары.
  • Опцияны жауапкершілікпен пайдаланыңыз cluster-autoscaler.kubernetes.io/safe-to-evict (шын). Егер сіз көп бөліктерді орнатсаңыз немесе олардың көпшілігі барлық түйіндерге шашыраңқы болса, кластерді кеңейту мүмкіндігін айтарлықтай жоғалтасыз.
  • Пайдаланыңыз PodDisruptionBudgetsқолданбаңыздың бөліктерінің толығымен бұзылуына әкелетін бөлімдердің жойылуын болдырмау үшін.

Kubernetes автокөлемдері бір-бірімен қалай әрекеттеседі

Керемет үйлесімділік үшін автомасштабтау подколь деңгейінде (HPA/VPA) және кластер деңгейінде қолданылуы керек. Олар бір-бірімен салыстырмалы түрде қарапайым әрекеттеседі:

  1. HPA немесе VPA подкрепликаларын немесе бұрыннан бар қосқыштарға бөлінген ресурстарды жаңартады.
  2. Жоспарланған масштабтау үшін түйіндер жеткіліксіз болса, CA күту күйіндегі түйіндердің болуын байқайды.
  3. CA жаңа түйіндерді бөледі.
  4. Модульдер жаңа түйіндерге таратылады.

Кубернетедегі автомасштабтаудың үш деңгейі: оларды қалай тиімді пайдалану керек
Бірлескен Kubernetes масштабын кеңейту жүйесі

Kubernetes автомасштабтауындағы жалпы қателер

Автомасштабтауды жүзеге асыруға тырысқанда әзірлеушілер кездесетін бірнеше жалпы мәселелер бар.

HPA және VPA көрсеткіштерге және кейбір тарихи деректерге тәуелді. Егер ресурстар жеткіліксіз бөлінсе, модульдер кішірейтіліп, көрсеткіштерді жасай алмайды. Бұл жағдайда автоматты масштабтау ешқашан болмайды.

Масштабтау операциясының өзі уақытты ескереді. Біз модульдер мен кластердің жылдам масштабтағанын қалаймыз - пайдаланушылар қандай да бір ақауларды немесе сәтсіздіктерді байқамай тұрып. Сондықтан, блоктар мен кластерді масштабтаудың орташа уақытын ескеру қажет.

Идеал сценарий – 4 минут:

  1. 30 секунд. Мақсатты көрсеткіштерді жаңарту: 30−60 секунд.
  2. 30 секунд. HPA метрикалық мәндерді тексереді: 30 секунд.
  3. 2 секундтан аз. Қоспалар жасалады және күту күйіне өтеді: 1 секунд.
  4. 2 секундтан аз. CA күту модульдерін көреді және қоңырауларды қамтамасыз ету түйіндеріне жібереді: 1 секунд.
  5. 3 минут. Бұлттық провайдер түйіндерді бөледі. K8s дайын болғанша күтеді: 10 минутқа дейін (бірнеше факторларға байланысты).

Ең нашар жағдай (нақтырақ) сценарий – 12 минут:

  1. 30 секунд. Мақсатты көрсеткіштерді жаңарту.
  2. 30 секунд. HPA метрикалық мәндерді тексереді.
  3. 2 секундтан аз. Қоспалар жасалып, күту күйіне өтеді.
  4. 2 секундтан аз. CA күту модульдерін көреді және түйіндерді қамтамасыз ету үшін қоңыраулар жасайды.
  5. 10 минут. Бұлттық провайдер түйіндерді бөледі. K8s дайын болғанша күтеді. Күту уақыты жеткізушінің кешігуі, ОЖ кешігуі және қолдау құралдары сияқты бірнеше факторларға байланысты.

Бұлттық провайдерлердің масштабтау механизмдерін біздің CA-мен шатастырмаңыз. Соңғысы Kubernetes кластерінің ішінде жұмыс істейді, ал бұлттық провайдер қозғалтқышы түйінді тарату негізінде жұмыс істейді. Ол сіздің қосқыштарыңызбен немесе қолданбаңызбен не болып жатқанын білмейді. Бұл жүйелер параллель жұмыс істейді.

Kubernetes-те масштабтауды қалай басқаруға болады

  1. Kubernetes - ресурстарды басқару және оркестрлеу құралы. Бөлшектерді және кластерлік ресурстарды басқару операциялары Kubernetes-ті игерудегі маңызды кезең болып табылады.
  2. HPA және VPA ескере отырып, подкасттың ауқымдылығының логикасын түсініңіз.
  3. CA-ны тек бөтелкелер мен контейнерлердің қажеттіліктерін жақсы түсінген жағдайда ғана пайдалану керек.
  4. Кластерді оңтайлы конфигурациялау үшін әртүрлі масштабтау жүйелері бірге қалай жұмыс істейтінін түсінуіңіз керек.
  5. Масштабтау уақытын бағалау кезінде ең нашар және ең жақсы сценарийлерді есте сақтаңыз.

Ақпарат көзі: www.habr.com

пікір қалдыру