Kubernetes işçi qovşaqları: bir çox kiçik və ya bir neçə böyük?

Kubernetes işçi qovşaqları: bir çox kiçik və ya bir neçə böyük?
Kubernetes klasterini yaratarkən suallar yarana bilər: neçə işçi qovşağı konfiqurasiya edilməlidir və hansı növ? Yerli klaster üçün hansı daha yaxşıdır: bir neçə güclü server almaq və ya məlumat mərkəzinizdə onlarla köhnə maşından istifadə etmək? Buludda səkkiz tək nüvəli və ya iki dördnüvəli nümunə götürmək daha yaxşıdır?

Bu sualların cavabları məqalədə var. Daniel Weibel, proqram mühəndisi və Learnk8s təhsil layihəsinin müəllimi əmrin tərcüməsində Mail.ru-dan Kubernetes aaS.

Klaster tutumu

Ümumiyyətlə, Kubernetes klasterini böyük “supernode” kimi təsəvvür etmək olar. Onun ümumi hesablama gücü bütün tərkib qovşaqlarının səlahiyyətlərinin cəmidir.

İstədiyiniz klaster tutumu hədəfinə çatmağın bir neçə yolu var. Məsələn, bizə ümumi tutumu 8 prosessor nüvəsi və 32 GB RAM olan klaster lazımdır, çünki bir sıra proqramlar çoxlu resurs tələb edir. Sonra 16 GB yaddaşa malik iki qovşaq və ya 8 GB yaddaşa malik dörd qovşaq, iki dördnüvəli prosessor və ya dörd iki nüvəli olanlar quraşdıra bilərsiniz.

Klaster yaratmağın yalnız iki yolu var:

Kubernetes işçi qovşaqları: bir çox kiçik və ya bir neçə böyük?
Hər iki variant eyni tutumlu klaster istehsal edir, lakin alt konfiqurasiyada dörd kiçik qovşaq, yuxarı konfiqurasiyada isə iki böyük qovşaq var.

Hansı variant daha yaxşıdır?

Bu suala cavab vermək üçün hər iki variantın üstünlüklərinə nəzər salaq. Onları bir cədvəldə ümumiləşdirdik.

Bir neçə böyük qovşaq

Çoxlu kiçik düyünlər

Daha asan klaster idarəsi (əgər o, yerlidirsə)

Hamar avtomatik miqyaslama

Daha ucuz (yerdə olarsa)

Qiymət bir az fərqlidir (buludda)

Resurs tutumlu proqramları işlədə bilir

Tam replikasiya

Resurslar daha səmərəli istifadə olunur (sistem demonlarına daha az yük
Daha yüksək klaster xətasına dözümlülük

Nəzərə alın ki, biz yalnız işçi qovşaqlarından danışırıq. Əsas qovşaqların sayını və ölçüsünü seçmək tamamilə fərqli bir mövzudur.

Beləliklə, cədvəldəki hər bir məqamı daha ətraflı müzakirə edək.

Birinci seçim: bir neçə böyük qovşaq

Ən ekstremal seçim bütün klaster tutumu üçün bir işçi qovşağıdır. Yuxarıdakı nümunədə bu, 16 CPU nüvəsi və 16 GB RAM ilə tək işçi qovşağı olardı.

Pros

Plus № 1. Daha asan idarəetmə
Bir neçə maşını idarə etmək bütöv bir donanmadan daha asandır. Yeniləmələri və düzəlişləri yaymaq daha sürətlidir və sinxronizasiya etmək daha asandır. Mütləq rəqəmlərdə uğursuzluqların sayı da azdır.

Nəzərə alın ki, yuxarıda göstərilənlərin hamısı bulud nümunələrinə deyil, avadanlıqlarınıza, serverlərinizə aiddir.

Buludda vəziyyət fərqlidir. Orada idarəetmə bulud xidməti provayderi tərəfindən həyata keçirilir. Beləliklə, buludda on qovşağın idarə edilməsi bir nodu idarə etməkdən çox da fərqlənmir.

Trafik marşrutu və buludda podlar arasında yük paylanması avtomatik həyata keçirilir: İnternetdən gələn trafik trafiki qovşaqlardan birinin portuna yönləndirən əsas yük balanslaşdırıcısına göndərilir (NodePort xidməti portu hər klaster qovşağında 30000-32767 diapazonunda təyin edir). Kube-proxy tərəfindən təyin olunan qaydalar trafiki qovşaqdan poda yönləndirir. İki qovşaqda on pods üçün necə görünür:

Kubernetes işçi qovşaqları: bir çox kiçik və ya bir neçə böyük?
Pro #2: Hər node üçün daha az xərc
Güclü avtomobil daha bahalıdır, lakin qiymət artımı mütləq xətti deyil. Başqa sözlə desək, 10 GB yaddaşa malik bir on nüvəli server adətən eyni yaddaşa malik on tək nüvəli serverdən daha ucuzdur.

Ancaq nəzərə alın ki, bu qayda adətən bulud xidmətlərində işləmir. Bütün əsas bulud provayderlərinin cari qiymət sxemlərində qiymətlər tutumla xətti olaraq artır.

Beləliklə, buludda adətən daha güclü serverlərə qənaət edə bilməzsiniz.

Pro #3: Siz resurs tələb edən proqramları işlədə bilərsiniz
Bəzi proqramlar klasterdə güclü serverlər tələb edir. Məsələn, maşın öyrənmə sistemi 8 GB yaddaş tələb edirsə, siz onu 1 GB qovşaqlarda işlədə bilməyəcəksiniz, ancaq ən azı bir böyük işçi qovşağı ilə.

Eksiler

Dezavantaj No 1. Hər node üçün çoxlu pods
Eyni tapşırıq daha az qovşaqda yerinə yetirilirsə, təbii olaraq onların hər birində daha çox pod olacaq.

Bu problem ola bilər.

Səbəb odur ki, hər bir modul konteynerin işləmə müddətinə (məsələn, Docker), həmçinin kubelet və cAdvisor-a bir qədər əlavə yük təqdim edir.

Məsələn, kubelet müntəzəm olaraq bir qovşaqdakı bütün konteynerləri yaşamaq qabiliyyətini yoxlayır - nə qədər çox konteyner varsa, kubelet bir o qədər çox iş görməlidir.

CAdvisor qovşaqdakı bütün konteynerlər üçün resurs istifadəsi statistikasını toplayır və kubelet bu məlumatı müntəzəm olaraq sorğulayır və API vasitəsilə təmin edir. Yenə daha çox konteyner həm cAdvisor, həm də kubelet üçün daha çox iş deməkdir.

Modulların sayı artarsa, bu, sistemi yavaşlata və hətta onun etibarlılığını poza bilər.

Kubernetes işçi qovşaqları: bir çox kiçik və ya bir neçə böyük?
Kubernetes deposunda bəziləri şikayət etdiki, qovşaqlar Ready/NotReady statusları arasında keçid edir, çünki qovşaqdakı bütün konteynerlərin müntəzəm kubelet yoxlamaları çox uzun çəkir.
Bu səbəbdən Kubernetes hər node 110-dan çox olmayan pods yerləşdirməyi tövsiyə edir. Düyünün performansından asılı olaraq, hər node üçün daha çox pod işlədə bilərsiniz, lakin problemlərin olub-olmayacağını və ya hər şeyin yaxşı işləyəcəyini proqnozlaşdırmaq çətindir. İşi əvvəlcədən sınamağa dəyər.

Dezavantaj No 2. Replikasiyanın məhdudlaşdırılması
Çox az qovşaq tətbiqin təkrarlanmasının effektiv həcmini məhdudlaşdırır. Məsələn, beş replikadan, lakin yalnız iki qovşaqdan ibarət yüksək əlçatanlıq tətbiqiniz varsa, o zaman tətbiqin effektiv təkrarlanma dərəcəsi ikiyə endirilir.

Beş replika yalnız iki qovşaqda paylana bilər və onlardan biri uğursuz olarsa, birdən çox replika silinəcək.

Beş və ya daha çox qovşağınız varsa, hər bir replika ayrıca qovşaqda işləyəcək və bir node uğursuzluğu ən çox bir replikanı siləcək.

Beləliklə, yüksək əlçatanlıq tələbləri klasterdə müəyyən minimum sayda qovşaq tələb edə bilər.

Mənfi cəhət No 3. Uğursuzluğun daha pis nəticələri
Az sayda node ilə hər bir uğursuzluq daha ciddi nəticələrə səbəb olur. Məsələn, yalnız iki qovşaqınız varsa və onlardan biri uğursuz olarsa, modullarınızın yarısı dərhal yox olur.

Əlbəttə ki, Kubernetes iş yükünü uğursuz nodedan başqalarına köçürəcək. Ancaq bunlardan bir neçəsi varsa, o zaman kifayət qədər boş tutum olmaya bilər. Nəticə olaraq, uğursuz qovşağı açana qədər bəzi tətbiqləriniz əlçatmaz olacaq.

Beləliklə, qovşaqlar nə qədər çox olarsa, aparat uğursuzluqlarının təsiri bir o qədər az olar.

Dezavantaj №4: Daha çox avtomatik ölçmə addımları
Kubernetes, cari ehtiyaclarınızdan asılı olaraq avtomatik olaraq qovşaqları əlavə etməyə və ya silməyə imkan verən bulud infrastrukturu üçün klaster avtomatik miqyaslama sisteminə malikdir. Daha böyük qovşaqlarla avtomatik miqyaslama daha kəskin və çətin olur. Məsələn, iki qovşaqda əlavə bir node əlavə etmək klaster tutumunu dərhal 50% artıracaq. Və bu resurslara ehtiyacınız olmasa belə, pul ödəməli olacaqsınız.

Beləliklə, avtomatik klaster miqyasından istifadə etməyi planlaşdırırsınızsa, qovşaqlar nə qədər kiçik olsa, bir o qədər çevik və sərfəli miqyas alacaqsınız.

İndi çoxlu sayda kiçik qovşaqların üstünlükləri və mənfi cəhətlərinə baxaq.

İkinci seçim: bir çox kiçik qovşaq

Bu yanaşmanın üstünlükləri əsasən bir neçə böyük qovşaqla əks variantın çatışmazlıqlarından irəli gəlir.

Pros

Pro # 1: Uğursuzluğun daha az təsiri
Nə qədər çox qovşaq olsa, hər bir node bir o qədər azdır. Məsələn, on qovşaqda yüz modulunuz varsa, onda hər bir node orta hesabla on modula sahib olacaq.

Beləliklə, qovşaqlardan biri uğursuz olarsa, iş yükünün yalnız 10% -ni itirirsiniz. Şanslar odur ki, yalnız az sayda replika təsirlənəcək və ümumi tətbiq işlək qalacaq.

Əlavə olaraq, qalan qovşaqların uğursuz qovşağın iş yükünü idarə etmək üçün kifayət qədər pulsuz resursları olacaq, beləliklə, Kubernetes podları sərbəst şəkildə yenidən planlaşdıra bilər və tətbiqləriniz nisbətən tez funksional vəziyyətə qayıdacaq.

Pro # 2: Yaxşı təkrarlama
Kifayət qədər qovşaq varsa, Kubernetes planlaşdırıcısı bütün replikalara müxtəlif qovşaqlar təyin edə bilər. Bu yolla, node uğursuz olarsa, yalnız bir replika təsirlənəcək və proqram əlçatan qalacaq.

Eksiler

Dezavantaj No 1. Nəzarət etmək çətindir
Çox sayda qovşaqları idarə etmək daha çətindir. Məsələn, hər bir Kubernetes qovşağı bütün digərləri ilə əlaqə saxlamalıdır, yəni əlaqələrin sayı kvadrat şəkildə artır və bütün bu əlaqələri izləmək lazımdır.

Kubernetes Controller Manager-dəki qovşaq nəzarətçisi sağlamlığı yoxlamaq üçün müntəzəm olaraq klasterdəki bütün qovşaqları gəzir - qovşaq nə qədər çox olarsa, nəzarətçi bir o qədər çox yüklənir.

etcd verilənlər bazasına yük də artır - hər kubelet və kube-proxy zəngləri seyrçi etcd üçün (API vasitəsilə), etcd obyekt yeniləmələrini yayımlamalıdır.

Ümumiyyətlə, hər bir işçi qovşağı master qovşaqlarının sistem komponentlərinə əlavə yük qoyur.

Kubernetes işçi qovşaqları: bir çox kiçik və ya bir neçə böyük?
Kubernetes rəsmi olaraq klasterləri dəstəkləyir qovşaqların sayı 5000-ə qədər. Ancaq praktikada artıq 500 qovşaq var əhəmiyyətsiz problemlər yarada bilər.

Çox sayda işçi qovşağını idarə etmək üçün daha güclü master qovşaqlarını seçməlisiniz. Məsələn, kube-up avtomatik quraşdırır işçi qovşaqlarının sayından asılı olaraq master node üçün düzgün VM ölçüsü. Yəni işçi qovşaqları nə qədər çox olsa, master qovşaqları da bir o qədər məhsuldar olmalıdır.

Bu xüsusi problemləri həll etmək üçün xüsusi inkişaflar var, məsələn Virtual Kubelet. Bu sistem məhdudiyyətləri keçməyə və çoxlu sayda işçi qovşaqları olan klasterlər qurmağa imkan verir.

Dezavantaj №2: Daha çox məsrəflər.
Hər bir işçi qovşağında Kubernetes bir sıra sistem demonlarını işlədir - bunlara konteynerin işləmə vaxtı (məsələn, Docker), kube-proxy və kubelet, o cümlədən cAdvisor daxildir. Birlikdə onlar müəyyən miqdarda resurs istehlak edirlər.

Çoxlu kiçik qovşaqlarınız varsa, hər bir qovşaqda bu yükün nisbəti daha böyükdür. Məsələn, bir qovşaqda olan bütün sistem demonlarının birlikdə 0,1 CPU nüvəsi və 0,1 GB yaddaş istifadə etdiyini təsəvvür edin. Əgər 10 GB yaddaşa malik bir on nüvəli qovşağınız varsa, demonlar klaster tutumunun 1%-ni istehlak edir. Digər tərəfdən, 1 GB yaddaşa malik on tək nüvəli qovşaqda demonlar klaster tutumunun 10%-ni alacaqlar.

Beləliklə, qovşaqlar nə qədər az olsa, infrastrukturdan bir o qədər səmərəli istifadə olunur.

Mənfi cəhət No 3. Resurslardan səmərəsiz istifadə
Kiçik qovşaqlarda ola bilər ki, qalan resurs hissələri hər hansı iş yükünü təyin etmək üçün çox kiçikdir, ona görə də onlar istifadə olunmur.

Məsələn, hər pod 0,75 GB yaddaş tələb edir. Əgər hər biri 1 GB yaddaşa malik on qovşaqınız varsa, hər qovşaqda 0,25 GB istifadə olunmamış yaddaş buraxaraq on pod işlədə bilərsiniz.

Bu o deməkdir ki, bütün klasterin yaddaşının 25%-i boş yerə sərf olunur.

10 GB yaddaşa malik böyük qovşaqda siz bu modullardan 13-nü işlədə bilərsiniz - və 0,25 GB-lıq yalnız bir istifadə olunmamış fraqment olacaq.

Bu halda yaddaşın yalnız 2,5%-i boş yerə sərf olunur.

Beləliklə, resurslar daha böyük qovşaqlarda daha optimal istifadə olunur.

Bir neçə böyük qovşaq və ya bir çox kiçik qovşaq?

Beləliklə, hansı daha yaxşıdır: bir çoxluqda bir neçə böyük qovşaq, yoxsa çoxlu kiçik? Həmişə olduğu kimi, dəqiq cavab yoxdur. Çox şey tətbiqin növündən asılıdır.

Məsələn, bir proqram 10 GB yaddaş tələb edirsə, daha böyük qovşaqlar açıq seçimdir. Tətbiq yüksək əlçatanlıq üçün on dəfə təkrarlama tələb edirsə, replikaları yalnız iki qovşaqda yerləşdirmək riskinə dəyməz - klasterdə minimum on qovşaq olmalıdır.

Aralıq vəziyyətlərdə, hər bir variantın üstünlükləri və mənfi cəhətləri əsasında seçim edin. Ola bilsin ki, bəzi arqumentlər sizin vəziyyətinizə digərlərindən daha çox uyğun gəlir.

Və bütün qovşaqları eyni ölçüdə etmək heç də lazım deyil. Əvvəlcə eyni ölçülü qovşaqlarla sınaqdan keçirməyə, sonra onlara fərqli ölçülü qovşaqları əlavə etməyə, onları klasterdə birləşdirməyə heç nə mane olmur. Kubernetes klasterindəki işçi qovşaqları tamamilə heterojen ola bilər. Beləliklə, hər iki yanaşmanın üstünlüklərini birləşdirməyə cəhd edə bilərsiniz.

Tək bir resept yoxdur və hər bir vəziyyətin öz nüansları var və yalnız istehsal həqiqəti göstərəcəkdir.

Tərcümə bulud platforması komandası tərəfindən hazırlanmışdır Mail.ru Bulud Həlləri.

Kubernetes haqqında ətraflı: Klasterlərin idarə edilməsi və yerləşdirilməsi üçün 25 Faydalı Alətlər.

Mənbə: www.habr.com

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