
Kubernetes-ը լիարժեք освоելու համար անհրաժեշտ է connaître տարբեր ձևեր масштабирования кластерных ресурсов: по , это одна из главных задач Kubernetes. Մենք պատրաստել ենք բարձր մակարդակի ակնարկ горизонтального և вертикального ավտոմատ քանակի ավելացման և кластарների չափերի փոփոխությունների մեխանիզմների, ինչպես նաև խորհուրդներ, թե ինչպես դրանք արդյունավետ օգտագործել:
Հոդվածը աղջիկ, որը իրականացնում է ավտոմատ քանակի ավելացում в .
Ինչու է կարևոր մտածել масштабирования-ի մասին
— միջոց ресурсов и оркестровки-ի համար: Հետեւաբար, լավ կլինի խաղալ գեղեցիկ գործառույթներով desplegado, մոնիտորինգի և pod-երի կառավարում (pod-modul — танкային контейներ, запускаемых в ответ на запрос).
Այնուամենայնիվ, անհրաժեշտ է մտածել նաև այսպիսի հարցերի մասին:
- Ինչպե՞ս масштабировать մոդուլները և ծրագրերը:
- Ինչպես պահպանել контейներ գործնական և արդյունավետ վիճակում:
- Ինչպես արձագանքել մշտական փոփոխություններին կոդում և օգտվողների աշխատանքային нагрузках:
Настройка кластеров Kubernetes для балансировки ресурсов и производительности может быть сложной задачա, она требует экспертных знаний о внутренней работе Kubernetes. Ձեր ծրագրի կամ ծառայությունների աշխատանքային нагрузка կարող է տատանվել օրում կամ նույնիսկ մեկ ժամվա ընթացքում, ուստի բալանսավորումը ավելի լավ է ներկայացնել որպես շարունակական գործընթաց:
Kubernetes-ի ավտոմատ քանակի ավելացման մակարդակները
Эффективное автоакъширование требует координации между двумя уровнями:
- Pod-р_LEVEL, включая горизонтальное (Horizontal Pod Autoscaler, HPA) и вертикальное автоакъքширование (Vertical Pod Autoscaler, VPA). Это масштабирование имеющихся ресурсов для ваших контейнеров.
- Класսի մակարդակ, которым управляет система автоакъширования кластеров (Cluster Autoscaler, CA), она увеличивает или уменьшает количество узлов внутри кластера.
Горизонтальный автоակծեր (HPA)
Как следует из названия, HPA масштабирует количество реплик pod’ов. В качестве триггеров для изменения количества реплик большинство девопсов используют нагрузку на процессор и память. Однако можно масштабировать систему на основе , их կամ նույնիսկ .
Высокоуровневая схема работы HPA:
- HPA непрерывно проверяет значения метрик, указанные при установке, с интервалом по умолчанию 30 секунд.
- HPA пытается увеличить количество модулей, если достигнут заданный порог.
- HPA обновляет количество реплик внутри контроллера развертывания/репликации.
- Контроллер развертывания/репликации затем разворачивает все необходимые дополнительные модули.

HPA запускает процесс развертывания модулей при достижении порогового значения метрик
При использовании HPA учитывайте следующее:
- HPA-ի ստուգման միջակայքը ըստ հաղորդագրության 30 վայրկյան է։ Այն սահմանվում է դրոշակով horizontal-pod-autoscaler-sync-period կառավարիչում։
- Անկարողության հարաբերական սխալը կազմում է 10%։
- Վերջին մոդուլների քանակի մեծացումից հետո HPA-ն ակնկալում է չափորոշիչների կայունացումը երեք րոպեների ընթացքում։ Այս միջակայքը սահմանվում է դրոշակով horizontal-pod-autoscaler-upscale-delay.
- Վերջին մոդուլների քանակի նվազեցումից հետո HPA-ն ակնկալում է կայունացումը հինգ րոպեների ընթացքում։ Այս միջակայքը սահմանվում է դրոշակով horizontal-pod-autoscaler-downscale-delay.
- HPA-ն լավագույնս աշխատում է բաշխված օբյեկտների հետ, այլ ոչ թե կրկնակի կառավարչի։ Հորիզոնական ավտոմատացումը անհամատեղելի է փուլային թարմացման (rolling update) հետ, որը ուղիղ կերպով կառավարում է կրկնակի կառավարչին։ Երբ տեղաբաշխում է, կրկնակիների քանակը ուղղակիորեն կախված է բաշխված օբյեկտներից։
pod-ների անկյունայի ավտոմատացում
Անկյունային ավտոմատացումը (VPA) տրամադրում է ավելի (կամ ավելի քիչ) պրոցեսորային ժամանակ կամ հատկություններ գոյություն ունեցող pod-ների համար։ Դա համապատասխանում է հաստատուն (stateful) կամ հաստատուն չլինող (stateless) pod-ներին, սակայն հիմնականում նախատեսված է stateful ծառայությունների համար։ Սակայն, դուք կարող եք կիրառել VPA նաև առանց պահպանման մոդուլների համար, եթե հարկավոր է ինքնակազմակերպել սկզբից հատկացված ռեսուրսների ծավալը։
VPA-ն նաև արձագանքում է OOM (out of memory, հիշողության պակաս) իրադարձություններին։ Պրոցեսորային ժամանակի և հիշողությանը փոփոխություն կատարելու համար պահանջվում է pod-ների վերագործարկում։ Վերագործարկման ժամանակ VPA-ն պահպանվում է բաժանման բյուջեն (), որպեսզի երաշխավորված լինի անհրաժեշտ նվազագույն մոդուլների քանակը։
Դուք կարող եք կարգադրել յուրաքանչյուր մոդուլի համար նվազագույն և առավելագույն ռեսուրսների ծավալներ։ Այսպիսով, կարելի է սահմանափակել հիշողության առավելագույն ծավալը 8 ԳԲ սահմանով։ Դա օգտակար է, եթե ընթացիկ узлы-ն ճշգրտորեն չեն կարող հատկացնել ավելի քան 8 ԳԲ հիշողություն կոնտեյների համար։ Մանրամասն մասնագիտացումները և գործող մեխանիզմը նկարագրվում են .
Բացի նրանից, VPA-ն ունի հետաքրքիր առաջարկներ (VPA Recommender)։ Դա հետևում է ռեսուրսների օգտագործմանը և OOM իրադարձություններին բոլոր մոդուլների, որպեսզի առաջարկի նոր հիշողության և պրոցեսորային ժամանակի արժեքներ՝ հիմնվելով իրավաչափ ալգորիթմի վրա պատմական չափումների հաշվի առնելով։ Այնպես էլ կա API, որը ընդունում է pod-ի նկարագրիչ և տալիս է առաջարկվող ռեսուրսների արժեքները։
Գործնականում VPA Recommender-ն չի հետևում ռեսուրսների 'սահմանին'։ Սա կարող է հանգեցնել того, что модуль монополизирует ресурсы внутри узлов։ Լավ է սահմանափակել սահմանը տարածքի մակարդակում, որպեսզի խուսափել մակարդակի մեծ ծախսի կամ պրոցեսորային ժամանակի։
VPA-ի բարձր մակարդակի աշխատանքային схема։
- VPA-ն շարունակաբար ստուգում է կշիռների արժեքները, որոնք ենթակա են սահմանման, 10 վայրկյանների միջակայքով։
- Եթե հասնեք սահմանված շեմին, VPA-ն փորձում է փոփոխել հատկացած ռեսուրսների քանակը:
- VPA-ն թարմացնում է ռեսուրսների քանակը վերահսկողի ներսում, որը զբաղվում է տեղաբաշխմամբ/պատճենով:
- Մոդուլների վերագործարկման ժամանակ բոլոր նոր ռեսուրսները կիրառվում են ստեղծված ինստանսներուն:

VPA-ն ավելացնում է անհրաժեշտ ռեսուրսների քանակը:
Հաշվի առեք հետևյալ կետերը VPA օգտագործելիս:
- Մետանումը պահանջում է տեղեկացված վերագործարկում pod-ի։ Սա անհրաժեշտ է, որպեսզի խուսափել անընդհատ աշխատանքի վերափոխումից փոփոխություններ կատարելիս։ Վստահության համար մոդուլները վերագործարկում և բաշխում են узлах նոր հատկեցված ռեսուրսների հիման վրա:
- VPA-ն և HPA-ն այժմ միմյանց հետ համատեղելի չեն և无法 աշխատել նույն pod-ներում։ Եթե դուք կիրառել եք մի կլաստերյում երկու գրառումներ, համոզվեք, որ կարգավորումները թույլ չեն տալիս, որ նրանք ակտիվանան նույն օբյեկտների վրա:
- VPA-ն կարգավորում է կոնտեյներների ռեսուրսների պահանջները միայն անցյալն ու ներկան օգտագործմամբ: Նրանք չեն սահմանում ռեսուրսների օգտագործման սահմանները: Հնարավոր են խնդիրներ անճշտ աշխատանքներով ծրագրերի, որոնք սկսում են գրավել ավելի ու ավելի ռեսուրսներ, ինչը կհանգեցնի, որ Kubernetes-ը անջատի այդ pod-ը:
- VPA-ն այժմ զարգացման վաղ փուլում է: Будьте готовы, что в ближайшее время система может претерпеть некоторые изменения. Можно почитать об և . Таким образом, в планах реализовать совместную работу VPA и HPA, а также развертывание модулей вместе с политикой вертикального автомасштабирования для них (например, специальная метка ‘requires VPA’).
Kubernetes կլաստերի ավտոմասշտաբավորում
Կլաստերի ավտոմատացված կառավարումը (Cluster Autoscaler, CA) փոփոխում է узловի քանակը, հիմնվում այն բանի վրա, թե քանի քանի մոդուլներ են սպասում: Սистема периодически проверяет наличие ожидающих модулей — и увеличивает размер кластера, если требуется больше ресурсов и если кластер не выходит за пределы установленных лимитов. CA взаимодействует с поставщиком облачных услуг, запрашивает у него дополнительные узлы или освобождает бездействующие. Первая общедоступная версия CA была представлена в Kubernetes 1.8.
CA-ի բարձր մակարդակի աշխատանքային սքեման:
- CA-ն ստուգում է սպասող մոդուլների հասանելիությունը սովորաբար 10 վայրկյան անց:
- Եթե մեկ կամ մի քանի մոդուլ կանգնած են սպասման վիճակում, քանի որ անբավարար ռեսուրսներ են կլաստերում, նա փորձում է պատրաստել մի քանի լրացուցիչ узлы:
- Երբ հ CLOUD ծառայությունների մատակարարն հատկանում է անհրաժեշտ узлы, նա միանում է կլաստերին և պատրաստ է սպասարկելու մոդուլներ pod:
- Kubernetes-ի ծրագրավորիչն սպասող մոդուլները հարկային նոր հանգույցի վրա: Եթե դրանից հետո որոշ մոդուլներ դեռ մնում են սպասման վիճակում, գործընթացը կրկնվում է՝ և նոր հանգույցներ ավելացվում են կլաստերին:

Կլաստերի հանգույցների ավտոմատ հատկավորում-cloud-ում
Ընդհանուր առմամբ հաշվի առեք հետևյալը, օգտագործելիս CA:
- CA-ն երաշխավորում է, որ կլաստերի բոլոր մոդուլներում կա գործարկման տեղ, անկախ պրոցեսորի բեռի մակարդակից: Բացի այդ, այն փորձում է երաշխավորել, որ կլաստերում չկան անպիտան հանգույցներ:
- CA-ն գրանցում է սանդղակի անհրաժեշտությունը մոտ 30 վարկյան հետո:
- Յուրաքանչյուր անգամ, երբ հանգույցը դառնում է անպիտան, CA-ն ըստ սահմանման սպասում է 10 րոպե, նախքան համակարգը սանդղակելը:
- Ավտոմասշտաբավորման համակարգում կա վարչակի (expanders) հասկացությունը: Սա տարբեր ռազմավարություններ են՝ այն խմբի հանգույցի ընտրության համար, որի մեջ նորերը կավելացվեն:
- Պատասխանատու եղեք կիրառել ընտրանքը cluster-autoscaler.kubernetes.io/safe-to-evict (true). Եթե դուք հաստատեք շատ pod-ներ կամ եթե շատերն էլ նշված են բոլոր հանգույցներում, դուք կկորցնեք կլաստերը նվազեցնելու հնարավորությունը:
- Օգտագործեք , որպեսզի կանխել pod-ների հեռացումը, որից հետո ձեր ծրագրումը կարող է ամբողջովին կանգնել:
Ինչպես Kubernetes-ի ավտոմասշտաբավորման համակարգերը փոխազդում են միմյանց հետ
Որպեսզի իդեալական ներդաշնակություն պահպանվի, պետք է կիրառել ավտոմասշտաբավորում ինչպես pod-ներին (HPA/VPA), այնպես էլ կլաստերին: Դրանք բավականին հեշտ են փոխազդում միմյանց հետ:
- HPA-ն կամ VPA-ն թարմացնում են pod-ների կրկնապատիկները կամ արդեն առկա pod-ների համար հատկացված ռեսուրսները:
- Եթե պլանավորված սանդղակման համար բավարար հանգույցներ չկան, CA-ն նկատում է սպասման մեջ գտնվող pod-ները:
- CA-ն հատկացում է նոր հանգույցներ:
- Մոդուլները բաշխվում են նոր հանգույցների վրա:

Kubernetes-ի համատեղ սանդղակման համակարգը
Kubernetes-ի ավտոմասշտաբման մեջ սովորական սխալները
Post-ներում կան մի քանի սովորական խնդիրներ, որոնց դիմաց DevOps-ները բախվում են, երբ փորձում են կիրառել ավտոմասշտաբավորում:
HPA-ն ու VPA-ն կախված են մեթրիքներից և որոշ պատմական տվյալներից: Եթե բավարար ռեսուրսներ չեն հատկացվել, մոդուլները կնժուլորեն և չեն կարողանա ստեղծել մեթրիքներ: Այս պարագայում ավտոմասշտաբումը երբեք չի իրականանա:
Սևայք՝ ինքնաբերաբար սանդղակման գործողությունը զգայուն է ժամանակի նկատմամբ: Մենք ուզում ենք, որ մոդուլներն ու կլաստերը արագ սանդղվեին՝ մինչ օգտագործողները նկատեն որոշ խնդիրներ ու անջատումներ: Այս պատճառով անհրաժեշտ է հաշվի առնել pod-ների և կլաստերի միջին սանդղակման ժամանակը:
Իդեալական սցենարը՝ 4 րոպե:
- 30 վարկյան: Թիրախ մեթրիքների թարմացում՝ 30−60 վարկյան:
- 30 վարկյան: HPA-ն ստուգում է մեթրիքների արժեքները՝ 30 վարկյան:
- Փոքր 2 վարկյան: Pod մոդուլները պատրաստված են և անցնում սպասման վիճակում՝ 1 վարկյան:
- Փոքր 2 վարկյան: CA-ն նկատում է սպասվող մոդուլները և ուղարկում է զանգեր հանգույցների պատրաստման համար՝ 1 վարկյան:
- 3 րոպե։ Ամպային մատակարարը հատկացնոմ է узлы։ K8s սպասում է, մինչ նրանք պատրաստ կլինեն՝ մինչև 10 րոպե (կախված մի քանի գործոններից),
Իրատեսական առավել վատ սցենարը՝ 12 րոպե։
- 30 վայրկյան։ Նպատակային մետրիկների թարմացում։
- 30 վայրկյան։ HPA-ն ստուգում է մետրիկների արժեքները։
- Շատ կարճ։ pod մոդուլները ստեղծվում են և անցնում սպասման վիճակին՝ 2 վայրկյանի ընթացքում։
- Շատ կարճ։ CA-ն տեսնում է սպասվող մոդուլները և ուղարկում հրամանները узлы-ների պատրաստման համար։
- 10 րոպե։ Ամպային մատակարարը հատկացնոմ է узлы։ K8s սպասում է, երբ նրանք պատրաստ կլինեն։ Սպասման ժամանակը կախված է մի քանի գործոններից, ինչպիսիք են մատակարարի ուշացումը, օպերացիոն համակարգի ուշացումը, անմիջոցների աշխատանքը։
Մի շփոթեք ամպային մատակարարների ընդլայնման մեխանիզմները մեր CA-լի։ Վերջինը գործում է Kubernetes-ի կլաստերի ներսում, մինչդեռ ամպային մատակարարի մեխանիզմը աշխատում է узлы-ների բաշխման հիման վրա։ Այն չի գիտակցում, թե ինչ է տեղի ունենում ձեր pod-երի կամ կիրառության առումով։ Այս համակարգերը աշխատում են զուգահեռ։
Ինչպե՞ս կառավարել ընդլայնումը Kubernetes-ում
- Kubernetes-ը ռեսուրսների կառավարում և օրկեստրացիայի գործիք է։ Pod-երի և կլաստերի ռեսուրսների կառավարումը գլխավոր հանգույց է Kubernetes-ը սովորելու համար։
- Կառավարեք pod-երի ընդլայնման տրամաբանությունը HPA-ի և VPA-ի նկատառմամբ։
- CA-ն օգտագործելը պետք է միայն եթե դուք լավ հասկանում եք ձեր pod-երի և կոնտեյներների պահանջները։
- Առավելագույն բարդության կարգավորման համար անհրաժեշտ է հասկանալ, ինչպես տարբեր ընդլայնման համակարգերը գործում են միասին։
- Ընդլայնման ժամանակը գնահատելիս հաշվի առեք վատագույն և լավագույն սցենարները։
Ընտանիք: habr.com
