Թեև արդյունավետ օգտագործման երեք ավտոմատական ձգտման մակարդակներ Kubernetes-ում

Թեև արդյունավետ օգտագործման երեք ավտոմատական ձգտման մակարդակներ Kubernetes-ում
Kubernetes-ը լիարժեք освоելու համար անհրաժեշտ է connaître տարբեր ձևեր масштабирования кластерных ресурсов: по այս համակարգի մշակողների խոսքերով,, это одна из главных задач Kubernetes. Մենք պատրաստել ենք բարձր մակարդակի ակնարկ горизонтального և вертикального ավտոմատ քանակի ավելացման և кластарների չափերի փոփոխությունների մեխանիզմների, ինչպես նաև խորհուրդներ, թե ինչպես դրանք արդյունավետ օգտագործել:

Հոդվածը Kubernetes ավտոմատ քանակի ավելացում 101: Класսի автоակծեր, горизонтальный автоակծեր, и вертикальный под автоակծեր աղջիկ, որը իրականացնում է ավտոմատ քանակի ավելացում в Mail.ru-ի Kubernetes aaS.

Ինչու է կարևոր մտածել масштабирования-ի մասին

Kubernetes — միջոց ресурсов и оркестровки-ի համար: Հետեւաբար, լավ կլինի խաղալ գեղեցիկ գործառույթներով desplegado, մոնիտորինգի և pod-երի կառավարում (pod-modul — танкային контейներ, запускаемых в ответ на запрос).

Այնուամենայնիվ, անհրաժեշտ է մտածել նաև այսպիսի հարցերի մասին:

  1. Ինչպե՞ս масштабировать մոդուլները և ծրագրերը:
  2. Ինչպես պահպանել контейներ գործնական և արդյունավետ վիճակում:
  3. Ինչպես արձագանքել մշտական փոփոխություններին կոդում և օգտվողների աշխատանքային нагрузках:

Настройка кластеров Kubernetes для балансировки ресурсов и производительности может быть сложной задачա, она требует экспертных знаний о внутренней работе Kubernetes. Ձեր ծրագրի կամ ծառայությունների աշխատանքային нагрузка կարող է տատանվել օրում կամ նույնիսկ մեկ ժամվա ընթացքում, ուստի բալանսավորումը ավելի լավ է ներկայացնել որպես շարունակական գործընթաց:

Kubernetes-ի ավտոմատ քանակի ավելացման մակարդակները

Эффективное автоакъширование требует координации между двумя уровнями:

  1. Pod-р_LEVEL, включая горизонтальное (Horizontal Pod Autoscaler, HPA) и вертикальное автоакъքширование (Vertical Pod Autoscaler, VPA). Это масштабирование имеющихся ресурсов для ваших контейнеров.
  2. Класսի մակարդակ, которым управляет система автоакъширования кластеров (Cluster Autoscaler, CA), она увеличивает или уменьшает количество узлов внутри кластера.

Горизонтальный автоակծեր (HPA)

Как следует из названия, HPA масштабирует количество реплик pod’ов. В качестве триггеров для изменения количества реплик большинство девопсов используют нагрузку на процессор и память. Однако можно масштабировать систему на основе пользовательских метрик, их сочетания կամ նույնիսկ внешних метрик.

Высокоуровневая схема работы HPA:

  1. HPA непрерывно проверяет значения метрик, указанные при установке, с интервалом по умолчанию 30 секунд.
  2. HPA пытается увеличить количество модулей, если достигнут заданный порог.
  3. HPA обновляет количество реплик внутри контроллера развертывания/репликации.
  4. Контроллер развертывания/репликации затем разворачивает все необходимые дополнительные модули.

Թեև արդյունավետ օգտագործման երեք ավտոմատական ձգտման մակարդակներ Kubernetes-ում
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-ն պահպանվում է բաժանման բյուջեն (pods distribution budget, PDB), որպեսզի երաշխավորված լինի անհրաժեշտ նվազագույն մոդուլների քանակը։

Դուք կարող եք կարգադրել յուրաքանչյուր մոդուլի համար նվազագույն և առավելագույն ռեսուրսների ծավալներ։ Այսպիսով, կարելի է սահմանափակել հիշողության առավելագույն ծավալը 8 ԳԲ սահմանով։ Դա օգտակար է, եթե ընթացիկ узлы-ն ճշգրտորեն չեն կարող հատկացնել ավելի քան 8 ԳԲ հիշողություն կոնտեյների համար։ Մանրամասն մասնագիտացումները և գործող մեխանիզմը նկարագրվում են VPA-ի պաշտոնական վիկի-ում.

Բացի նրանից, VPA-ն ունի հետաքրքիր առաջարկներ (VPA Recommender)։ Դա հետևում է ռեսուրսների օգտագործմանը և OOM իրադարձություններին բոլոր մոդուլների, որպեսզի առաջարկի նոր հիշողության և պրոցեսորային ժամանակի արժեքներ՝ հիմնվելով իրավաչափ ալգորիթմի վրա պատմական չափումների հաշվի առնելով։ Այնպես էլ կա API, որը ընդունում է pod-ի նկարագրիչ և տալիս է առաջարկվող ռեսուրսների արժեքները։

Գործնականում VPA Recommender-ն չի հետևում ռեսուրսների 'սահմանին'։ Սա կարող է հանգեցնել того, что модуль монополизирует ресурсы внутри узлов։ Լավ է սահմանափակել սահմանը տարածքի մակարդակում, որպեսզի խուսափել մակարդակի մեծ ծախսի կամ պրոցեսորային ժամանակի։

VPA-ի բարձր մակարդակի աշխատանքային схема։

  1. VPA-ն շարունակաբար ստուգում է կշիռների արժեքները, որոնք ենթակա են սահմանման, 10 վայրկյանների միջակայքով։
  2. Եթե հասնեք սահմանված շեմին, VPA-ն փորձում է փոփոխել հատկացած ռեսուրսների քանակը:
  3. VPA-ն թարմացնում է ռեսուրսների քանակը վերահսկողի ներսում, որը զբաղվում է տեղաբաշխմամբ/պատճենով:
  4. Մոդուլների վերագործարկման ժամանակ բոլոր նոր ռեսուրսները կիրառվում են ստեղծված ինստանսներուն:

Թեև արդյունավետ օգտագործման երեք ավտոմատական ձգտման մակարդակներ Kubernetes-ում
VPA-ն ավելացնում է անհրաժեշտ ռեսուրսների քանակը:

Հաշվի առեք հետևյալ կետերը VPA օգտագործելիս:

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

Kubernetes կլաստերի ավտոմասշտաբավորում

Կլաստերի ավտոմատացված կառավարումը (Cluster Autoscaler, CA) փոփոխում է узловի քանակը, հիմնվում այն բանի վրա, թե քանի քանի մոդուլներ են սպասում: Սистема периодически проверяет наличие ожидающих модулей — и увеличивает размер кластера, если требуется больше ресурсов и если кластер не выходит за пределы установленных лимитов. CA взаимодействует с поставщиком облачных услуг, запрашивает у него дополнительные узлы или освобождает бездействующие. Первая общедоступная версия CA была представлена в Kubernetes 1.8.

CA-ի բարձր մակարդակի աշխատանքային սքեման:

  1. CA-ն ստուգում է սպասող մոդուլների հասանելիությունը սովորաբար 10 վայրկյան անց:
  2. Եթե մեկ կամ մի քանի մոդուլ կանգնած են սպասման վիճակում, քանի որ անբավարար ռեսուրսներ են կլաստերում, նա փորձում է պատրաստել մի քանի լրացուցիչ узлы:
  3. Երբ հ CLOUD ծառայությունների մատակարարն հատկանում է անհրաժեշտ узлы, նա միանում է կլաստերին և պատրաստ է սպասարկելու մոդուլներ pod:
  4. Kubernetes-ի ծրագրավորիչն սպասող մոդուլները հարկային նոր հանգույցի վրա: Եթե դրանից հետո որոշ մոդուլներ դեռ մնում են սպասման վիճակում, գործընթացը կրկնվում է՝ և նոր հանգույցներ ավելացվում են կլաստերին:

Թեև արդյունավետ օգտագործման երեք ավտոմատական ձգտման մակարդակներ Kubernetes-ում
Կլաստերի հանգույցների ավտոմատ հատկավորում-cloud-ում

Ընդհանուր առմամբ հաշվի առեք հետևյալը, օգտագործելիս CA:

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

Ինչպես Kubernetes-ի ավտոմասշտաբավորման համակարգերը փոխազդում են միմյանց հետ

Որպեսզի իդեալական ներդաշնակություն պահպանվի, պետք է կիրառել ավտոմասշտաբավորում ինչպես pod-ներին (HPA/VPA), այնպես էլ կլաստերին: Դրանք բավականին հեշտ են փոխազդում միմյանց հետ:

  1. HPA-ն կամ VPA-ն թարմացնում են pod-ների կրկնապատիկները կամ արդեն առկա pod-ների համար հատկացված ռեսուրսները:
  2. Եթե պլանավորված սանդղակման համար բավարար հանգույցներ չկան, CA-ն նկատում է սպասման մեջ գտնվող pod-ները:
  3. CA-ն հատկացում է նոր հանգույցներ:
  4. Մոդուլները բաշխվում են նոր հանգույցների վրա:

Թեև արդյունավետ օգտագործման երեք ավտոմատական ձգտման մակարդակներ Kubernetes-ում
Kubernetes-ի համատեղ սանդղակման համակարգը

Kubernetes-ի ավտոմասշտաբման մեջ սովորական սխալները

Post-ներում կան մի քանի սովորական խնդիրներ, որոնց դիմաց DevOps-ները բախվում են, երբ փորձում են կիրառել ավտոմասշտաբավորում:

HPA-ն ու VPA-ն կախված են մեթրիքներից և որոշ պատմական տվյալներից: Եթե բավարար ռեսուրսներ չեն հատկացվել, մոդուլները կնժուլորեն և չեն կարողանա ստեղծել մեթրիքներ: Այս պարագայում ավտոմասշտաբումը երբեք չի իրականանա:

Սևայք՝ ինքնաբերաբար սանդղակման գործողությունը զգայուն է ժամանակի նկատմամբ: Մենք ուզում ենք, որ մոդուլներն ու կլաստերը արագ սանդղվեին՝ մինչ օգտագործողները նկատեն որոշ խնդիրներ ու անջատումներ: Այս պատճառով անհրաժեշտ է հաշվի առնել pod-ների և կլաստերի միջին սանդղակման ժամանակը:

Իդեալական սցենարը՝ 4 րոպե:

  1. 30 վարկյան: Թիրախ մեթրիքների թարմացում՝ 30−60 վարկյան:
  2. 30 վարկյան: HPA-ն ստուգում է մեթրիքների արժեքները՝ 30 վարկյան:
  3. Փոքր 2 վարկյան: Pod մոդուլները պատրաստված են և անցնում սպասման վիճակում՝ 1 վարկյան:
  4. Փոքր 2 վարկյան: CA-ն նկատում է սպասվող մոդուլները և ուղարկում է զանգեր հանգույցների պատրաստման համար՝ 1 վարկյան:
  5. 3 րոպե։ Ամպային մատակարարը հատկացնոմ է узлы։ K8s սպասում է, մինչ նրանք պատրաստ կլինեն՝ մինչև 10 րոպե (կախված մի քանի գործոններից),

Իրատեսական առավել վատ սցենարը՝ 12 րոպե։

  1. 30 վայրկյան։ Նպատակային մետրիկների թարմացում։
  2. 30 վայրկյան։ HPA-ն ստուգում է մետրիկների արժեքները։
  3. Շատ կարճ։ pod մոդուլները ստեղծվում են և անցնում սպասման վիճակին՝ 2 վայրկյանի ընթացքում։
  4. Շատ կարճ։ CA-ն տեսնում է սպասվող մոդուլները և ուղարկում հրամանները узлы-ների պատրաստման համար։
  5. 10 րոպե։ Ամպային մատակարարը հատկացնոմ է узлы։ K8s սպասում է, երբ նրանք պատրաստ կլինեն։ Սպասման ժամանակը կախված է մի քանի գործոններից, ինչպիսիք են մատակարարի ուշացումը, օպերացիոն համակարգի ուշացումը, անմիջոցների աշխատանքը։

Մի շփոթեք ամպային մատակարարների ընդլայնման մեխանիզմները մեր CA-լի։ Վերջինը գործում է Kubernetes-ի կլաստերի ներսում, մինչդեռ ամպային մատակարարի մեխանիզմը աշխատում է узлы-ների բաշխման հիման վրա։ Այն չի գիտակցում, թե ինչ է տեղի ունենում ձեր pod-երի կամ կիրառության առումով։ Այս համակարգերը աշխատում են զուգահեռ։

Ինչպե՞ս կառավարել ընդլայնումը Kubernetes-ում

  1. Kubernetes-ը ռեսուրսների կառավարում և օրկեստրացիայի գործիք է։ Pod-երի և կլաստերի ռեսուրսների կառավարումը գլխավոր հանգույց է Kubernetes-ը սովորելու համար։
  2. Կառավարեք pod-երի ընդլայնման տրամաբանությունը HPA-ի և VPA-ի նկատառմամբ։
  3. CA-ն օգտագործելը պետք է միայն եթե դուք լավ հասկանում եք ձեր pod-երի և կոնտեյներների պահանջները։
  4. Առավելագույն բարդության կարգավորման համար անհրաժեշտ է հասկանալ, ինչպես տարբեր ընդլայնման համակարգերը գործում են միասին։
  5. Ընդլայնման ժամանակը գնահատելիս հաշվի առեք վատագույն և լավագույն սցենարները։

Ընտանիք: habr.com

Գնել հուսալի հյուրընկալում DDoS պաշտպանությամբ, VPS VDS սերվերներով 🔥 Գնել հուսալի հյուրընկալում DDoS պաշտպանությամբ, VPS VDS սերվերներով | ProHoster