Pinterest дээр kubernetes платформ үүсгэх

Олон жилийн турш Pinterest-ийн 300 сая хэрэглэгч 200 тэрбум гаруй самбар дээр 4 тэрбум гаруй зүү үүсгэсэн байна. Энэхүү портал нь хэрэглэгчдийн арми, агуулгыг агуулахын тулд цөөхөн CPU-ээр ажиллах боломжтой микро үйлчилгээнээс эхлээд виртуал машинуудын бүхэл бүтэн флот дээр ажилладаг аварга том цул үйлчилгээ хүртэл олон мянган үйлчилгээг хөгжүүлсэн. Тэгээд компанийн нүд k8 дээр тусах мөч ирлээ. "Шоо" яагаад Pinterest дээр сайхан харагдаж байсан бэ? Та энэ тухай бидний саяхан орчуулсан нийтлэлээс олж мэдэх болно Pinterest инженерийн блог.

Pinterest дээр kubernetes платформ үүсгэх

Тиймээс хэдэн зуун сая хэрэглэгчид, хэдэн зуун тэрбум зүү. Энэхүү хэрэглэгчдийн арми, агуулгыг агуулахын тулд бид цөөхөн CPU-үүдээр ажиллах боломжтой микро үйлчилгээнээс эхлээд виртуал машинуудын бүхэл бүтэн флот дээр ажилладаг аварга том цул үйлчилгээ хүртэл олон мянган үйлчилгээг хөгжүүлсэн. Нэмж дурдахад бид CPU, санах ой эсвэл оролт гаралтын хандалт шаарддаг олон төрлийн хүрээтэй.

Энэхүү амьтны хүрээлэнг хадгалахад хөгжүүлэлтийн баг хэд хэдэн бэрхшээлтэй тулгардаг:

  • Инженерүүдэд үйлдвэрлэлийн орчинг явуулах нэгдсэн арга байхгүй. Харьяалалгүй үйлчилгээ, Төрийн үйлчилгээ, идэвхтэй хөгжиж буй төслүүд нь огт өөр технологийн стек дээр суурилдаг. Энэ нь инженерүүдэд зориулсан бүхэл бүтэн сургалтыг бий болгоход хүргэсэн бөгөөд манай дэд бүтцийн багийн ажлыг ихээхэн хүндрүүлж байна.
  • Өөрийн гэсэн виртуал машинтай хөгжүүлэгчид дотоод администраторуудад асар их ачаалал үүсгэдэг. Үүний үр дүнд OS эсвэл AMI-г шинэчлэх гэх мэт энгийн үйлдлүүд долоо хоног, сараар үргэлжилдэг. Энэ нь туйлын өдөр тутмын нөхцөл байдалд ажлын ачаалал нэмэгдэхэд хүргэдэг.
  • Одоо байгаа шийдлүүдээс гадна дэлхийн дэд бүтцийн менежментийн хэрэгслийг бий болгоход тулгарч буй бэрхшээлүүд. Виртуал машинуудын эздийг олох нь тийм ч амар биш байгаа тул нөхцөл байдал улам төвөгтэй болж байна. Өөрөөр хэлбэл, энэ хүчин чадлыг манай дэд бүтцийн бусад хэсэгт аюулгүйгээр олборлох боломжтой эсэхийг бид мэдэхгүй.

Контейнерийн зохион байгуулалтын систем нь ажлын ачааллын удирдлагыг нэгтгэх арга юм. Төсөлд хамрагдсан бүх нөөцийг нэг төвлөрсөн системээр удирддаг тул хөгжлийн хурдыг нэмэгдүүлэх, дэд бүтцийн менежментийг хялбарчлах үүд хаалгыг нээж өгдөг.

Pinterest дээр kubernetes платформ үүсгэх

Зураг 1: Дэд бүтцийн тэргүүлэх чиглэлүүд (найдвартай байдал, хөгжүүлэгчийн бүтээмж, үр ашиг).

Pinterest дэх Cloud Management Platform баг 8 онд K2017-ийг нээсэн. 2017 оны эхний хагас гэхэд бид API болон бүх вэб серверүүдээ багтаасан үйлдвэрлэлийн ихэнх чадвараа баримтжуулсан. Дараа нь бид савны шийдлүүдийг зохион байгуулах, кластер байгуулах, тэдэнтэй хамтран ажиллах янз бүрийн системүүдийн нарийн үнэлгээг хийсэн. 2017 оны эцэс гэхэд бид Kubernetes-ийг ашиглахаар шийдсэн. Энэ нь нэлээд уян хатан байсан бөгөөд хөгжүүлэгчдийн нийгэмлэгт өргөн дэмжлэгтэй байсан.

Өнөөдрийг хүртэл бид Kops дээр суурилсан өөрийн кластер ачаалах хэрэгслүүдийг бүтээж, сүлжээ, аюулгүй байдал, хэмжүүр, бүртгэл, таниултын удирдлага, урсгал зэрэг дэд бүтцийн бүрэлдэхүүн хэсгүүдийг Kubernetes руу шилжүүлсэн. Мөн бид нөөцдөө зориулж ажлын ачааллын загварчлалын системийг хэрэгжүүлсэн бөгөөд түүний нарийн төвөгтэй байдал нь хөгжүүлэгчдээс далд байдаг. Одоо бид кластерын тогтвортой байдлыг хангах, өргөжүүлэх, шинэ үйлчлүүлэгчдийг холбоход анхаарч байна.

Кубернетес: Пинтерестийн арга

Манай инженерүүдэд таалагдах платформ болохын хувьд Кубернетесийг Pinterest-ийн хэмжээнд эхлүүлэх нь маш олон сорилттой тулгарсан.

Том компанийн хувьд бид дэд бүтцийн хэрэгсэлд ихээхэн хөрөнгө оруулалт хийсэн. Жишээлбэл, гэрчилгээ, түлхүүр түгээлт, замын хөдөлгөөний удирдлагын бүрэлдэхүүн хэсгүүд, үйлчилгээний нээлтийн систем, харагдах байдлын бүрэлдэхүүн хэсгүүд, бүртгэл болон хэмжигдэхүүнийг илгээх бүрэлдэхүүн хэсгүүдийг зохицуулдаг аюулгүй байдлын хэрэгслүүд орно. Энэ бүгдийг нэг шалтгаанаар цуглуулсан: бид туршилт, алдааны ердийн замыг туулсан тул хуучин дугуйг шинэ платформ дээр дахин зохион бүтээхийн оронд энэ бүх төхөөрөмжийг Кубернетес дээрх шинэ дэд бүтцэд нэгтгэхийг хүссэн. Програмын бүх дэмжлэг аль хэдийн байгаа бөгөөд эхнээс нь үүсгэх шаардлагагүй тул энэ арга нь шилжилтийг бүхэлд нь хялбаршуулсан.

Нөгөөтэйгүүр, Кубернетес дэх ачааллыг урьдчилан таамаглах загварууд (жишээ нь, байршуулалт, ажлын байр, Демон багц гэх мэт) нь манай төслийн хувьд хангалтгүй юм. Ашиглалтын эдгээр асуудлууд Кубернетес рүү шилжихэд маш том саад болж байна. Жишээ нь, үйлчилгээ хөгжүүлэгчид нэвтрэх тохиргоо дутуу эсвэл буруу байна гэж гомдоллож байгааг бид сонссон. Мөн ижил үзүүлэлт, даалгавраар хэдэн зуун хувь бүтээгдсэний үр дүнд хар дарсан зүүдний дибаг хийх асуудал гарч ирэхэд бид загвар хөдөлгүүрийн буруу хэрэглээтэй тулгарсан.

Нэг кластерт өөр өөр хувилбаруудыг хадгалах нь бас маш хэцүү байсан. Хэрэв та бүх асуудал, алдаа, шинэчлэлтүүдтэй ижил ажиллах орчны олон хувилбарт нэгэн зэрэг ажиллах шаардлагатай бол хэрэглэгчийн тусламжийн үйлчилгээний нарийн төвөгтэй байдлыг төсөөлөөд үз дээ.

Pinterest хэрэглэгчийн шинж чанар ба хянагч

Манай инженерүүд Кубернетесийг хэрэгжүүлэхэд хялбар болгох, дэд бүтцээ хялбаршуулж, хурдасгахын тулд бид өөрсдийн захиалгат нөөцийн тодорхойлолтыг (CRD) боловсруулсан.

CRD нь дараахь функцийг хангадаг.

  1. Kubernetes-ийн төрөл бүрийн эх сурвалжуудыг нэгтгэж, нэг ажлын ачаалал болгон ажиллуулдаг. Жишээлбэл, PinterestService нөөц нь байршуулалт, нэвтрэх үйлчилгээ, тохиргооны газрын зургийг агуулдаг. Энэ нь хөгжүүлэгчдэд DNS тохируулах талаар санаа зовохгүй байх боломжийг олгодог.
  2. Шаардлагатай хэрэглээний дэмжлэгийг хэрэгжүүлэх. Хэрэглэгч өөрийн бизнесийн логикийн дагуу зөвхөн контейнерийн тодорхойлолтод анхаарлаа төвлөрүүлэх шаардлагатай байдаг бол CRD хянагч нь шаардлагатай бүх эхлэлийн контейнерууд, орчны хувьсагчууд болон pod техникийн үзүүлэлтүүдийг хэрэгжүүлдэг. Энэ нь хөгжүүлэгчдийн тав тухыг үндсээр нь өөр түвшинд өгдөг.
  3. CRD хянагч нь эх нөөцийн амьдралын мөчлөгийг удирдаж, дибаг хийх боломжийг сайжруулдаг. Үүнд хүссэн болон бодит үзүүлэлтүүдийг нэгтгэх, CRD статусыг шинэчлэх, үйл явдлын бүртгэлийг хөтлөх гэх мэт зүйлс орно. CRD байхгүй бол хөгжүүлэгчид олон нөөцийг удирдахаас өөр аргагүй болох бөгөөд энэ нь зөвхөн алдаа гарах магадлалыг нэмэгдүүлэх болно.

Манай хянагчаар удирддаг PinterestService болон дотоод нөөцийн жишээ энд байна:

Pinterest дээр kubernetes платформ үүсгэх

Дээр дурдсанчлан, захиалгат контейнерийг дэмжихийн тулд бид аюулгүй байдал, харагдах байдал, сүлжээний урсгалыг хангах зорилгоор init контейнер болон хэд хэдэн нэмэлтүүдийг нэгтгэх шаардлагатай байна. Нэмж дурдахад бид тохиргооны газрын зургийн загваруудыг бүтээж, багц ажилд зориулсан PVC загваруудад дэмжлэг үзүүлж, таних, нөөцийн зарцуулалт, хог хаягдлыг хянах зорилгоор орчны олон хувьсагчдыг хянах боломжтой болсон.

Хөгжүүлэгчид тохиргоог цаашид хадгалах, дибаг хийх нь битгий хэл CRD-ийн дэмжлэггүйгээр эдгээр тохиргооны файлуудыг гараар бичихийг хүсдэг гэж төсөөлөхөд бэрх юм.

Аппликейшн байршуулах ажлын урсгал

Pinterest дээр kubernetes платформ үүсгэх

Дээрх зураг нь Pinterest-ийн захиалгат нөөцийг Kubernetes кластерт хэрхэн байрлуулахыг харуулж байна:

  1. Хөгжүүлэгчид CLI болон хэрэглэгчийн интерфейсээр дамжуулан манай Kubernetes кластертай харилцдаг.
  2. CLI/UI хэрэгслүүд нь Artifactory-аас ажлын урсгалын тохиргооны YAML файлууд болон бусад бүтээх шинж чанаруудыг (ижил хувилбарын ID) татаж аваад, дараа нь Ажил илгээх үйлчилгээнд илгээдэг. Энэ алхам нь зөвхөн үйлдвэрлэлийн хувилбаруудыг кластерт хүргэхийг баталгаажуулдаг.
  3. JSS бол Kubernetes зэрэг янз бүрийн платформуудад зориулсан гарц юм. Энд хэрэглэгчийг баталгаажуулж, квот олгож, манай CRD-ийн тохиргоог хэсэгчлэн шалгадаг.
  4. JSS тал дахь CRD-г шалгасны дараа мэдээллийг k8s платформ API руу илгээдэг.
  5. Манай CRD хянагч нь хэрэглэгчийн бүх нөөц дээрх үйл явдлыг хянадаг. Энэ нь CR-г k8s эх үүсвэр болгон хувиргаж, шаардлагатай модулиудыг нэмж, тохирох орчны хувьсагчдыг тохируулж, контейнержүүлсэн хэрэглэгчийн програмуудыг хангалттай дэд бүтцийн дэмжлэгтэй байлгахын тулд бусад туслах ажлыг гүйцэтгэдэг.
  6. Дараа нь CRD хянагч нь хүлээн авсан өгөгдлийг Kubernetes API-д дамжуулдаг бөгөөд ингэснээр үүнийг хуваарь гаргагч боловсруулж, үйлдвэрлэлд оруулах боломжтой.

тайлбар: Энэхүү байршуулалтын өмнөх ажлын урсгалыг шинэ k8s платформын анхны хэрэглэгчдэд зориулан бүтээсэн. Бид одоогоор шинэ CI/CD-тэй бүрэн нэгтгэхийн тулд энэ үйл явцыг боловсронгуй болгож байна. Энэ нь бид Кубернетестэй холбоотой бүх зүйлийг хэлж чадахгүй гэсэн үг юм. Бид "Pinterest-д зориулсан CI/CD платформыг бий болгох нь" гэсэн дараагийн блог нийтлэлдээ энэ чиглэлээр туршлага болон багийн ахиц дэвшлийг хуваалцахыг тэсэн ядан хүлээж байна.

Тусгай нөөцийн төрлүүд

Pinterest-ийн тусгай хэрэгцээнд үндэслэн бид янз бүрийн ажлын урсгалд нийцүүлэн дараах CRD-г боловсруулсан.

  • PinterestService нь удаан хугацааны туршид ажиллаж байгаа харьяалалгүй үйлчилгээ юм. Манай үндсэн системүүдийн ихэнх нь ийм үйлчилгээний багц дээр суурилдаг.
  • PinterestJobSet загварууд нь бүтэн мөчлөгийн багц ажлуудыг хийдэг. Pinterest дээрх нийтлэг хувилбар бол бусад ижил төстэй процессуудаас үл хамааран олон ажил ижил контейнеруудыг зэрэгцээ ажиллуулдаг явдал юм.
  • PinterestCronJob нь бага хэмжээний үечилсэн ачаалалтай хамт өргөн хэрэглэгддэг. Энэ бол аюулгүй байдал, замын хөдөлгөөн, бүртгэл, хэмжигдэхүүнийг хариуцдаг Pinterest-ийн дэмжлэгийн механизмтай эх cron ажилд зориулсан боодол юм.
  • PinterestDaemon нь дэд бүтцийн дэмонуудыг агуулдаг. Бид кластерууддаа илүү их дэмжлэг нэмснээр энэ гэр бүл өссөөр байна.
  • PinterestTrainingJob нь Tensorflow болон Pytorch процессуудыг хамардаг бөгөөд бусад бүх CRD-тэй ижил түвшний ажиллах үеийн дэмжлэг үзүүлдэг. Pinterest нь Tensorflow болон бусад машин сургалтын системийг идэвхтэй ашигладаг тул бид тэдгээрийн эргэн тойронд тусдаа CRD байгуулах шалтгаан байсан.

Бид мөн PinterestStatefulSet дээр ажиллаж байгаа бөгөөд удахгүй мэдээллийн агуулах болон бусад төлөвтэй системд дасан зохицох болно.

Ажиллах цагийн дэмжлэг

Аппликейшн pod Kubernetes дээр ажиллах үед өөрийгөө таних гэрчилгээг автоматаар хүлээн авдаг. Энэхүү гэрчилгээ нь нууц хадгалалтад хандах эсвэл mTLS-ээр дамжуулан бусад үйлчилгээтэй холбогдоход ашиглагддаг. Үүний зэрэгцээ, Container Init Configurator болон Daemon нь контейнержүүлсэн програмыг ажиллуулахын өмнө шаардлагатай бүх хамаарлыг татаж авах болно. Бүх зүйл бэлэн болмогц замын хажуугийн тэрэг болон Демон модулийн IP хаягийг манай Zookeeper-д бүртгүүлснээр үйлчлүүлэгчид үүнийг олж мэдэх боломжтой. Сүлжээний модулийг програмыг эхлүүлэхээс өмнө тохируулсан тул энэ бүхэн ажиллах болно.

Дээрх нь ажлын ачааллыг ажиллуулах цагийн дэмжлэгийн ердийн жишээ юм. Бусад төрлийн ажлын ачаалалд арай өөр дэмжлэг шаардлагатай байж болох ч тэдгээр нь бүгд под түвшний хажуу тэрэг, зангилааны түвшний эсвэл виртуал машины түвшний дэмон хэлбэрээр ирдэг. Бид энэ бүгдийг удирдлагын дэд бүтцэд суулгаж, программуудад нийцэж байгаа эсэхийг баталгаажуулж, эцсийн дүндээ техникийн ажил болон хэрэглэгчийн дэмжлэгийн ачааллыг эрс багасгадаг.

Туршилт ба QA

Бид одоо байгаа Kubernetes туршилтын дэд бүтцийн дээр төгсгөл хүртэл туршилтын шугам хоолойг барьсан. Эдгээр туршилтууд нь манай бүх кластерт хамаарна. Манай дамжуулах хоолой нь бүтээгдэхүүний кластерын нэг хэсэг болохоосоо өмнө олон засвар хийсэн.

Туршилтын системээс гадна бид системийн бүрэлдэхүүн хэсгүүдийн төлөв байдал, нөөцийн зарцуулалт болон бусад чухал үзүүлэлтүүдийг байнга хянаж байдаг бөгөөд зөвхөн хүний ​​оролцоо шаардлагатай үед бидэнд мэдэгддэг.

Хувилбарууд

Бид мутацийн хандалтын хянагч, загвар систем гэх мэт захиалгат нөөцийн зарим хувилбаруудыг авч үзсэн. Гэсэн хэдий ч тэд бүгд үйл ажиллагааны томоохон бэрхшээлтэй тулгардаг тул бид CRD замыг сонгосон.

Хажуугийн тэрэг, орчны хувьсагч болон бусад ажиллах үеийн дэмжлэгийг нэвтрүүлэхийн тулд мутацийн элсэлтийн хянагчийг ашигласан. Гэсэн хэдий ч CRD-д ийм асуудал гардаггүй нөөцийг холбох, амьдралын мөчлөгийн менежмент гэх мэт янз бүрийн асуудалтай тулгарсан.

Тайлбар: Helm chart гэх мэт загвар системүүд нь ижил төстэй тохиргоотой програмуудыг ажиллуулахад өргөн хэрэглэгддэг. Гэсэн хэдий ч, бидний ажлын програмууд нь загвар ашиглан удирдахад хэтэрхий олон янз байдаг. Мөн тасралтгүй байршуулах үед загваруудыг ашиглахад хэтэрхий олон алдаа гарах болно.

Удахгүй хийх ажил

Одоогоор бид бүх кластерууддаа холимог ачаалалтай ажиллаж байна. Янз бүрийн төрөл, хэмжээтэй ийм үйл явцыг дэмжихийн тулд бид дараахь чиглэлээр ажилладаг.

  • Кластеруудын цуглуулга нь өргөтгөх чадвар, тогтвортой байдлыг хангах үүднээс өөр өөр кластеруудад том програмуудыг түгээдэг.
  • Програмын холболт болон SLA-г бий болгохын тулд кластерын тогтвортой байдал, өргөтгөх чадвар, харагдах байдлыг хангах.
  • Програмууд хоорондоо зөрчилдөхгүй байхын тулд нөөц ба квотыг удирдаж, кластерын цар хүрээг манай талаас хянадаг.
  • Kubernetes дээр програмуудыг дэмжих, байршуулах шинэ CI/CD платформ.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх