Kubernetes-ի արկածային Dailymotion. ենթակառուցվածքի ստեղծում ամպերի մեջ + ներսում

Kubernetes-ի արկածային Dailymotion. ենթակառուցվածքի ստեղծում ամպերի մեջ + ներսում

Նշում. թարգմ.Dailymotion-ը վիդեո հոսթինգի աշխարհի ամենամեծ ծառայություններից մեկն է և, հետևաբար, Kubernetes-ի նշանավոր օգտատեր: Այս նյութում համակարգի ճարտարապետ Դեյվիդ Դոնչեսը կիսում է K8s-ի վրա հիմնված ընկերության արտադրական հարթակի ստեղծման արդյունքները, որը սկսվեց GKE-ում ամպային տեղադրմամբ և ավարտվեց որպես հիբրիդային լուծում, որը թույլ տվեց ավելի լավ արձագանքման ժամանակներ և խնայողություններ ենթակառուցվածքի ծախսերում:

Core API-ի վերակառուցման որոշում Dailymotion երեք տարի առաջ մենք ցանկանում էինք մշակել հավելվածների հյուրընկալման ավելի արդյունավետ միջոց և հեշտացնել այն զարգացման և արտադրության գործընթացները. Այդ նպատակով մենք որոշեցինք օգտագործել կոնտեյներային նվագախմբային հարթակ և բնականաբար ընտրեցինք Kubernetes-ը։

Ինչու՞ արժե կառուցել ձեր սեփական հարթակը Kubernetes-ի վրա հիմնված:

Արտադրության մակարդակի API կարճ ժամանակում՝ օգտագործելով Google Cloud-ը

Ամառ 2016թ

Երեք տարի առաջ, անմիջապես այն բանից հետո, երբ Dailymotion-ը գնեց Vivendi, մեր ինժեներական թիմերը կենտրոնացած են մեկ գլոբալ նպատակի վրա՝ ստեղծել բոլորովին նոր Dailymotion արտադրանք:

Հիմնվելով կոնտեյներների, նվագախմբային լուծումների և մեր անցյալի փորձի վերլուծության վրա՝ մենք համոզված ենք, որ Kubernetes-ը ճիշտ ընտրություն է: Որոշ մշակողներ արդեն հասկանում էին հիմնական հասկացությունները և գիտեին, թե ինչպես օգտագործել այն, ինչը հսկայական առավելություն էր ենթակառուցվածքի վերափոխման համար:

Ենթակառուցվածքի տեսանկյունից հզոր և ճկուն համակարգ էր պահանջվում՝ ամպային բնօրինակ հավելվածների նոր տեսակներ ընդունելու համար: Մենք որոշեցինք մնալ ամպի մեջ մեր ճանապարհորդության սկզբում, որպեսզի կարողանանք մտքի խաղաղությամբ կառուցել հնարավոր ամենակայուն հարթակը: Մենք որոշեցինք տեղակայել մեր հավելվածները՝ օգտագործելով Google Kubernetes Engine, թեև գիտեինք, որ վաղ թե ուշ տեղափոխվելու ենք մեր սեփական տվյալների կենտրոններ և կիրառելու ենք հիբրիդային ռազմավարություն:

Ինչու՞ ընտրեցիք GKE-ն:

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

Kubernetes-ի արկածային Dailymotion. ենթակառուցվածքի ստեղծում ամպերի մեջ + ներսում
GKE կլաստերները Dailymotion-ում

Քանի որ Dailymotion-ը տեսահոլովակ է, որը հասանելի է ամբողջ աշխարհում, մենք իսկապես ցանկանում էինք բարելավել ծառայության որակը՝ կրճատելով սպասման ժամանակը: (ուշացում). Ավելի վաղ մեր API-ն հասանելի էր միայն Փարիզում, որը ոչ օպտիմալ էր: Ուզում էի, որ կարողանայի հավելվածներ ընդունել ոչ միայն Եվրոպայում, այլև Ասիայում և ԱՄՆ-ում։

Լատենտության նկատմամբ այս զգայունությունը նշանակում էր, որ լուրջ աշխատանք պետք է կատարվեր հարթակի ցանցային ճարտարապետության վրա: Թեև ամպային ծառայությունների մեծամասնությունը ստիպում էր ձեզ ստեղծել ձեր սեփական ցանցը յուրաքանչյուր տարածաշրջանում, այնուհետև միացնել դրանք VPN-ի կամ կառավարվող որևէ ծառայության միջոցով, Google Cloud-ը թույլ է տվել ձեզ ստեղծել լիովին երթուղային մեկ ցանց, որը ծածկում է Google-ի բոլոր տարածաշրջանները: Սա մեծ պլյուս է համակարգի շահագործման և արդյունավետության առումով:

Բացի այդ, Google Cloud-ի ցանցային ծառայություններն ու բեռի հավասարակշռող սարքերը հիանալի աշխատանք են կատարում: Նրանք պարզապես թույլ են տալիս օգտագործել կամայական հանրային IP հասցեներ յուրաքանչյուր տարածաշրջանից, իսկ հրաշալի BGP արձանագրությունը հոգ է տանում մնացածի մասին (այսինքն՝ օգտվողներին վերահղում դեպի մոտակա կլաստերը): Ակնհայտ է, որ խափանման դեպքում երթևեկությունը ավտոմատ կերպով կուղևորվի այլ տարածաշրջան՝ առանց մարդկային միջամտության:

Kubernetes-ի արկածային Dailymotion. ենթակառուցվածքի ստեղծում ամպերի մեջ + ներսում
Google Load Balancing-ի մոնիտորինգ

Մեր հարթակը նաև մեծապես օգտագործում է GPU-ները: Google Cloud-ը թույլ է տալիս դրանք շատ արդյունավետ օգտագործել անմիջապես Kubernetes կլաստերներում:

Այն ժամանակ ենթակառուցվածքի թիմը հիմնականում կենտրոնացած էր ֆիզիկական սերվերների վրա տեղակայված ժառանգական փաթեթի վրա: Ահա թե ինչու կառավարվող ծառայության օգտագործումը (ներառյալ Kubernetes-ի վարպետները) բավարարեց մեր պահանջները և թույլ տվեց մեզ թիմեր պատրաստել տեղական կլաստերների հետ աշխատելու համար:

Արդյունքում, մենք կարողացանք սկսել արտադրական տրաֆիկ ստանալ Google Cloud ենթակառուցվածքում աշխատանքի մեկնարկից ընդամենը 6 ամիս անց:

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

Տեղական կոնտեյներային նվագախմբի Dailymotion հարթակի գործարկումը

Աշուն 2016

Այն պայմաններում, երբ ամբողջ ստեկը պատրաստ էր արտադրության և աշխատել API-ի վրա շարունակեց, ժամանակն էր կենտրոնանալ տարածաշրջանային կլաստերների վրա։

Այն ժամանակ օգտատերերը ամեն ամիս դիտում էին ավելի քան 3 միլիարդ տեսանյութ։ Իհարկե, մենք երկար տարիներ ունեցել ենք բովանդակության առաքման մեր սեփական ցանցը: Մենք ցանկանում էինք օգտվել այս հանգամանքից և տեղակայել Kubernetes կլաստերները առկա տվյալների կենտրոններում:

Dailymotion-ի ենթակառուցվածքը բաղկացած էր ավելի քան 2,5 հազար սերվերից վեց տվյալների կենտրոններում։ Դրանք բոլորը կազմաձևված են Saltstack-ի միջոցով: Մենք սկսեցինք պատրաստել բոլոր անհրաժեշտ բաղադրատոմսերը վարպետ և աշխատող հանգույցներ ստեղծելու համար, ինչպես նաև etcd կլաստեր:

Kubernetes-ի արկածային Dailymotion. ենթակառուցվածքի ստեղծում ամպերի մեջ + ներսում

Ցանցային մաս

Մեր ցանցն ամբողջությամբ երթուղավորված է: Յուրաքանչյուր սերվեր գովազդում է իր IP-ն ցանցում՝ օգտագործելով Exabgp: Մենք համեմատեցինք մի քանի ցանցային պլագիններ և միակը, որը բավարարում էր բոլոր կարիքները (օգտագործված L3 մոտեցման շնորհիվ) Calico- ն. Այն լիովին համապատասխանում է գոյություն ունեցող ցանցային ենթակառուցվածքի մոդելին:

Քանի որ մենք ցանկանում էինք օգտագործել ենթակառուցվածքի բոլոր առկա տարրերը, առաջին բանը, որ մենք պետք է անեինք, պարզել էինք մեր տնային ցանցի օգտակար ծրագիրը (օգտագործվում է բոլոր սերվերներում). օգտագործել այն՝ գովազդելու IP հասցեների միջակայքերը ցանցում Kubernetes հանգույցներով: Մենք թույլ տվեցինք Calico-ին IP հասցեներ հատկացնել փոդերին, բայց այն չօգտագործեցինք և դեռևս չենք օգտագործում այն ​​ցանցային սարքավորումների BGP նիստերի համար: Իրականում, երթուղավորումն իրականացվում է Exabgp-ի կողմից, որը գովազդում է Calico-ի կողմից օգտագործվող ենթացանցերը: Սա թույլ է տալիս մեզ հասնել ցանկացած պատիճ ներքին ցանցից (և մասնավորապես բեռի հավասարակշռողներից):

Ինչպես ենք մենք կառավարում մուտքային տրաֆիկը

Մուտքային հարցումները ցանկալի ծառայությանը վերահղելու համար որոշվեց օգտագործել Ingress Controller-ը Kubernetes-ի մուտքային ռեսուրսների հետ ինտեգրվելու պատճառով:

Երեք տարի առաջ nginx-ingress-controller-ը ամենահաս վերահսկիչն էր. Nginx-ը երկար ժամանակ գոյություն ուներ և հայտնի էր իր կայունությամբ և կատարողականությամբ:

Մեր համակարգում մենք որոշեցինք կարգավորիչները տեղադրել հատուկ 10 Գիգաբիթանոց blade սերվերների վրա: Յուրաքանչյուր կարգավորիչ միացված էր համապատասխան կլաստերի kube-apiserver վերջնակետին: Այս սերվերները նաև օգտագործում էին Exabgp հանրային կամ մասնավոր IP հասցեները գովազդելու համար: Մեր ցանցի տոպոլոգիան թույլ է տալիս մեզ օգտագործել BGP-ն այս կարգավորիչներից՝ ամբողջ երթևեկությունը ուղղակիորեն դեպի պատյաններ ուղղորդելու համար՝ առանց NodePort-ի նման ծառայություն օգտագործելու: Այս մոտեցումը օգնում է խուսափել հանգույցների միջև հորիզոնական երթևեկությունից և բարելավում է արդյունավետությունը:

Kubernetes-ի արկածային Dailymotion. ենթակառուցվածքի ստեղծում ամպերի մեջ + ներսում
Ինտերնետից երթևեկության տեղաշարժ դեպի պատյաններ

Այժմ, երբ մենք հասկանում ենք մեր հիբրիդային հարթակը, մենք կարող ենք ավելի խորանալ երթևեկության միգրացիայի գործընթացի մեջ:

Երթևեկության միգրացիա Google Cloud-ից Dailymotion ենթակառուցվածք

Աշուն 2018

Մոտ երկու տարվա կառուցումից, փորձարկումից և թյունինգից հետո մենք վերջապես ունենք Kubernetes-ի ամբողջական փաթեթ, որը պատրաստ է ընդունելու որոշ երթևեկություն:

Kubernetes-ի արկածային Dailymotion. ենթակառուցվածքի ստեղծում ամպերի մեջ + ներսում

Ներկայիս երթուղային ռազմավարությունը բավականին պարզ է, բայց բավարար կարիքները բավարարելու համար: Բացի հանրային IP-ներից (Google Cloud-ում և Dailymotion-ում), AWS Route 53-ն օգտագործվում է քաղաքականություն սահմանելու և օգտվողներին վերահղելու մեր ընտրած կլաստերին:

Kubernetes-ի արկածային Dailymotion. ենթակառուցվածքի ստեղծում ամպերի մեջ + ներսում
Երթուղային քաղաքականության օրինակ՝ օգտագործելով երթուղին 53

Google Cloud-ով դա հեշտ է, քանի որ մենք կիսում ենք մեկ IP-ն բոլոր կլաստերներում, և օգտատերը վերահղվում է դեպի մոտակա GKE կլաստեր: Մեր կլաստերների համար տեխնոլոգիան տարբեր է, քանի որ նրանց IP-ները տարբեր են:

Միգրացիայի ընթացքում մենք ձգտեցինք վերահղել տարածաշրջանային հարցումները դեպի համապատասխան կլաստերներ և գնահատեցինք այս մոտեցման առավելությունները:

Քանի որ մեր GKE կլաստերները կազմաձևված են ավտոմատ մասշտաբի համար՝ օգտագործելով Custom Metrics, դրանք մեծացնում են/նվազում՝ ելնելով մուտքային տրաֆիկից:

Նորմալ ռեժիմում ողջ տարածաշրջանային երթևեկությունը ուղղվում է դեպի տեղական կլաստեր, իսկ GKE-ն ծառայում է որպես ռեզերվ խնդիրների դեպքում (առողջության ստուգումն իրականացվում է երթուղի 53-ով):

...

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

PS թարգմանչից

Ձեզ կարող է հետաքրքրել նաև Dailymotion-ի մեկ այլ վերջին գրառում Kubernetes-ի մասին: Այն նվիրված է Helm-ով հավելվածների տեղակայմանը Kubernetes-ի բազմաթիվ կլաստերներում և հրապարակվել է մոտ մեկ ամիս առաջ։

Կարդացեք նաև մեր բլոգում.

Source: www.habr.com

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