Эҷоди платформаи kubernetes дар Pinterest

Дар тӯли солҳо, 300 миллион корбарони Pinterest дар беш аз 200 миллиард тахта беш аз 4 миллиард пин эҷод кардаанд. Барои хидмат расонидан ба ин артиши корбарон ва пойгоҳи васеи мундариҷа, портал ҳазорҳо хидматҳоро таҳия кардааст, ки аз микросервисҳое, ки аз ҷониби якчанд CPU идора карда мешаванд, то монолитҳои азим, ки дар тамоми парки мошинҳои виртуалӣ кор мекунанд. Ва он гоҳ лаҳзае фаро расид, ки чашми ширкат ба k8s афтод. Чаро "куб" дар Pinterest хуб ба назар мерасид? Шумо дар ин бора аз тарҷумаи мақолаи охирини мо аз он хоҳед фаҳмид блоги Pinterest Engineering.

Эҷоди платформаи kubernetes дар Pinterest

Ҳамин тариқ, садҳо миллион корбарон ва садҳо миллиард пинҳо. Барои хидмат ба ин артиши корбарон ва пойгоҳи васеи мундариҷа, мо ҳазорҳо хидматҳоро таҳия кардем, ки аз микросервисҳое, ки аз ҷониби якчанд CPU идора карда мешаванд, то монолитҳои азим, ки дар тамоми паркҳои мошинҳои виртуалӣ кор мекунанд. Илова бар ин, мо чаҳорчӯбаҳои гуногун дорем, ки метавонанд дастрасии CPU, хотира ё вуруди баромадро талаб кунанд.

Ҳангоми нигоҳ доштани ин боғи асбобҳо, гурӯҳи таҳиякунанда бо як қатор мушкилот рӯбарӯ мешавад:

  • Барои муҳандисон роҳи ягонаи идоракунии муҳити истеҳсолот вуҷуд надорад. Хидматҳои бидуни шаҳрвандӣ, хидматҳои давлатӣ ва лоиҳаҳое, ки дар ҳоли таҳияи фаъол ҳастанд, ба стекҳои комилан гуногуни технология асос ёфтаанд. Ин боиси таъсиси курси пурраи тайёр кардани муҳандисон гардид ва инчунин кори дастаи инфрасохтори моро ба таври ҷиддӣ мушкил мекунад.
  • Таҳиягарон бо парки мошинҳои виртуалии худ ба маъмурони дохилӣ бори бузург эҷод мекунанд. Дар натиҷа, чунин амалиётҳои оддӣ, ба монанди навсозии OS ё AMI, ҳафтаҳо ва моҳҳоро мегиранд. Ин боиси зиёд шудани сарбории кор дар ҳолатҳои ба назар комилан ҳамарӯза мегардад.
  • Мушкилот дар эҷоди абзорҳои глобалии идоракунии инфрасохтор бар болои ҳалли мавҷуда. Вазъият боз ҳам мураккабтар аз он аст, ки пайдо кардани соҳибони мошинҳои виртуалӣ осон нест. Яъне, мо намедонем, ки оё ин иқтидор метавонад ба таври бехатар истихроҷ карда шавад, то дар дигар қисматҳои инфрасохтори мо кор кунад.

Системаҳои оркестри контейнерӣ як роҳи ягонаи идоракунии сарбории корӣ мебошанд. Онҳо дарро барои баланд бардоштани суръати рушд ва содда кардани идоракунии инфрасохтор мекушоянд, зеро тамоми захираҳои дар лоиҳа ҷалбшуда аз ҷониби як системаи мутамарказ идора карда мешаванд.

Эҷоди платформаи kubernetes дар Pinterest

Расми 1: Афзалиятҳои инфрасохтор (эътимоднокӣ, маҳсулнокии таҳиягарон ва самаранокӣ).

Гурӯҳи Платформаи идоракунии абрӣ дар Pinterest K8-ро дар соли 2017 кашф карданд. Дар нимаи аввали соли 2017 мо аксари қобилиятҳои истеҳсолии худро, аз ҷумла API ва ҳама серверҳои веби худро ҳуҷҷатгузорӣ кардем. Баъдан, мо баҳодиҳии ҳамаҷонибаи системаҳои гуногунро барои ташкили ҳалли контейнерҳо, сохтани кластерҳо ва кор бо онҳо гузаронидем. Дар охири соли 2017 мо тасмим гирифтем, ки Kubernetes-ро истифода барем. Он хеле чандир буд ва дар ҷомеаи таҳиягарон васеъ дастгирӣ карда шуд.

То имрӯз, мо асбобҳои пурборкунии кластерии худро дар асоси Kops сохтаем ва ҷузъҳои мавҷудаи инфрасохторро ба монанди шабакасозӣ, амният, метрика, сабти ном, идоракунии шахсият ва трафик ба Kubernetes интиқол додем. Мо инчунин як системаи моделсозии сарбории корро барои манбаи худ татбиқ кардем, ки мураккабии он аз таҳиягарон пинҳон аст. Ҳоло мо ба таъмини устувории кластер, миқёси он ва пайваст кардани мизоҷони нав таваҷҷӯҳ дорем.

Кубернетес: Роҳи Pinterest

Оғози кор бо Kubernetes дар миқёси Pinterest ҳамчун платформае, ки муҳандисони мо онро дӯст медоштанд, бо мушкилоти зиёд рӯ ба рӯ шуданд.

Ҳамчун як ширкати бузург, мо ба абзорҳои инфрасохторӣ сармоягузорӣ кардем. Намунаҳо аз абзорҳои амниятӣ иборатанд, ки коркарди сертификатҳо ва тақсимоти калидҳоро идора мекунанд, ҷузъҳои назорати трафик, системаҳои кашфи хидмат, ҷузъҳои намоён ва ҷузъҳои ирсоли гузориш ва ченакҳо. Ҳамаи ин бо як сабаб ҷамъоварӣ карда шуд: мо роҳи муқаррарии озмоиш ва хатогиро тай кардем ва аз ин рӯ, мо мехостем, ки ба ҷои ихтироъ кардани чархи кӯҳна дар платформаи нав ҳамаи ин таҷҳизотро ба инфрасохтори нав дар Кубернетес ҳамгиро кунем. Ин равиш дар маҷмӯъ муҳоҷиратро содда кард, зеро ҳама дастгирии барномаҳо аллакай вуҷуд дорад ва аз сифр сохтан лозим нест.

Аз тарафи дигар, моделҳои пешгӯии сарборӣ дар худи Кубернетес (ба монанди ҷойгиркунӣ, ҷойҳои корӣ ва маҷмӯи Демон) барои лоиҳаи мо кофӣ нестанд. Ин масъалаҳои қобили истифода монеаҳои бузург барои гузаштан ба Кубернетес мебошанд. Масалан, мо шунидем, ки таҳиягарони хадамот дар бораи гумшуда ё нодурусти танзимоти воридшавӣ шикоят мекунанд. Мо инчунин бо истифодаи нодурусти муҳаррикҳои қолабҳо дучор шудем, вақте ки садҳо нусхаҳо бо ҳамон мушаххасот ва вазифа сохта шуданд, ки дар натиҷа мушкилоти ислоҳи даҳшатнок ба вуҷуд омад.

Нигоҳ доштани версияҳои гуногун дар як кластер низ хеле душвор буд. Тасаввур кунед, ки мураккабии дастгирии муштариён, агар ба шумо лозим аст, ки ҳамзамон дар версияҳои сершумори як муҳити корӣ бо ҳама мушкилот, хатоҳо ва навсозиҳои онҳо кор кунед.

Хусусиятҳои корбар ва контроллерҳои Pinterest

Барои осон кардани муҳандисони мо татбиқи Kubernetes ва содда ва суръатбахшии инфрасохтори мо, мо таърифҳои фармоишии захираҳои худро (CRDs) таҳия кардем.

CRDҳо функсияҳои зеринро таъмин мекунанд:

  1. Якҷоя кардани захираҳои гуногуни аслии Kubernetes, то ки онҳо ҳамчун сарбории ягона кор кунанд. Масалан, манбаи PinterestService ҷойгиркунӣ, хидмати воридшавӣ ва харитаи конфигуратсияро дар бар мегирад. Ин ба таҳиягарон имкон медиҳад, ки дар бораи танзими DNS хавотир нашаванд.
  2. Дастгирии зарурии барномаро амалӣ кунед. Истифодабаранда бояд танҳо ба мушаххасоти контейнер мувофиқи мантиқи тиҷоратии худ тамаркуз кунад, дар ҳоле ки контролери CRD ҳама контейнерҳои зарурии ибтидоӣ, тағирёбандаҳои муҳити зист ва мушаххасоти поддонҳоро амалӣ мекунад. Ин барои таҳиягарон сатҳи куллан гуногуни бароҳатиро фароҳам меорад.
  3. Контроллерҳои CRD инчунин давраи ҳаёти захираҳои ватаниро идора мекунанд ва дастрасии дебагро беҳтар мекунанд. Ин мувофиқат кардани мушаххасоти дилхоҳ ва воқеӣ, навсозии ҳолати CRD ва нигоҳ доштани гузоришҳои рӯйдодҳо ва ғайраро дар бар мегирад. Бе CRD, таҳиягарон маҷбур мешаванд, ки захираҳои сершуморро идора кунанд, ки ин танҳо эҳтимолияти хатогиҳоро зиёд мекунад.

Ин аст як мисоли PinterestService ва манбаи дохилӣ, ки аз ҷониби контролери мо идора карда мешавад:

Эҷоди платформаи kubernetes дар Pinterest

Тавре ки шумо дар боло мебинед, барои дастгирии контейнери фармоишӣ мо бояд як контейнери init ва якчанд иловаҳоро барои таъмини амният, намоёнӣ ва трафики шабака муттаҳид кунем. Илова бар ин, мо қолибҳои харитаи конфигуратсияро эҷод кардем ва барои қолибҳои PVC барои ҷойҳои кори гурӯҳӣ, инчунин пайгирии тағирёбандаҳои сершумори муҳити зист барои пайгирии шахсият, истеъмоли захираҳо ва ҷамъоварии ахлотро амалӣ кардем.

Тасаввур кардан душвор аст, ки таҳиягарон мехоҳанд ин файлҳои конфигуратсияро бе дастгирии CRD дастӣ нависад, бигзор минбаъд нигоҳдорӣ ва ислоҳи конфигуратсияҳо.

Ҷараёни кории густариши барнома

Эҷоди платформаи kubernetes дар Pinterest

Тасвири боло нишон медиҳад, ки чӣ гуна манбаи фармоишии Pinterest дар кластери Kubernetes ҷойгир карда шавад:

  1. Таҳиягарон бо кластери Kubernetes мо тавассути CLI ва интерфейси корбар ҳамкорӣ мекунанд.
  2. Асбобҳои CLI/UI файлҳои конфигуратсияи ҷараёни кории YAML ва дигар хосиятҳои сохтмонро (идентификатсияи якхела) аз Artifactory дарёфт мекунанд ва сипас онҳоро ба Хадамоти пешниҳоди кор пешниҳод мекунанд. Ин қадам кафолат медиҳад, ки танҳо версияҳои истеҳсолӣ ба кластер интиқол дода мешаванд.
  3. JSS як дарвоза барои платформаҳои гуногун, аз ҷумла Kubernetes мебошад. Дар ин ҷо корбар тасдиқ карда мешавад, квотаҳо дода мешаванд ва конфигуратсияи CRD-и мо қисман тафтиш карда мешавад.
  4. Пас аз тафтиши CRD дар тарафи JSS, маълумот ба платформаи API k8s фиристода мешавад.
  5. Назоратчии CRD мо рӯйдодҳоро дар тамоми захираҳои корбар назорат мекунад. Он CR-ро ба захираҳои аслии k8s табдил медиҳад, модулҳои заруриро илова мекунад, тағирёбандаҳои мувофиқи муҳити зистро муқаррар мекунад ва дигар корҳои дастгириро иҷро мекунад, то таъмин намудани барномаҳои корбарони контейнерӣ дорои дастгирии кофии инфрасохтор бошанд.
  6. Пас аз он контролери CRD маълумоти гирифташударо ба API Kubernetes интиқол медиҳад, то он аз ҷониби нақшакаш коркард ва ба истеҳсолот ворид карда шавад.

эрод гирифтан: Ин ҷараёни кории пешазинтихоботӣ барои корбарони аввалини платформаи нави k8s сохта шудааст. Мо ҳоло дар раванди такмил додани ин раванд ҳастем, то бо CI/CD-и нави худ ҳамгироӣ кунем. Ин маънои онро дорад, ки мо наметавонем ба шумо ҳама чизро дар бораи Kubernetes бигӯем. Мо бесаброна интизори мубодилаи таҷриба ва пешрафти даста дар ин самт дар мақолаи навбатии блоги худ, "Сохтани платформаи CI/CD барои Pinterest" ҳастем.

Намудҳои захираҳои махсус

Дар асоси эҳтиёҷоти мушаххаси Pinterest, мо CRD-ҳои зеринро таҳия кардем, то ба равандҳои гуногуни корӣ мувофиқ бошанд:

  • PinterestService хидматҳои бидуни шаҳрвандӣ мебошанд, ки муддати тӯлонӣ кор мекунанд. Бисёре аз системаҳои асосии мо ба маҷмӯи чунин хидматҳо асос ёфтаанд.
  • Моделҳои PinterestJobSet барои давраи пурраи кори партия. Сенарияи маъмул дар Pinterest ин аст, ки корҳои сершумор новобаста аз равандҳои дигари шабеҳ як контейнерро дар баробари кор мекунанд.
  • PinterestCronJob дар якҷоягӣ бо сарбориҳои даврии хурд ба таври васеъ истифода мешавад. Ин як бастаи кори cron бо механизмҳои дастгирии Pinterest мебошад, ки барои амният, трафик, гузоришҳо ва ченакҳо масъуланд.
  • PinterestDaemon инфрасохтори Daemonҳоро дар бар мегирад. Ин оила афзоиш меёбад, зеро мо ба кластерҳои худ дастгирии бештар илова мекунем.
  • PinterestTrainingJob ба равандҳои Tensorflow ва Pytorch паҳн шуда, ҳамон сатҳи дастгирии вақти корро мисли ҳама CRD-ҳои дигар таъмин мекунад. Азбаски Pinterest Tensorflow ва дигар системаҳои омӯзиши мошинро фаъолона истифода мебарад, мо сабаб доштем, ки дар атрофи онҳо як CRD алоҳида созем.

Мо инчунин дар болои PinterestStatefulSet кор карда истодаем, ки ба зудӣ барои анборҳои додаҳо ва дигар системаҳои давлатӣ мутобиқ карда мешавад.

Дастгирии вақти корӣ

Ҳангоме ки подкоҳи барнома дар Kubernetes кор мекунад, он ба таври худкор сертификат барои муайян кардани худ мегирад. Ин сертификат барои дастрасӣ ба нигаҳдории махфӣ ё иртибот бо хидматҳои дигар тавассути mTLS истифода мешавад. Дар ҳамин ҳол, Container Init Configurator ва Daemon пеш аз ба кор андохтани замимаи контейнершуда ҳама вобастагии заруриро зеркашӣ мекунанд. Вақте ки ҳама чиз омода аст, паҳлӯи трафик ва Демон суроғаи IP-и модулро дар Zookeeper мо сабт мекунанд, то муштариён онро кашф кунанд. Ҳамаи ин кор хоҳад кард, зеро модули шабака пеш аз оғози барнома танзим шуда буд.

Дар боло намунаҳои маъмулии дастгирии вақти корӣ барои сарбории корӣ мебошанд. Дигар намудҳои сарбории корӣ метавонанд дастгирии каме гуногунро талаб кунанд, аммо ҳамаи онҳо дар шакли паҳлӯҳои сатҳи pod, гиреҳ ё демонҳои сатҳи мошини виртуалӣ меоянд. Мо кафолат медиҳем, ки ҳамаи ин дар дохили инфрасохтори идоракунӣ ҷойгир карда шудааст ва дар байни барномаҳо мувофиқат мекунад, ки дар ниҳоят сарбориро дар робита ба кори техникӣ ва дастгирии муштариён ба таври назаррас коҳиш медиҳад.

Санҷиш ва QA

Мо дар болои инфрасохтори мавҷудаи санҷиши Kubernetes лӯлаи озмоишии ниҳоӣ сохтем. Ин санҷишҳо ба ҳамаи кластерҳои мо дахл доранд. Пеш аз он ки ба кластери маҳсулот табдил ёбад, лӯлаи мо аз ислоҳоти зиёд гузашт.

Илова ба системаҳои санҷишӣ, мо системаҳои мониторинг ва огоҳӣ дорем, ки ҳолати ҷузъҳои система, истеъмоли захираҳо ва дигар нишондиҳандаҳои муҳимро доимо назорат мекунанд ва танҳо ҳангоми зарурати дахолати инсон моро огоҳ мекунанд.

Тафовутҳо

Мо ба баъзе алтернативаҳои захираҳои фармоишӣ, аз қабили контроллерҳои дастрасии мутатсия ва системаҳои шаблон назар кардем. Бо вуҷуди ин, ҳамаи онҳо бо мушкилоти ҷиддии амалиётӣ меоянд, аз ин рӯ мо масири CRD-ро интихоб кардем.

Барои ҷорӣ кардани паҳлӯҳо, тағирёбандаҳои муҳити зист ва дигар дастгирии вақти корӣ як контролери қабули мутатсия истифода мешуд. Бо вуҷуди ин, он бо мушкилоти гуногун рӯ ба рӯ шуд, аз қабили ҳатмии захираҳо ва идоракунии давраи ҳаёт, ки дар CRD чунин мушкилот ба вуҷуд намеоянд.

Эзоҳ: Системаҳои қолабӣ ба монанди диаграммаҳои Helm низ барои иҷро кардани барномаҳо бо конфигуратсияҳои шабеҳ васеъ истифода мешаванд. Аммо, барномаҳои кории мо хеле гуногунанд, ки онҳоро бо истифода аз қолабҳо идора кардан мумкин нест. Инчунин ҳангоми ҷойгиркунии доимӣ ҳангоми истифодаи қолибҳо хатогиҳои аз ҳад зиёд ба вуҷуд меоянд.

Кори дар пешистода

Дар айни замон мо дар тамоми кластерҳои худ сарбории омехта дорем. Барои дастгирии чунин равандҳои намудҳо ва андозаҳои гуногун, мо дар самтҳои зерин кор мекунем:

  • Маҷмӯаи кластерҳо барномаҳои калонро дар кластерҳои гуногун барои миқёспазирӣ ва устуворӣ паҳн мекунанд.
  • Таъмини устувории кластер, миқёспазирӣ ва намоён барои эҷоди пайвасти барномаҳо ва SLAs.
  • Идоракунии захираҳо ва квотаҳо, то ки барномаҳо бо ҳамдигар мухолиф набошанд ва миқёси кластер аз ҷониби мо назорат карда мешавад.
  • Платформаи нави CI/CD барои дастгирӣ ва ҷойгиркунии барномаҳо дар Kubernetes.

Манбаъ: will.com

Илова Эзоҳ