Pinterest-də kubernetes platformasının yaradılması

Bu illər ərzində Pinterest-in 300 milyon istifadəçisi 200 milyarddan çox lövhədə 4 milyarddan çox pin yaradıb. Bu istifadəçilər ordusuna və geniş məzmun bazasına xidmət etmək üçün portal bir neçə CPU tərəfindən idarə oluna bilən mikroservislərdən tutmuş virtual maşınların bütün parkında işləyən nəhəng monolitlərə qədər minlərlə xidmət hazırlayıb. Və sonra şirkətin gözləri k8-lərə düşdü. Niyə "kub" Pinterest-də yaxşı görünürdü? Bu barədə ən son məqaləmizin tərcüməsindən öyrənəcəksiniz blog Pinterest mühəndisliyi.

Pinterest-də kubernetes platformasının yaradılması

Beləliklə, yüz milyonlarla istifadəçi və yüz milyardlarla pin. Bu istifadəçilər ordusuna və geniş məzmun bazasına xidmət etmək üçün biz bir neçə CPU tərəfindən idarə oluna bilən mikroservislərdən tutmuş virtual maşınların bütün donanmalarında işləyən nəhəng monolitlərə qədər minlərlə xidmət hazırlamışıq. Bundan əlavə, CPU, yaddaş və ya I/O çıxışı tələb edə bilən müxtəlif çərçivələrimiz var.

Bu zooparkın saxlanması zamanı inkişaf qrupu bir sıra problemlərlə üzləşir:

  • Mühəndislər üçün istehsal mühitini idarə etmək üçün vahid üsul yoxdur. Vətəndaşlığı olmayan xidmətlər, Dövlət xidmətləri və aktiv inkişafda olan layihələr tamamilə fərqli texnologiya yığınlarına əsaslanır. Bu, mühəndislər üçün bütöv bir hazırlıq kursunun yaradılmasına gətirib çıxardı, həm də bizim infrastruktur komandamızın işini ciddi şəkildə çətinləşdirir.
  • Öz virtual maşın parkına malik tərtibatçılar daxili idarəçilər üçün böyük yük yaradırlar. Nəticədə, OS və ya AMI-nin yenilənməsi kimi sadə əməliyyatlar həftələr və aylar çəkir. Bu, tamamilə gündəlik vəziyyətlərdə iş yükünün artmasına səbəb olur.
  • Mövcud həllərin üstünə qlobal infrastruktur idarəetmə vasitələrinin yaradılmasında çətinliklər. Virtual maşınların sahiblərini tapmaq asan olmadığı üçün vəziyyəti daha da mürəkkəbləşdirir. Yəni biz bilmirik ki, bu potensial infrastrukturumuzun digər hissələrində işləmək üçün təhlükəsiz şəkildə çıxarıla bilərmi?

Konteyner orkestri sistemləri iş yükünün idarə edilməsini birləşdirən bir yoldur. Onlar artan inkişaf sürətinə qapı açır və infrastrukturun idarə edilməsini sadələşdirir, çünki layihədə iştirak edən bütün resurslar bir mərkəzləşdirilmiş sistem tərəfindən idarə olunur.

Pinterest-də kubernetes platformasının yaradılması

Şəkil 1: İnfrastruktur prioritetləri (etibarlılıq, developer məhsuldarlığı və səmərəlilik).

Pinterest-dəki Bulud İdarəetmə Platforması komandası K8-ləri 2017-ci ildə kəşf etdi. 2017-ci ilin birinci yarısına qədər biz API və bütün veb serverlərimiz də daxil olmaqla istehsal imkanlarımızın əksəriyyətini sənədləşdirdik. Daha sonra biz konteyner həllərinin təşkili, klasterlərin qurulması və onlarla işləmək üçün müxtəlif sistemlərin hərtərəfli qiymətləndirilməsini apardıq. 2017-ci ilin sonuna yaxın biz Kubernetes-dən istifadə etmək qərarına gəldik. O, olduqca çevik idi və tərtibatçılar cəmiyyətində geniş şəkildə dəstəklənirdi.

Bu günə qədər biz Kops-a əsaslanan öz klaster yükləmə alətlərimizi qurmuşuq və şəbəkə, təhlükəsizlik, ölçülər, giriş, şəxsiyyətin idarə edilməsi və trafik kimi mövcud infrastruktur komponentlərini Kubernetes-ə köçürdük. Biz həmçinin resursumuz üçün iş yükünün modelləşdirilməsi sistemini tətbiq etdik, onun mürəkkəbliyi tərtibatçılardan gizlədilib. İndi biz klasterin sabitliyini təmin etməyə, onun miqyasını genişləndirməyə və yeni müştəriləri birləşdirməyə diqqət yetirmişik.

Kubernetes: Pinterest Yolu

Mühəndislərimizin sevəcəyi bir platforma olaraq Pinterest miqyasında Kubernetes ilə işə başlamaq bir çox çətinliklərlə üzləşdi.

Böyük bir şirkət olaraq biz infrastruktur alətlərinə böyük sərmayə qoymuşuq. Nümunələr arasında sertifikatın işlənməsi və açar paylanması ilə məşğul olan təhlükəsizlik alətləri, trafikə nəzarət komponentləri, xidmət kəşf sistemləri, görünmə komponentləri, jurnal və ölçülərin göndərilməsi komponentləri daxildir. Bütün bunlar bir səbəbə görə toplandı: biz normal sınaq və səhv yolundan keçdik və buna görə də köhnə təkəri yeni platformada ixtira etmək əvəzinə bütün bu avadanlıqları Kubernetes-də yeni infrastruktura inteqrasiya etmək istədik. Bu yanaşma ümumilikdə miqrasiyanı sadələşdirdi, çünki bütün proqram dəstəyi artıq mövcuddur və onu sıfırdan yaratmaq lazım deyil.

Digər tərəfdən, Kubernetes-in özündə yük proqnozlaşdırma modelləri (məsələn, yerləşdirmələr, iş yerləri və Daemon dəstləri) layihəmiz üçün kifayət deyil. Bu istifadə problemləri Kubernetes-ə keçmək üçün böyük maneələrdir. Məsələn, xidmət tərtibatçılarının çatışmayan və ya səhv giriş parametrlərindən şikayət etdiklərini eşitmişik. Eyni spesifikasiya və tapşırıqla yüzlərlə nüsxə yaradılarkən şablon mühərriklərinin düzgün istifadə edilməməsi ilə də qarşılaşdıq ki, bu da kabuslu sazlama problemləri ilə nəticələndi.

Eyni klasterdə müxtəlif versiyaları saxlamaq da çox çətin idi. Bütün problemləri, səhvləri və yeniləmələri ilə eyni işləmə mühitinin birdən çox versiyasında eyni vaxtda işləmək lazımdırsa, müştəri dəstəyinin mürəkkəbliyini təsəvvür edin.

Pinterest İstifadəçi Xüsusiyyətləri və Nəzarətçilər

Mühəndislərimizin Kubernetes tətbiqini asanlaşdırmaq və infrastrukturumuzu sadələşdirmək və sürətləndirmək üçün biz öz fərdi resurs təriflərimizi (CRD) hazırlamışıq.

CRD-lər aşağıdakı funksiyaları təmin edir:

  1. Fərqli yerli Kubernetes resurslarını birləşdirmək ki, onlar vahid iş yükü kimi işləyirlər. Məsələn, PinterestService resursuna yerləşdirmə, giriş xidməti və konfiqurasiya xəritəsi daxildir. Bu, tərtibatçılara DNS quraşdırmaqdan narahat olmamağa imkan verir.
  2. Lazımi proqram dəstəyini həyata keçirin. İstifadəçi öz biznes məntiqinə uyğun olaraq yalnız konteyner spesifikasiyasına diqqət yetirməlidir, CRD nəzarətçisi isə bütün lazımi başlanğıc konteynerlərini, mühit dəyişənlərini və pod spesifikasiyalarını həyata keçirir. Bu, tərtibatçılar üçün əsaslı şəkildə fərqli bir rahatlıq səviyyəsini təmin edir.
  3. CRD kontrollerləri həmçinin yerli resursların həyat dövrünü idarə edir və debug əlçatanlığını yaxşılaşdırır. Bura arzu olunan və faktiki spesifikasiyaların uzlaşdırılması, CRD statusunun yenilənməsi və hadisə qeydlərinin saxlanması və s. daxildir. CRD olmasaydı, tərtibatçılar çoxlu resursları idarə etməyə məcbur olardılar ki, bu da yalnız səhv ehtimalını artırar.

PinterestService və nəzarətçimiz tərəfindən idarə olunan daxili resurs nümunəsi:

Pinterest-də kubernetes platformasının yaradılması

Yuxarıda gördüyünüz kimi, fərdi konteyneri dəstəkləmək üçün təhlükəsizlik, görünürlük və şəbəkə trafikini təmin etmək üçün başlanğıc konteynerini və bir neçə əlavələri birləşdirməliyik. Bundan əlavə, biz konfiqurasiya xəritəsi şablonları yaratdıq və toplu işlər üçün PVC şablonları üçün dəstəyi həyata keçirdik, həmçinin şəxsiyyəti, resurs istehlakını və zibil yığılmasını izləmək üçün çoxlu mühit dəyişənlərinin izlənilməsini həyata keçirdik.

Təsəvvür etmək çətindir ki, tərtibatçılar bu konfiqurasiya fayllarını CRD dəstəyi olmadan əl ilə yazmaq istəyəcəklər, nəinki konfiqurasiyaları daha da saxlamaq və sazlamaq.

Tətbiqin yerləşdirilməsi iş axını

Pinterest-də kubernetes platformasının yaradılması

Yuxarıdakı şəkil Pinterest xüsusi resursunu Kubernetes klasterinə necə yerləşdirməyi göstərir:

  1. Tərtibatçılar CLI və istifadəçi interfeysi vasitəsilə Kubernetes klasterimizlə qarşılıqlı əlaqə qururlar.
  2. CLI/UI alətləri Artifactory-dən iş axını konfiqurasiyası YAML fayllarını və digər qurma xüsusiyyətlərini (eyni versiya ID) əldə edir və sonra onları İş Təqdimetmə Xidmətinə təqdim edir. Bu addım klasterə yalnız istehsal versiyalarının çatdırılmasını təmin edir.
  3. JSS Kubernetes də daxil olmaqla müxtəlif platformalar üçün giriş qapısıdır. Burada istifadəçinin autentifikasiyası aparılır, kvotalar verilir və CRD-mizin konfiqurasiyası qismən yoxlanılır.
  4. JSS tərəfində CRD yoxlanıldıqdan sonra məlumat k8s platforma API-yə göndərilir.
  5. CRD nəzarətçimiz bütün istifadəçi resurslarında hadisələrə nəzarət edir. O, CR-ləri yerli k8s resurslarına çevirir, lazımi modulları əlavə edir, uyğun mühit dəyişənlərini təyin edir və konteynerləşdirilmiş istifadəçi proqramlarının kifayət qədər infrastruktur dəstəyinə malik olmasını təmin etmək üçün digər dəstək işlərini yerinə yetirir.
  6. Daha sonra CRD nəzarətçisi qəbul edilmiş məlumatları Kubernetes API-yə ötürür ki, onlar planlaşdırıcı tərəfindən emal olunsun və istehsala buraxılsın.

Qeyd: Bu yerləşdirmənin buraxılışdan əvvəl iş axını yeni k8s platformasının ilk istifadəçiləri üçün yaradılmışdır. Hazırda yeni CI/CD ilə tam inteqrasiya etmək üçün bu prosesi təkmilləşdirmə prosesindəyik. Bu o deməkdir ki, biz sizə Kubernetes ilə bağlı hər şeyi deyə bilmərik. “Pinterest üçün CI/CD platformasının qurulması” adlı növbəti bloq yazımızda təcrübəmizi və komandanın bu istiqamətdə irəliləyişlərini bölüşməyi səbirsizliklə gözləyirik.

Xüsusi resursların növləri

Pinterest-in xüsusi ehtiyaclarına əsaslanaraq, biz müxtəlif iş axınlarına uyğun olaraq aşağıdakı CRD-ləri hazırlamışıq:

  • PinterestService uzun müddətdir fəaliyyət göstərən vətəndaşlığı olmayan xidmətlərdir. Əsas sistemlərimizin çoxu belə xidmətlər toplusuna əsaslanır.
  • PinterestJobSet modelləri tam dövrəli toplu işləri. Pinterest-də ümumi bir ssenari, digər oxşar proseslərdən asılı olmayaraq, bir neçə işin eyni konteynerləri paralel olaraq idarə etməsidir.
  • PinterestCronJob kiçik dövri yüklərlə birlikdə geniş istifadə olunur. Bu, təhlükəsizlik, trafik, qeydlər və ölçülərə cavabdeh olan Pinterest dəstək mexanizmləri ilə yerli cron işi üçün sarğıdır.
  • PinterestDaemon-a Daemon infrastrukturu daxildir. Biz qruplarımıza daha çox dəstək əlavə etdikcə bu ailə böyüməyə davam edir.
  • PinterestTrainingJob Tensorflow və Pytorch proseslərinə qədər uzanır və bütün digər CRD-lər kimi eyni səviyyədə iş vaxtı dəstəyi təmin edir. Pinterest Tensorflow və digər maşın öyrənmə sistemlərindən fəal şəkildə istifadə etdiyinə görə, onların ətrafında ayrıca CRD qurmaq üçün səbəbimiz var idi.

Biz həmçinin PinterestStatefulSet üzərində işləyirik, bu da tezliklə məlumat anbarları və digər statuslu sistemlər üçün uyğunlaşdırılacaq.

İş vaxtı dəstəyi

Tətbiq podu Kubernetes-də işləyərkən avtomatik olaraq özünü tanımaq üçün sertifikat alır. Bu sertifikat məxfi yaddaşa daxil olmaq və ya mTLS vasitəsilə digər xidmətlərlə əlaqə saxlamaq üçün istifadə olunur. Eyni zamanda, Konteyner Başlatma Konfiquratoru və Daemon konteynerləşdirilmiş tətbiqi işə salmazdan əvvəl bütün lazımi asılılıqları endirəcək. Hər şey hazır olduqda, trafik yan arabası və Daemon modulun IP ünvanını Zookeeper-də qeydiyyatdan keçirəcək ki, müştərilər onu kəşf edə bilsinlər. Bütün bunlar işləyəcək, çünki proqram işə salınmazdan əvvəl şəbəkə modulu konfiqurasiya edilib.

Yuxarıdakılar iş yükləri üçün iş vaxtı dəstəyinin tipik nümunələridir. Digər növ iş yükləri bir qədər fərqli dəstək tələb edə bilər, lakin onların hamısı pod səviyyəli yan arabalar, node səviyyəli və ya virtual maşın səviyyəli Daemonlar şəklində gəlir. Biz bütün bunların idarəetmə infrastrukturu daxilində yerləşdirilməsini və tətbiqlər arasında ardıcıl olmasını təmin edirik ki, bu da son nəticədə texniki iş və müştəri dəstəyi baxımından yükü əhəmiyyətli dərəcədə azaldır.

Test və QA

Mövcud Kubernetes test infrastrukturunun üstündə uçdan-uca sınaq kəməri qurduq. Bu testlər bütün klasterlərimizə aiddir. Bizim boru kəmərimiz məhsul klasterinin bir hissəsinə çevrilməmişdən əvvəl bir çox dəyişikliklərdən keçmişdir.

Test sistemlərinə əlavə olaraq, sistem komponentlərinin vəziyyətini, resurs sərfiyyatını və digər mühüm göstəriciləri daim izləyən, yalnız insan müdaxiləsi lazım olduqda bizi xəbərdar edən monitorinq və xəbərdarlıq sistemlərimiz var.

Alternativlər

Biz mutasiyaya giriş nəzarətçiləri və şablon sistemləri kimi fərdi resurslara bəzi alternativlərə baxdıq. Bununla belə, onların hamısı əhəmiyyətli əməliyyat problemləri ilə üzləşir, ona görə də biz CRD marşrutunu seçdik.

Yan arabaları, ətraf mühit dəyişənlərini və digər iş vaxtı dəstəyini təqdim etmək üçün mutasiya qəbulu nəzarətçisi istifadə edilmişdir. Bununla belə, o, CRD-də belə problemlərin yaranmadığı resursların bağlanması və həyat dövrünün idarə edilməsi kimi müxtəlif problemlərlə üzləşdi.

Qeyd: Helm diaqramları kimi şablon sistemləri də oxşar konfiqurasiyalı proqramları işə salmaq üçün geniş istifadə olunur. Bununla belə, iş proqramlarımız şablonlardan istifadə etməklə idarə oluna bilməyəcək qədər müxtəlifdir. Həmçinin davamlı yerləşdirmə zamanı şablonlardan istifadə zamanı çoxlu səhvlər olacaq.

Qarşıdan gələn iş

Hazırda bütün klasterlərimizdə qarışıq yüklə qarşılaşırıq. Müxtəlif növ və ölçülərdə bu cür prosesləri dəstəkləmək üçün biz aşağıdakı sahələrdə işləyirik:

  • Klasterlər toplusu genişlənmə və sabitlik üçün müxtəlif klasterlər arasında böyük tətbiqləri paylayır.
  • Tətbiq bağlantısı və SLA-lar yaratmaq üçün klaster sabitliyini, miqyaslılığını və görünmə qabiliyyətini təmin etmək.
  • Tətbiqlərin bir-biri ilə ziddiyyət təşkil etməməsi üçün resursları və kvotaları idarə etmək və klasterin miqyasına bizim tərəfimizdən nəzarət etmək.
  • Kubernetes-də tətbiqləri dəstəkləmək və yerləşdirmək üçün yeni CI/CD platforması.

Mənbə: www.habr.com

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