Pinterest-da kubernetes platformasini yaratish

Yillar davomida Pinterestning 300 million foydalanuvchisi 200 milliarddan ortiq doskada 4 milliarddan ortiq pin yaratdi. Ushbu foydalanuvchilar armiyasiga va keng kontent bazasiga xizmat qilish uchun portal bir nechta protsessorlar tomonidan boshqarilishi mumkin bo'lgan mikroservislardan tortib virtual mashinalarning butun parkida ishlaydigan ulkan monolitlargacha bo'lgan minglab xizmatlarni ishlab chiqdi. Va keyin kompaniyaning nigohi k8-larga tushgan payt keldi. Nima uchun "kub" Pinterestda yaxshi ko'rindi? Siz bu haqda bizning so'nggi maqolamizning tarjimasidan bilib olasiz blog Pinterest muhandisligi.

Pinterest-da kubernetes platformasini yaratish

Shunday qilib, yuz millionlab foydalanuvchilar va yuzlab milliardlab pinlar. Ushbu foydalanuvchilar armiyasiga va keng kontent bazasiga xizmat qilish uchun biz bir nechta protsessorlar tomonidan boshqarilishi mumkin bo'lgan mikroservislardan tortib virtual mashinalarning butun parklarida ishlaydigan ulkan monolitlargacha bo'lgan minglab xizmatlarni ishlab chiqdik. Bundan tashqari, bizda protsessor, xotira yoki kiritish-chiqarish ruxsatini talab qilishi mumkin bo'lgan turli xil ramkalar mavjud.

Ushbu hayvonot bog'ini saqlashda ishlab chiqish guruhi bir qator qiyinchiliklarga duch keladi:

  • Muhandislar uchun ishlab chiqarish muhitini boshqarishning yagona usuli yo'q. Fuqaroligi yoʻq xizmatlar, Davlat xizmatlari va faol ishlab chiqilayotgan loyihalar butunlay boshqa texnologiya toʻplamlariga asoslangan. Bu muhandislar uchun to'liq o'quv kursini yaratishga olib keldi va bizning infratuzilma jamoamiz ishini jiddiy ravishda murakkablashtirdi.
  • O'zlarining virtual mashinalari parkiga ega ishlab chiquvchilar ichki ma'murlar uchun katta yuk yaratadilar. Natijada, OS yoki AMIni yangilash kabi oddiy operatsiyalar haftalar va oylar davom etadi. Bu mutlaqo kundalik vaziyatlarda ish yukining oshishiga olib keladi.
  • Mavjud echimlar ustiga global infratuzilmani boshqarish vositalarini yaratishdagi qiyinchiliklar. Virtual mashinalar egalarini topish oson emasligi bilan vaziyat yanada murakkablashadi. Ya'ni, biz bu quvvatni infratuzilmamizning boshqa qismlarida ishlash uchun xavfsiz qazib olish mumkinligini bilmaymiz.

Konteynerlarni orkestrlash tizimlari ish yukini boshqarishni birlashtirishning bir usuli hisoblanadi. Ular rivojlanish tezligini oshirish va infratuzilmani boshqarishni soddalashtirish uchun eshiklarni ochadi, chunki loyihaga jalb qilingan barcha resurslar bitta markazlashtirilgan tizim tomonidan boshqariladi.

Pinterest-da kubernetes platformasini yaratish

1-rasm: Infratuzilma ustuvorliklari (ishonchlilik, ishlab chiquvchilarning mahsuldorligi va samaradorligi).

Pinterest-dagi Cloud Management Platform jamoasi 8 yilda K2017-larni topdi. 2017 yilning birinchi yarmiga kelib biz ishlab chiqarish imkoniyatlarining ko‘pchiligini, jumladan API va barcha veb-serverlarimizni hujjatlashtirdik. Shundan so'ng biz konteyner yechimlarini tartibga solish, klasterlar qurish va ular bilan ishlash uchun turli tizimlarni to'liq baholadik. 2017 yil oxiriga kelib biz Kubernetes-dan foydalanishga qaror qildik. Bu juda moslashuvchan edi va ishlab chiquvchilar hamjamiyatida keng qo'llab-quvvatlandi.

Bugungi kunga qadar biz Kops asosida o'zimizning klaster yuklash vositalarini yaratdik va tarmoq, xavfsizlik, o'lchovlar, jurnallar, identifikatsiyani boshqarish va Kubernetesga trafik kabi mavjud infratuzilma komponentlarini ko'chirdik. Shuningdek, biz resursimiz uchun ish yukini modellashtirish tizimini joriy qildik, uning murakkabligi ishlab chiquvchilardan yashirin. Endi biz klaster barqarorligini ta'minlash, uni kengaytirish va yangi mijozlarni ulashga e'tibor qaratmoqdamiz.

Kubernetes: Pinterest usuli

Kubernetes-ni Pinterest miqyosida bizning muhandislarimiz yoqtiradigan platforma sifatida boshlash juda ko'p qiyinchiliklarga duch keldi.

Yirik kompaniya sifatida biz infratuzilma vositalariga katta sarmoya kiritdik. Masalan, sertifikatlarni qayta ishlash va kalitlarni tarqatish bilan shug'ullanadigan xavfsizlik vositalari, trafikni boshqarish komponentlari, xizmatlarni aniqlash tizimlari, ko'rinish komponentlari, jurnal va o'lchovlarni jo'natish komponentlari. Bularning barchasi bir sababga ko'ra to'plangan: biz oddiy sinov va xatolik yo'lidan o'tdik va shuning uchun biz eski g'ildirakni yangi platformada qayta ixtiro qilish o'rniga ushbu jihozlarning barchasini Kubernetesdagi yangi infratuzilmaga integratsiya qilishni xohladik. Ushbu yondashuv migratsiyani umuman soddalashtirdi, chunki barcha ilovalarni qo'llab-quvvatlash allaqachon mavjud va noldan yaratilishi shart emas.

Boshqa tomondan, Kubernetesdagi yukni bashorat qilish modellari (masalan, joylashtirishlar, ish o'rinlari va Daemon to'plamlari) bizning loyihamiz uchun etarli emas. Ushbu qulaylik muammolari Kubernetesga o'tish uchun katta to'siqdir. Masalan, xizmat ishlab chiquvchilari kirish sozlamalari etishmayotgan yoki noto‘g‘ri ekanligi haqida shikoyat qilganini eshitganmiz. Shuningdek, biz shablon dvigatellaridan noto'g'ri foydalanishga duch keldik, bir xil spetsifikatsiya va vazifa bilan yuzlab nusxalar yaratilganda, bu esa dahshatli nosozliklarni tuzatish muammolariga olib keldi.

Xuddi shu klasterda turli versiyalarni saqlash ham juda qiyin edi. Agar siz bir vaqtning o'zida bir xil ish vaqti muhitining bir nechta versiyalarida, ularning barcha muammolari, xatolari va yangilanishlari bilan ishlashingiz kerak bo'lsa, mijozlarni qo'llab-quvvatlashning murakkabligini tasavvur qiling.

Pinterest foydalanuvchi xususiyatlari va boshqaruvchilari

Muhandislarimiz uchun Kubernetes-ni amalga oshirishni osonlashtirish va infratuzilmamizni soddalashtirish va tezlashtirish uchun biz o'z shaxsiy manba ta'riflarimizni (CRD) ishlab chiqdik.

CRDlar quyidagi funktsiyalarni ta'minlaydi:

  1. Turli mahalliy Kubernetes resurslarini birlashtirib, ular bitta ish yuki sifatida ishlaydi. Masalan, PinterestService resursi joylashtirish, kirish xizmati va konfiguratsiya xaritasini o'z ichiga oladi. Bu ishlab chiquvchilarga DNS-ni sozlash haqida tashvishlanmaslik imkonini beradi.
  2. Kerakli ilovalarni qo'llab-quvvatlashni amalga oshiring. Foydalanuvchi o'zining biznes mantig'iga ko'ra faqat konteyner spetsifikatsiyasiga e'tibor qaratishi kerak, shu bilan birga CRD boshqaruvchisi barcha kerakli boshlang'ich konteynerlari, atrof-muhit o'zgaruvchilari va pod spetsifikatsiyalarini amalga oshiradi. Bu ishlab chiquvchilar uchun tubdan boshqa darajadagi qulaylikni ta'minlaydi.
  3. CRD kontrollerlari, shuningdek, mahalliy resurslarning hayot aylanishini boshqaradi va disk raskadrovka mavjudligini yaxshilaydi. Bunga kerakli va haqiqiy spetsifikatsiyalarni moslashtirish, CRD holatini yangilash va hodisalar jurnallarini saqlash va boshqalar kiradi. CRD bo'lmasa, ishlab chiquvchilar bir nechta resurslarni boshqarishga majbur bo'lishadi, bu faqat xatolik ehtimolini oshiradi.

Mana PinterestService va boshqaruvchimiz tomonidan boshqariladigan ichki resurs misoli:

Pinterest-da kubernetes platformasini yaratish

Yuqorida ko'rib turganingizdek, maxsus konteynerni qo'llab-quvvatlash uchun biz xavfsizlik, ko'rinish va tarmoq trafigini ta'minlash uchun init konteynerini va bir nechta qo'shimchalarni birlashtirishimiz kerak. Bundan tashqari, biz konfiguratsiya xaritasi shablonlarini yaratdik va ommaviy ishlar uchun PVX shablonlarini qo'llab-quvvatladik, shuningdek, identifikatsiyani, resurslarni iste'mol qilishni va axlat yig'ishni kuzatish uchun bir nechta muhit o'zgaruvchilarini kuzatishni amalga oshirdik.

Ishlab chiquvchilar ushbu konfiguratsiya fayllarini CRD-ni qo'llab-quvvatlamasdan qo'lda yozishni xohlashlarini tasavvur qilish qiyin, hatto konfiguratsiyalarni qo'llab-quvvatlash va disk raskadrovka qilish.

Ilovani joylashtirish ish jarayoni

Pinterest-da kubernetes platformasini yaratish

Yuqoridagi rasmda Pinterest maxsus resursini Kubernetes klasteriga qanday joylashtirish mumkinligi ko'rsatilgan:

  1. Ishlab chiquvchilar bizning Kubernetes klasterimiz bilan CLI va foydalanuvchi interfeysi orqali o'zaro ishlaydi.
  2. CLI/UI vositalari Artifactory'dan ish jarayoni konfiguratsiyasi YAML fayllari va boshqa qurish xususiyatlarini (bir xil versiya identifikatori) oladi va keyin ularni Ish yuborish xizmatiga yuboradi. Ushbu qadam klasterga faqat ishlab chiqarish versiyalari yetkazilishini ta'minlaydi.
  3. JSS turli platformalar, jumladan Kubernetes uchun shlyuzdir. Bu erda foydalanuvchi autentifikatsiya qilinadi, kvotalar beriladi va bizning CRD konfiguratsiyasi qisman tekshiriladi.
  4. JSS tomonida CRD tekshirilgandan so'ng, ma'lumot k8s platformasi API ga yuboriladi.
  5. CRD kontrollerimiz barcha foydalanuvchi resurslaridagi voqealarni kuzatib boradi. U CR-larni mahalliy k8s resurslariga aylantiradi, kerakli modullarni qo'shadi, tegishli muhit o'zgaruvchilarini o'rnatadi va konteynerlangan foydalanuvchi ilovalari etarli infratuzilma qo'llab-quvvatlashiga ega bo'lishini ta'minlash uchun boshqa yordam ishlarini bajaradi.
  6. Keyin CRD tekshirgichi qabul qilingan ma'lumotlarni Kubernetes API-ga uzatadi, shunda ularni rejalashtiruvchi qayta ishlaydi va ishlab chiqarishga qo'yadi.

nota: Joylashtirishning ushbu relizdan oldingi ish oqimi yangi k8s platformasining birinchi foydalanuvchilari uchun yaratilgan. Biz hozirda yangi CI/CD bilan to‘liq integratsiya qilish uchun ushbu jarayonni takomillashtirish jarayonidamiz. Bu shuni anglatadiki, biz sizga Kubernetes bilan bog'liq hamma narsani ayta olmaymiz. “Pinterest uchun CI/CD platformasini yaratish” nomli navbatdagi blog postimizda tajribamiz va jamoaning ushbu yo‘nalishdagi yutuqlari bilan bo‘lishishni intiqlik bilan kutamiz.

Maxsus resurslar turlari

Pinterestning o'ziga xos ehtiyojlariga asoslanib, biz turli xil ish oqimlariga mos keladigan quyidagi CRDlarni ishlab chiqdik:

  • PinterestService - bu uzoq vaqt davomida ishlayotgan fuqaroligi bo'lmagan xizmatlar. Ko'pgina asosiy tizimlarimiz bunday xizmatlar to'plamiga asoslangan.
  • PinterestJobSet to'liq tsiklli ommaviy ishlarni modellashtiradi. Pinterest-da keng tarqalgan stsenariy shundaki, bir nechta ish boshqa shunga o'xshash jarayonlardan qat'i nazar, bir xil konteynerlarni parallel ravishda boshqaradi.
  • PinterestCronJob kichik davriy yuklar bilan birgalikda keng qo'llaniladi. Bu xavfsizlik, trafik, jurnallar va o'lchovlar uchun mas'ul bo'lgan Pinterest qo'llab-quvvatlash mexanizmlari bilan mahalliy cron bilan ishlash uchun o'ram.
  • PinterestDaemon daemon infratuzilmasini o'z ichiga oladi. Klasterlarimizga ko'proq yordam qo'shsak, bu oila o'sishda davom etmoqda.
  • PinterestTrainingJob boshqa barcha CRDlar bilan bir xil darajadagi ish vaqtini qo'llab-quvvatlovchi Tensorflow va Pytorch jarayonlarini qamrab oladi. Pinterest Tensorflow va boshqa mashinani o'rganish tizimlaridan faol foydalanganligi sababli, bizda ular atrofida alohida CRD qurish uchun sabab bor edi.

Shuningdek, biz PinterestStatefulSet ustida ishlayapmiz, u tez orada ma'lumotlar omborlari va boshqa statistik tizimlar uchun moslashtiriladi.

Ish vaqtini qo'llab-quvvatlash

Ilova podasi Kubernetes-da ishlaganda, u avtomatik ravishda o'zini identifikatsiya qilish uchun sertifikat oladi. Ushbu sertifikat maxfiy xotiraga kirish yoki mTLS orqali boshqa xizmatlar bilan bog'lanish uchun ishlatiladi. Shu bilan birga, Container Init Configurator va Daemon konteynerlashtirilgan dasturni ishga tushirishdan oldin barcha kerakli bog'liqliklarni yuklab oladi. Har bir narsa tayyor bo'lgach, transport vositasi va Daemon modulning IP-manzilini bizning Zookeeper-da ro'yxatdan o'tkazadi, shunda mijozlar buni bilib olishadi. Bularning barchasi ishlaydi, chunki tarmoq moduli dastur ishga tushirilgunga qadar sozlangan.

Yuqoridagilar ish yuklari uchun ish vaqtini qo'llab-quvvatlashning odatiy misollari. Boshqa turdagi ish yuklari biroz boshqacha qo'llab-quvvatlashni talab qilishi mumkin, ammo ularning barchasi pod-darajali yonboshlar, tugun darajasidagi yoki virtual mashina darajasidagi Demonlar shaklida keladi. Biz bularning barchasi boshqaruv infratuzilmasi doirasida joylashtirilishini va ilovalar bo'ylab izchil bo'lishini ta'minlaymiz, bu esa pirovardida texnik ish va mijozlarni qo'llab-quvvatlash borasidagi yukni sezilarli darajada kamaytiradi.

Sinov va QA

Mavjud Kubernetes test infratuzilmasi tepasida biz uchdan uchgacha sinov quvurini qurdik. Ushbu testlar barcha klasterlarimizga tegishli. Bizning quvur liniyasi mahsulot klasterining bir qismi bo'lishidan oldin ko'plab qayta ko'rib chiqilgan.

Sinov tizimlariga qo'shimcha ravishda bizda tizim tarkibiy qismlarining holatini, resurslar iste'molini va boshqa muhim ko'rsatkichlarni doimiy ravishda kuzatib boradigan, faqat inson aralashuvi zarur bo'lganda bizga xabar beradigan monitoring va ogohlantirish tizimlari mavjud.

Shu bilan bir qatorda

Mutatsiyaga kirish kontrollerlari va shablon tizimlari kabi maxsus resurslarga ba'zi muqobil variantlarni ko'rib chiqdik. Biroq, ularning barchasi muhim operatsion qiyinchiliklarga duch keladi, shuning uchun biz CRD marshrutini tanladik.

Mutatsion qabul nazoratchisi yon aravachalar, atrof-muhit o'zgaruvchilari va boshqa ish vaqtini qo'llab-quvvatlashni joriy qilish uchun ishlatilgan. Biroq, u turli muammolarga duch keldi, masalan, CRDda bunday muammolar yuzaga kelmaydigan resurslarni bog'lash va hayot aylanishini boshqarish.

Eslatma: Helm diagrammasi kabi shablon tizimlari ham shunga o'xshash konfiguratsiyaga ega ilovalarni ishga tushirish uchun keng qo'llaniladi. Biroq, bizning ish ilovalarimiz juda xilma-xil bo'lib, shablonlar yordamida boshqarilmaydi. Shuningdek, uzluksiz joylashtirish paytida shablonlardan foydalanishda juda ko'p xatolar bo'ladi.

Kelgusi ish

Biz hozirda barcha klasterlarimizda aralash yuk bilan shug'ullanmoqdamiz. Har xil turdagi va o'lchamdagi bunday jarayonlarni qo'llab-quvvatlash uchun biz quyidagi yo'nalishlarda ishlaymiz:

  • Klasterlar to'plami keng ko'lamli va barqarorlik uchun turli klasterlar bo'ylab katta ilovalarni tarqatadi.
  • Ilova ulanishi va SLA'larni yaratish uchun klaster barqarorligi, miqyosi va ko'rinishini ta'minlash.
  • Ilovalar bir-biriga zid kelmasligi uchun resurslar va kvotalarni boshqarish va klaster miqyosi biz tomondan nazorat qilinadi.
  • Kubernetes-da ilovalarni qo'llab-quvvatlash va joylashtirish uchun yangi CI/CD platformasi.

Manba: www.habr.com

a Izoh qo'shish