Barındırma xərclərinizi optimallaşdırmaq üçün Kubernetes gücündən necə istifadə etmək olar

Son illərdə sənaye daha kiçik və daha fokuslu tətbiqetmələrin inkişafına doğru irəliləyib.

Təəccüblü deyil ki, getdikcə daha çox şirkət kütləvi və statik monolitlərini bir neçə ayrılmış və müstəqil komponentlərə ayırır.

Və haqlı olaraq.

Kiçik xidmətlər bunlardır:

  • Daha sürətli yerləşdirmə - qurduğunuzda və daha kiçik hissələrdə paylaşdığınız zaman
  • təkrarlamaq daha asandır - funksiyalar müstəqil olaraq əlavə olunduqca
  • Arızalı - komponentlərdən biri mövcud olmasa da bütün xidmət fəaliyyətə davam edə bilər

Kiçik xidmətlər məhsul və inkişaf baxımından əladır.

Bəs bu mədəni dəyişiklik infrastrukturu necə təsir edir?

İnfrastrukturun miqyaslı idarə olunması

Belə çıxır ki, bir neçə seyrək tətbiqetmə ilə işləyəndə işlər olduqca asandır.

Onları əllərinizlə saya bilərsiniz və dəstəyə və paylaşmaya həsr etmək üçün çox vaxtınız olacaq.

Böyük bir müəssisədə yüzlərlə tətbiqi idarə etmək çətin olsa da, yenə də həyata keçirilə bilər. Tətbiqləri inkişaf etdirmək, qablaşdırmaq və paylaşmaq üçün ayrılmış bir neçə komandanız var.

Digər tərəfdən daha kiçik komponentlərdən xidmətlər inkişaf etdirmək fərqli bir çətinlik yaradır.

Eyni tətbiqləri hər bir tətbiq üçün dörd komponentdən ibarət bir qrupda yenidən düzəldə bilsəniz, ən azı dörd qat çox tətbiqetmə hazırlamalı, qablaşdırmalı və buraxmalısınız.

Kiçik bir xidmətin bunlar kimi bir çox komponentdən ibarət olması nadir deyil: B. bir ön tətbiq, bir arxa API, bir icazə server, bir administrator tətbiqi və s.

Bir-birinizlə qarşılıqlı əlaqəli xidmətlər inkişaf etdirdiyiniz zaman alt quruluşunuzda bir partlayış meydana gəlir.

Ancaq daha çətin olur.

Yəqin ki, pulunuzu hesablama mənbələrinə sərf edirsiniz

Xidmətlərin əksəriyyəti Amazon EC2, Digital Ocean Droplets və ya Azure Virtual Machines kimi virtual maşınlarda təqdim olunur.

Hər bir virtual maşın yaddaşın bir hissəsini və ona ayrılmış CPU mənbələrini istehlak edən bir əməliyyat sistemi ilə təchiz olunur.

Rəqəmsal Okeanda 1 GB yaddaş və 1 vCPU damcı yaratsanız, əməliyyat sistemi yükünü çıxardıqdan sonra 700 MB yaddaş və 0.8 vCPU istehlak edəcəksiniz.

Başqa sözlə desək, hər beşinci virtual maşın üçün yerüstü xərc tam bir virtual maşına qədər gəlir.

Beşinə pul ödəyirsiniz, ancaq yalnız dördündən istifadə edə bilərsiniz.

Çılpaq metal içində olsanız da qaça bilməzsiniz.

Hələ də xidmətlərinizi baza əməliyyat sistemi vasitəsilə idarə etməlisiniz.

Yaxşı, hər kəs bir əməliyyat sistemi idarə etməlidir - deyirsən.

Və siz haqlısınız.

Lakin, əməliyyat sistemlərinə boş yerə xərclənən pullar aysberqin yalnız zirvəsidir.

Resurs istifadəsi üçün çox pul xərcləyirsiniz

Çox güman ki, xidmətlərinizi daha kiçik hissələrə ayırdığınız zaman hər bir komponentin fərqli qaynaq tələblərinə sahib olduğunu gördünüz.

Veri emalı və məlumat hasilatı tətbiqetmələri kimi bəzi komponentlər CPU sıxdır. Digərləri, məsələn. Məsələn, real vaxt tətbiqetmə serverləri CPU-dan daha çox yaddaş istifadə edə bilər.

Həqiqətən, Amazon Veb Xidmətləri və digər bulud təminatçıları bütün ehtiyaclara uyğun uzun bir məlumat mənbəyi siyahısına sahibdirlər: ümumi məqsəd, CPU optimallaşdırılmış, yaddaş optimallaşdırılmış, yaddaş optimallaşdırılmış və GPU hesablama.

Komponentiniz üçün düzgün virtual maşını istifadə etmək üçün hər cür səy göstərməlisiniz. İdeal olaraq, yaddaş istifadəsi və CPU istifadəsi ilə uyğun olmalıdır.

Java-da yazılmış kritik bir veb komponent üzərində işləyirsiniz?

Bəlkə də hesablama yoğun iş yükləri üçün optimize edilmiş bir c5.4xlarge istifadə etməlisiniz.

Tələbləri nə qədər dəqiq yerinə yetirirsinizsə, mənbələrinizdən bir o qədər yaxşı istifadə edirsiniz.

Ancaq praktikada bu bir az qeyri-adi bir şeydir.

Bir c5.2xlarge və ya c5.4xlarge istifadə etməlisiniz?

Növbəti səviyyə (8 vCPU və 16 GB yaddaş) fərq yaradır?

Vaxtın 80% -i qədər yaxşı olan bir neçə kompüter profilini seçmək və bütün komponentləriniz üçün istifadə etmək daha asandır.

Hər iş yükü üçün eyni virtual maşından istifadə etməyin nə pisliyi var?

Hər bir komponenti 2 GB RAM və vCPU hesablama qabiliyyətinə yığmaq istəsəniz heç bir şey yoxdur.

Komponentiniz yalnız 1 GB yaddaşla işləyə bilsə belə.

Bəli, gələcəkdə optimallaşdırmaq olar.

Ancaq dürüst olaq: ​​sürüş zamanı təkər dəyişdirməyə bənzəyir.

Sistemin optimallaşdırılması üçün çox səy sərf etdiniz, yalnız tətbiqin yenidən dəyişdiyini və yenidən başlamalı olduğunuzu tapmaq üçün.

Beləliklə, nəticədə yeganə həssas seçiminiz var: kiçik, orta və böyük bir virtual maşın profili seçin və bütün iş yükləri üçün istifadə edin.

Yüzlərlə meqabayt RAM və bir çox CPU dövrü sərf etməklə yaşamaq lazımdır.

Özünüzü yaxşı hiss etdiyiniz zaman, oxşar səmərəsizliklərdən əziyyət çəkən bir çox şirkət var.

Bəziləri ayrılmış mənbələrin yalnız 10% -dən istifadə edirlər.

Amazon'da EC2 nümunələrində 1000 dollar ödəyirsiniz, yalnız 100 dollar istifadə edirsiniz.

Bu, büdcənizi xərcləməyin ən yaxşı yolu kimi görünmür.

İstifadə etmədiyiniz mənbələr üçün pulunuzu geri almalısınız.

Bəs bu tələblər niyə onsuz da bu qədər fərqlidir?!

Doğru aləti seçmək xeyirdən daha çox zərər verir

Geliştiricilərə iş üçün uyğun alətdən istifadə etmək azadlığı verildikdə, ümumiyyətlə vəhşiləşirlər.

Ön uc üçün Node.js, arxa API üçün Spring Boot, arxa plan işlərinin işlənməsi üçün Flask və Kereviz, müştəri tərəf üçün React.js.

İnfrastruktur yüzlərlə tətbiqetmənin tamamilə fərqli iş vaxtlarında icra olunduğu bir tema parkına çevrilir.

İş üçün uyğun texnologiyaya sahib olmaq daha yüksək iterasiya sürətinə imkan verir, lakin ümumiyyətlə başqa bir proqramlaşdırma dilini qorumaq üçün əlavə yüklə gəlir.

Praktikada alətlərin və dillərin yayılmasını azaltmaq daha çətindir.

Eyni JVM işləmə müddətini istifadə edən iki tətbiq fərqli asılılıq və kitabxanalara ehtiyac duya bilər.

Görüntülərin ölçüsünü dəyişdirmək üçün ImageMagick-ə etibar edə bilərsiniz.

Digəri, yolunda mövcud olan PhantomJS və ya ZeroMQ kimi ikili bir fayla etibar edir.

Bu asılılıqları tətbiqetmə ilə bağlamalısınız.

Beləliklə, eyni, lakin təbiətdə fərqli olan onlarla konfiqurasiya ilə başa çatırsınız.

İnfrastrukturu bir fikir olaraq düşünməməlisən. Bağımlılığınıza başlanğıcdan baxmalı və tətbiqi inkişaf etdirdiyiniz zaman paketləşdirməlisiniz.

İdeal olaraq, komponentinizi tək bir paket kimi idarə etmək üçün lazım olan bütün hissələri arxivləşdirməlisiniz.

Bağımlılıkları izləmək üçün bir buraxılışdan bir az əvvəl itirməyi dayandırın.

Bəli, demək daha asan deyildi.

Və ya bəlkə də deyil.

Konteynerlərin göndərilməsindən borc alınması

İnformasiya texnologiyaları eyni problemlə üzləşən yeganə sahə deyil.

Malları ayrı-ayrılıqda saxlamağınız lazım olduqda, malların dünyanın dörd bir tərəfində daşınması çətindir.

Təsəvvür edin ki, gözləmədə hər cür forma və ölçüdə minlərlə qutu var. Boşaltma zamanı heç bir əşyanı qaçırmaq istəmədiyiniz üçün əşyaları qablaşdırmağınıza daha diqqətli olmalısınız.

Yük sənayesi bir həll yolu tapdı: qablar.

Yük şirkəti heç bir mal daşımır. Konteynerləri gəmiyə göndərir.

Bütün mallarınızı təhlükəsiz göndərmək istəyirsiniz? Onları bir qaba qoyun. Konteyner boşaldıldıqda, hər şeyin yanında olmağınıza zəmanət verilir.

Eyni prinsipi tətbiqlərinizə tətbiq edə bilərsiniz.

Tətbiqinizi və bütün asılılıqlarını etibarlı şəkildə yerləşdirmək istəyirsiniz?

Onları bir Linux qabına qoyun.

Linux konteyner bir yük konteynerinə bənzəyir, ancaq prosesinizi idarə etmək üçün lazım olan bütün faylları, ikili sənədləri və kitabxanaları əhatə edir.

Bu virtual maşınlara bənzəmir?

Pəhrizdə olan virtual maşınlar

Uzaqdan baxıldığında, virtual maşınlar konteynerlərə bənzəyir.

Tətbiqi və konteynerlər kimi asılılıqlarını əhatə edirlər.

Bununla birlikdə, virtual maşınlar yavaş-yavaş işə salınır, ümumiyyətlə daha böyükdür və öyrəndiyiniz kimi, qaynaq israfıdır.

Əslində tətbiqetmənizi işə salmaq üçün sabit bir miqdarda CPU və yaddaş ayırmanız lazımdır.

Həm də avadanlıqları təqlid etməli və özləri ilə bir əməliyyat sisteminin əlavə baqajını gətirməlidirlər.

Digər tərəfdən Linux konteynerləri, yalnız ev sahibinizdə işləyən proseslərdir.

Əslində, eyni əməliyyat sistemində və serverdə həmin hostda onlarla konteyner işləyə bilər.

Proseslər eyni kompüterdə işləsə də, bir-birini görə bilmirlər.

Konteynerlərdə işləyən tətbiqetmələr tamamilə təcrid olunur və virtual maşınla konteyner arasındakı fərqi ayırd edə bilmir.

Bu əla xəbər!

Linux qabları sanal maşınlar kimidir, lakin daha səmərəlidir.

Bəs bu Linux konteynerləri əslində nədən ibarətdir?

Linux qabları üstünlükləri ilə təcrid olunmuş proseslərdir

Konteynerlərin sehri Linux nüvəsindəki iki xüsusiyyətə əsaslanır: idarəetmə qrupları və ad boşluqları.

Nəzarət qrupları, müəyyən bir prosesin istifadə edə biləcəyi CPU və ya yaddaşı məhdudlaşdırmaq üçün əlverişli bir yoldur.

Nümunə olaraq deyə bilərsiniz ki, komponentiniz yalnız 2 GB yaddaş və dörd CPU nüvənizdən birini istifadə etməlidir.

Digər tərəfdən, ad sahələri prosesi təcrid etmək və görmə qabiliyyətini məhdudlaşdırmaqdan məsuldur.

Komponent yalnız onunla birbaşa əlaqəli olan şəbəkə paketlərini görə bilər. Şəbəkə adapterindən axan bütün şəbəkə paketləri görünmür. Nəzarət qrupları və ad boşluqları sadə əsas elementlərdir.

Vaxt keçdikcə, inkişaf etdiricilər bu kernel funksiyalarının idarə olunmasını asanlaşdırmaq üçün getdikcə daha çox abstraksiya səviyyəsi yaratdılar.

İlk abstraktlardan biri LXC idi, amma əsl müqavilə 2013-cü ildə çıxan Docker idi.

Docker yalnız yuxarıda qeyd olunan kernel funksiyalarını özetləşdirməklə kifayətlənmir, həm də işləmək xoşdur.

Docker konteynerinin işlənməsi aşağıdakı kimidir:

Docker səni idarə edir çıxdı

Və bütün konteynerlər standart bir interfeys tətbiq etdiyindən, eyni əmrlə başqa bir konteyner işlədə bilərsiniz:

Docker MySQL ilə işləyir

Və bir MySQL verilənlər bazanız var.

Tətbiqin portativliyi və proseslərin yaradılması və işlədilməsi üçün standart bir interfeys konteynerləri bu qədər populyar edən şeydir.

Konteynerlər əladır!

  • Onlarla əməliyyat sistemi işlədən pula qənaət etdiniz
  • Portativ vahidlər kimi paketlənmiş tətbiqetmələriniz var
  • Müxtəlif qablarınız var

Sanki qablar bütün problemləri həll etməyib.

Konteynerləri idarə etmək üçün bir yola ehtiyacınız var.

Ölçmək üçün hazırlanmış qabları idarə edin

Yüzlərlə, hətta minlərlə konteyneriniz varsa, eyni serverdə birdən çox konteyner işlədən bir yol tapmalısınız. Konteynerlərin bir çox server arasında paylanmasını da planlaşdırmalısınız.

Bu, yükü bir çox qovşaqda paylamağa və tək bir uğursuzluğun bütün xidmətin aşağı düşməsinə səbəb olmasına imkan verir.

Hər bir konteynerin infrastrukturunuzda harada yerləşdiyini izləmək üçün vaxtınızdan ən yaxşı şəkildə istifadə etmək kimi görünmür.

Bəlkə bunu avtomatlaşdırmağın bir yolu var?

Və bu konteynerləri harada yerləşdirəcəyinə qərar verən bir alqoritmə sahib olsaydınız?

Bəlkə də bu, server sıxlığını maksimuma çatdırmaq üçün konteynerləri səmərəli şəkildə qablaşdırmağın ağıllı yolu ola bilər. Yerləşdirilmiş konteynerlərin və onların sahiblərinin siyahısını saxlaya bilərsiniz.

Belə çıxır ki, kiminsə tam olaraq bu fikri var və bir həll yolu tapıb.

Kubernetes, güclü konteyner orkestrası

Kubernetes əvvəlcə bir Google yaradıcılığı idi.

Konteynerlərə bənzər bir texnologiyadan istifadə edərək, Google-a iş yüklərini planlaşdırmağın təsirli bir yolunu tapmaq lazım idi.

Konteynerlərin və serverlərin uzun bir siyahısını saxlamaq və onları əl ilə yeniləmək istəmədiniz. Bu səbəbdən qaynaq istifadəsini, planlarını və konteynerlərini avtomatik olaraq təhlil edən bir platforma yazmağa qərar verdilər.

Ancaq qapalı bir qaynaq idi.

Bir neçə Google işçisi platformanı açıq mənbəli səy olaraq yenidən yazmağa qərar verdi. Qalanları tarixdir.

Kubernetes nədir?

Kubernetes'i bir planlaşdırıcı kimi düşünə bilərsiniz.

Kubernetes infrastrukturunuzu yoxlayır (açıq metal və ya bulud, ümumi və ya özəl) və hər bir kompüter üçün CPU və yaddaşı ölçür.

Bir qabın hazırlanmasını tələb etdiyiniz zaman, Kubernetes konteynerinizin saxlama tələblərini müəyyənləşdirir və tələbinizə cavab verən ən yaxşı serveri tapır.

Tətbiqin harada yerləşdiriləcəyinə qərar vermirsiniz. Məlumat mərkəzi sizdən uzaqlaşdırılır.

Başqa sözlə, Kubernetes altyapınızla Tetris oynayır.

Docker konteynerləri bloklar, serverlər lövhələr və Kubernetes oyunçudur.

Kubernetes infrastrukturunuzu səmərəli şəkildə paketlədikdə, pulunuz üçün daha çox hesablama gücü əldə edirsiniz. Daha az şeylə çox şey əldə etmək olar.

Və nəticədə ümumi faktura istifadəniz azalmalıdır.

Unutmayın ki, şirkətlər ayrılmış mənbələrin yalnız 10% -dən istifadə edirlər?

Yaxşı, Kubernetes gününüzü qurtardı.

Ancaq daha çox şey var.

Kubernetes, ümumiyyətlə unudulan və ya atılan bir qatil funksiyasına malikdir.

Kubernetes, məlumat mərkəzinizin üstündəki bir API qatı olaraq

Kubernetesdə etdiyiniz hər şey sizdən bir API zəngidir.

Bir konteyner verməyiniz lazımdır? Bunun üçün bir REST son nöqtəsi var.

Bəlkə bir yük balanslaşdırıcısı yerləşdirmək istəyirsiniz? Problem deyil. Sadəcə bu API-yə zəng edin.

Anbar təmin etmək istəyirsiniz? Xahiş edirəm bu URL-ə bir POST sorğusu göndərin.

Kubernetesdə etdiyiniz hər şey API çağırır.

Buna görə xoşbəxt olmaq üçün çox yaxşı səbəblər var:

  • Proqramla API ilə qarşılıqlı əlaqəli skriptlər və daemonlar yarada bilərsiniz
  • API versiyalanmışdır. Kümeninizi yüksəltsəniz, hələ də köhnə API istifadə edə və tədricən köç edə bilərsiniz
  • Kubernetes'i istənilən bulud provayderinə və ya məlumat mərkəzinə qura və eyni API-dən istifadə edə bilərsiniz

Kubernetes'i altyapınızın üstündəki bir qat kimi düşünə bilərsiniz.

Və bu səviyyə hər yerdə quraşdırıla bilən ümumi bir səviyyə olduğundan istədiyiniz zaman özünüzlə götürə bilərsiniz.

Amazon Veb Xidmətləri çox bahadır?

Problem deyil.

Kubernetes'i Google Cloud Platform-a yükləyə və iş yüklərinizi orada köçürə bilərsiniz.

Yoxsa hər ikisini də saxlaya bilərsiniz, çünki yüksək mövcudluq strategiyası həmişə faydalıdır.

Amma bəlkə də inanmırsan

Doğru olmaq çox yaxşıdır və tüstü və güzgü satıram.

Sizə göstərim

Bulud hesabınızdakı Kubernetes ilə qeyd edin

Netlify, statik veb saytlar yaratmaq, yerləşdirmək və idarə etmək üçün bir platformadır.

Öz CI boru kəmərinə malikdir, beləliklə anbarda hər dəfə dəyişiklik etdiyiniz zaman veb saytınız yenidən qurulacaqdır.

Netlify, istifadəçi bazasını iki qat artıraraq Kubernetesə köçə bildi, lakin xərcləri dəyişmədən saxladı.

Bu əla xəbər!

Google Cloud Platform hesabınıza% 50 qənaət etdiyinizi düşünün!

Ancaq Netlify tək deyil.

Qbox - barındırılan elastik axtarışa yönəlmiş bir şirkət - yenə də AWS hesablarına ayda 50% qənaət edə bildi!

Çox buludlu əməliyyatdakı səylərini də açıqladılar.

Hələ də təsirlənməsəniz, OpenAI mətbuatına baxın.

OpenAI, süni zəka və maşın öyrənməyə yönəlmiş bir qeyri-kommersiya tədqiqat şirkətidir. Hər hansı bir insan oyunçusu kimi çox oyunçu onlayn oyun Dota oynamaq üçün bir alqoritm yazdılar.

Ancaq bir addım irəli getdilər və birlikdə oynamaq üçün maşın qrupu hazırladılar.

Kubernetes ilə buludda maşın öyrənmə modellərini miqyasladılar.

Klasterinizin təfərrüatlarını merak edirsiniz?

128000 vCPU

Bu təxminən 16,000 MacBook Pros.

256 Nvidia Tesla P100

Bu, 2100 teraflops 16 bitlik üzən nöqtə performansıdır.

525 PlayStation 4s ilə eyni.

Saatlıq xərcləri təxmin edə bilərsinizmi?

Yox?

128.000 vCPU üçün saatda yalnız 1280 dollar və 256 Nvidia P100 üçün 400 dollar.

Dota turnirlərini qazanaraq milyonlarla dollarlıq mükafat qazana biləcəyinizi düşündüyünüz zaman bu çox deyil.

Yaxşı nə gözləyirsiniz?

Kubernetes-i buraxmağa və bulud hesabınıza qənaət etməyə hazır olun!

Son qeydlər

Kubernetes və konteynerlər qalmaq üçün burada.

Google, Microsoft, Red Hat, Pivotal, Oracle, IBM və başqaları kimi şirkətlərin dəstəyi ilə şirkətin onu tutmayacağına inanmaq çətindir.

Bir çox şirkət Kubernetes-i qabaqlayır və inqilaba qoşulur.

Yalnız startap və KOM-lar deyil, banklar, maliyyə qurumları və sığorta şirkətləri kimi böyük şirkətlər də gələcəyin konteynerlərinə və Kubernetesinə etibar edirlər.

Hətta şirkətlər Əşyaların İnterneti və daxili sistemlərə investisiya yatırmışlar.

Yeni başlayır və cəmiyyətin yetişməyə vaxtı var, ancaq bu sahədə yeniliyə diqqət yetirməlisiniz.

Bu uşaqlar!

Andy Griffiths, John Topley və Walter Miani'ye bu yazının bir taslağını oxuduğuna və əvəzsiz təkliflər verdiyinə görə təşəkkür edirəm.

Bu məqalədən xoşunuz gəlsə, aşağıdakılarla maraqlana bilərsiniz:

  • Windows 10-da Docker və Kubernetes ilə işə başlamaq, əllərinizi çirkləndirmək və Windows mühitinizdə Docker və Kubernetes quraşdırmaqdır.
  • Kiçik Docker şəkilləri üçün 3 asan fənd. Docker şəkillərinin böyük olması lazım deyil. Docker Şəkillərinizi Pəhrizə necə qoyacağınızı öyrənin!

Proqramların Kubernetes-də yerləşdirilməsi və miqyaslandırılması sahəsində mütəxəssis olun

Praktiki kurslarımıza başlayın və buludda miqyaslanmağa necə yiyələnəcəyinizi öyrənin.

Necə edəcəyinizi öyrənin:

  • Ən çox ziyarət edilən veb saytları tər tökmədən idarə edin
  • İşlərinizi minlərlə serverdə miqyaslandırın və gözləmə müddətlərini günlərdən dəqiqələrə endirin
  • Tətbiqlərinizin çox buludlu bir quraşdırma ilə son dərəcə əlçatan olmasının rahatlığını təmin edin
  • Yalnız ehtiyacınız olan mənbələrdən istifadə edərək bulud hesabınıza tonlarla pul qazanın
  • Dağıtım boru kəmərinizi genişləndirin və tətbiqləri 7/24 yerləşdirin

Kubernetes-də bir mütəxəssis ol →

Məqalə əvvəlcə learnk8s.io saytında yayımlandı