Kubernetes-прыгода Dailymotion: стварэнне інфраструктуры ў аблоках + on-premises

Kubernetes-прыгода Dailymotion: стварэнне інфраструктуры ў аблоках + on-premises

Заўв. перав.: Dailymotion - адзін з найбуйнейшых у свеце сэрвісаў хостынгу відэа і таму прыкметны карыстальнік Kubernetes. У гэтым матэрыяле сістэмны архітэктар David Donchez дзеліцца вынікамі стварэння production-платформы кампаніі на базе K8s, якая пачыналася з хмарнай усталёўкі ў GKE і скончылася як гібрыднае рашэнне, што дазволіла дамагчыся лепшага часу рэакцыі і зэканоміць на інфраструктурных выдатках.

Прымаючы рашэнне аб перабудове асноўнага API Dailymotion тры гады таму, мы хацелі распрацаваць больш эфектыўны спосаб размяшчэння прыкладанняў і аблегчыць працэсы ў распрацоўцы і production. Для гэтай мэты мы вырашылі выкарыстоўваць платформу аркестрацыі кантэйнераў і натуральнай выявай абралі Kubernetes.

Чаму варта ствараць уласную платформу на базе Kubernetes?

API production-ўзроўню ў найкарацейшыя тэрміны з дапамогай Google Cloud

Лета 2016-га

Тры гады таму, адразу пасля пакупкі Dailymotion кампаніяй Vivendi, нашы інжынерныя каманды сфакусаваліся на адной глабальнай мэты: стварыць зусім новы прадукт Dailymotion.

Па выніках аналізу кантэйнераў, рашэнняў для аркестрацыі і нашаму мінуламу досведу мы пераканаліся, што Kubernetes - правільны выбар. Частка распрацоўшчыкаў ужо мела ўяўленне аб базавых канцэпцыях і ведала, як яго выкарыстоўваць, што было вялікай перавагай для інфраструктурнай трансфармацыі.

З пункту гледжання інфраструктуры патрабавалася магутная і гнуткая сістэма для размяшчэння новых тыпаў хмарных (cloud-native) прыкладанняў. Мы аддалі перавагу застацца ў воблаку ў пачатку нашага падарожжа, каб спакойна пабудаваць максімальна надзейную лакальную платформу. Свае прыкладанні вырашылі разгортваць з дапамогай Google Kubernetes Engine, хоць ведалі, што рана ці позна пяройдзем на ўласныя ЦАД і прымянім гібрыдную стратэгію.

Чаму выбралі GKE?

Мы зрабілі гэты выбар галоўным чынам з тэхнічных меркаванняў. Акрамя таго, патрабавалася хутка падаць інфраструктуру, якая адпавядае патрэбам бізнэсу кампаніі. У нас былі некаторыя патрабаванні да размяшчэння прыкладанняў, такія як геаграфічная размеркаванасць, маштабаванасць і адмоваўстойлівасць.

Kubernetes-прыгода Dailymotion: стварэнне інфраструктуры ў аблоках + on-premises
Кластары GKE у Dailymotion

Паколькі Dailymotion – відэаплатформа, даступная па ўсім свеце, мы вельмі хацелі павысіць якасць сэрвісу, скараціўшы час чакання. (latency). Раней наш API быў даступны толькі ў Парыжы, што было неаптымальна. Жадалася мець магчымасць размяшчаць прыкладанні не толькі ў Еўропе, але і ў Азіі, і ў ЗША.

Гэтая адчувальнасць да затрымак азначала, што давядзецца сур'ёзна папрацаваць над сеткавай архітэктурай платформы. У той час як большасць хмарных сэрвісаў змушалі ствараць сваю сетку ў кожным рэгіёне і потым звязваць іх праз VPN або нейкі кіраваны сэрвіс, Google Cloud дазваляў стварыць цалкам маршрутызаваную адзіную сетку, якая ахоплівае ўсе рэгіёны Google. Гэта вялікі плюс у сэнсе эксплуатацыі і эфектыўнасці сістэмы.

Акрамя таго, са сваёй працай выдатна спраўляюцца сеткавыя сэрвісы і балансавальнікі нагрузкі ад Google Cloud. Яны проста дазваляюць выкарыстоўваць адвольныя агульнадаступныя IP-адрасы з кожнага рэгіёна, а выдатны пратакол BGP паклапоціцца пра ўсё астатняе (г.зн. перанакіруе карыстальнікаў да бліжэйшага кластара). Відавочна, што ў выпадку збою трафік будзе аўтаматычна ісці ў іншы рэгіён без умяшання чалавека.

Kubernetes-прыгода Dailymotion: стварэнне інфраструктуры ў аблоках + on-premises
Маніторынг балансавання нагрузак у Google

Наша платформа таксама актыўна задзейнічае графічныя працэсары. Google Cloud дазваляе вельмі эфектыўна выкарыстоўваць іх проста ў кластарах Kubernetes.

У той час інфраструктурная каманда пераважна канцэнтравалася на старым стэку, разгорнутым на фізічных серверах. Менавіта таму выкарыстанне кіраванага сэрвісу (уключаючы майстар-кампаненты Kubernetes) адпавядала нашым патрабаванням і дазваляла навучыць каманды працы з лакальнымі кластарамі.

У выніку мы змаглі пачаць прымаць production-трафік на інфраструктуры Google Cloud усяго праз 6 месяцаў пасля пачатку працы.

Аднак нягледзячы на ​​шэраг пераваг, праца з хмарным правайдэрам спалучаная з вызначанымі выдаткамі, якія могуць павялічвацца ў залежнасці ад нагрузкі. Вось чаму мы ўважліва аналізавалі кожны выкарыстоўваны кіраваны сэрвіс, разлічваючы ў будучыні рэалізаваць іх у сябе on-premises. Насамрэч укараненне лакальных кластараў пачалося ў канцы 2016 года і тады ж была ініцыяваная гібрыдная стратэгія.

Запуск лакальнай платформы аркестрацыі кантэйнераў Dailymotion

Восень 2016-га

Ва ўмовах, калі ўвесь стэк быў гатовы да production, а праца над API працягвалася, быў час сканцэнтравацца на рэгіянальных кластарах.

На той момант карыстачы штомесяц праглядалі больш за 3 млрд відэаролікаў. Вядома, у нас ужо не адзін год функцыянавала ўласная разгалінаваная Content Delivery Network. Мы хацелі скарыстацца гэтай акалічнасцю і разгарнуць кластары Kubernetes у існуючых ЦАДах.

Інфраструктура Dailymotion налічвала больш за 2,5 тыс. сервераў у шасці дата-цэнтрах. Усе яны канфігуруюцца з дапамогай Saltstack. Мы пачалі рыхтаваць усе неабходныя рэцэпты для стварэння майстар-і worker-вузлоў, а таксама кластара etcd.

Kubernetes-прыгода Dailymotion: стварэнне інфраструктуры ў аблоках + on-premises

Сеткавая частка

Наша сетка цалкам маршрутызаваная. Кожны сервер анансуе свой IP у сетцы з дапамогай Exabgp. Мы параўналі некалькі сеткавых убудоў і адзіным якія задавальняюць усім запатрабаванням (з-за выкарыстоўванага падыходу на ўзроўні L3) апынуўся каленкор. Ён цудоўна ўпісаўся ў існуючую сеткавую мадэль інфраструктуры.

Паколькі жадалася выкарыстаць усе наяўныя элементы інфраструктуры, першым чынам трэба было разабрацца з нашай дамарослай сеткавай утылітай (выкарыстоўванай на ўсіх серверах): скарыстацца ёй для анансавання дыяпазонаў IP-адрасоў у сетцы з Kubernetes-вузламі. Мы дазволілі Calico прысвойваць IP-адрасы pod'ам, але не выкарыстоўвалі яго і да гэтага часу не выкарыстоўваем для BGP-сесій на сеткавым абсталяванні. Па факце маршрутызацыяй займаецца Exabgp, які анансуе падсеткі, якія выкарыстоўваюцца Calico. Гэта дазваляе нам дастукацца да любога pod'у з унутранай сеткі (і ў прыватнасці ад балансавальнікаў нагрузкі).

Як мы кіруем ingress-трафікам

Для перанакіравання ўваходзячых запытаў на патрэбны сэрвіс было вырашана выкарыстоўваць Ingress Controller з-за яго інтэграцыі з ingress-рэсурсамі Kubernetes.

Тры гады таму nginx-ingress-controller быў найболей спелым кантролерам: Nginx выкарыстоўваўся ўжо даўно і быў вядомы сваёй стабільнасцю і прадукцыйнасцю.

У сваёй сістэме мы вырашылі размясціць кантролеры на выдзеленых 10-гігабітных блейд-серверах. Кожны кантролер падлучаўся да endpoint'у kube-apiserver які адпавядае кластара. На гэтых серверах таксама выкарыстоўваўся Exabgp для анансавання публічных ці прыватных IP-адрасоў. Тапалогія нашай сеткі дазваляе выкарыстоўваць BGP з гэтых кантролераў для маршрутызацыі ўсяго трафіку непасрэдна на pod'ы без выкарыстання сэрвісу тыпу NodePort. Такі падыход дапамагае пазбегнуць гарызантальнага трафіку паміж вузламі і павялічвае эфектыўнасць.

Kubernetes-прыгода Dailymotion: стварэнне інфраструктуры ў аблоках + on-premises
Рух трафіку з інтэрнэту да pod'

Цяпер, калі разабраліся з нашай гібрыднай платформай, можна паглыбіцца ў сам працэс міграцыі трафіку.

Міграцыя трафіку з Google Cloud у інфраструктуру Dailymotion

Восень 2018-га

Пасля амаль двух гадоў стварэння, тэсціравання і налады мы, нарэшце, атрымалі поўны стэк Kubernetes, гатовы прыняць частку трафіку.

Kubernetes-прыгода Dailymotion: стварэнне інфраструктуры ў аблоках + on-premises

Бягучая стратэгія маршрутызацыі даволі простая, але цалкам задавальняе запатрабаванням. Апроч агульнадаступных IP (у Google Cloud і Dailymotion) выкарыстоўваецца AWS Route 53 для задання палітык і перанакіраванні карыстальнікаў да кластара па нашым выбары.

Kubernetes-прыгода Dailymotion: стварэнне інфраструктуры ў аблоках + on-premises
Прыклад палітыкі маршрутызацыі з выкарыстаннем Route 53

З Google Cloud гэта проста, паколькі мы задзейнічаем адзіны IP для ўсіх кластараў, а карыстач перанакіроўваецца да найблізкага кластара GKE. Для нашых кластараў тэхналогія іншая, паколькі іх IP адрозніваюцца.

У час міграцыі мы імкнуліся да перанакіравання рэгіянальных запытаў на адпаведныя кластары і ацэньвалі перавагі такога падыходу.

Паколькі нашы GKE-кластары сканфігураваны на аўтаматычнае маштабаванне з дапамогай Custom Metrics, яны нарошчваюць/скарачаюць магутнасці ў залежнасці ад уваходнага трафіку.

У нармальным рэжыме ўвесь рэгіянальны трафік накіроўваецца на лакальны кластар, а GKE служыць рэзервам на выпадак узнікнення праблем (health-check'і праводзяцца Route 53).

...

У будучыні мы хочам поўнасцю аўтаматызаваць палітыкі маршрутызацыі, каб атрымаць аўтаномную гібрыдную стратэгію, якая пастаянна паляпшае даступнасць для карыстальнікаў. Што да плюсаў: значна скараціліся выдаткі на воблака і атрымалася нават скараціць час рэакцыі API. Мы давяраем атрыманай хмарнай платформе і гатовыя пры неабходнасці перанакіраваць на яе больш трафіку.

PS ад перакладчыка

Магчыма, вас яшчэ зацікавіць іншая нядаўняя публікацыя Dailymotion пра Kubernetes. Яна прысвечана дэплою прыкладанняў з Helm на мностве Kubernetes-кластэраў і была апублікавана каля месяца таму.

Чытайце таксама ў нашым блогу:

Крыніца: habr.com

Дадаць каментар