Kubernetes-də üç avtomatik genişlənmə səviyyəsi: onları necə effektiv istifadə etmək olar

Kubernetes-də üç avtomatik genişlənmə səviyyəsi: onları necə effektiv istifadə etmək olar
Kubernetes-i tam mənimsəmək üçün klaster resurslarının müxtəlif genişlənmə yollarını bilmək lazımdır: sistem inkişaf etdiricilərinin sözlərinə görə,bu, Kubernetes-in əsas vəzifələrindən biridir. Biz horizontel və vertikal avtomatik genişlənmə mexanizmləri və klasterlərin ölçüsünü dəyişdirmək üçün yüksək səviyyəli bir baxış təqdim etdik, eyni zamanda onların effektiv istifadəsi üçün tövsiyələr verdik.

Məqalə Kubernetes-in Avtomatik Genişlənməsi 101: Klaster Avtomatik Genişləndirici, Horizontal Avtomatik Genişləndirici və Vertikal Pod Avtomatik Genişləndirici tərcümə edildi komanda tərəfindən, hansı ki, avtomatik genişlənməni həyata keçirdi Mail.ru-dan Kubernetes aaS.

Niyə genişlənməni düşünmək vacibdir

Kubernetes — resursların idarə edilməsi və orkestrasiya üçün bir vasitədir. Əlbəttə ki, podların (pod modulu — müştəri tələbi ilə işə salınan konteyner qrupu) yerləşdirilməsi, monitorinq və idarə edilməsi üzrə əla funksiyalarla işləmək yaxşıdır.

Amma aşağıdakı məsələlərə də baxmaq lazımdır:

  1. Modulları və tətbiqləri necə genişləndirmək olar?
  2. Konteynerləri işdə və effektiv vəziyyətdə necə saxlamaq olar?
  3. İstifadəçilərdən gələn kod və yük dəyişikliklərinə necə reaksiya vermək olar?

Kubernetes klasterlərinin resursları və məhsuldarlığı balanslaşdırmasını tənzimləmək mürəkkəb bir məsələyə çevrilə bilər, bu, Kubernetes-in daxili iş prinsipləri haqqında ekspert bilikləri tələb edir. Tətbiqinizin və ya xidmətlərinizin yükü gün ərzində və ya bir saat ərzində dəyişə bilər, buna görə balanslaşdırmanı davamlı bir proses kimi düşünmək daha yaxşıdır.

Kubernetes-in Avtomatik Genişlənmə Səviyyələri

Effektiv avtomatik genişlənmə iki səviyyə arasında koordinasiya tələb edir:

  1. Pod səviyyəsi, horizontal (Horizontal Pod Autoscaler, HPA) və vertikal genişlənmə (Vertical Pod Autoscaler, VPA) daxildir. Bu, konteynerləriniz üçün mövcud resursların genişləndirilməsidir.
  2. Klaster səviyyəsi, klaster avtomatik genişlənmə sistemi (Cluster Autoscaler, CA) tərəfindən idarə olunur, o, klaster içindəki düyünlərin sayını artırır və ya azaldır.

Horizontal avtomatik genişlənmə modulu (HPA)

Adından göründüyü kimi, HPA podların replikalarının sayını genişləndirir. Əksər devops, replikaların sayını dəyişdirmək üçün prosessor və yaddaş yükünü tetikleyici kimi istifadə edirlər. Ancaq sistemi istifadəçi metrikalarıəsasında genişləndirmək mümkündür, onların və ya hətta xarici metrikaların birləşməsi.

HPA-nın yüksək səviyyəli iş sxemi:

  1. HPA, quraşdırma zamanı göstərilən metrika dəyərlərini 30 saniyəlik standart aralıqlarla davamlı olaraq yoxlayır.
  2. HPA, müəyyən bir həddə çatdıqda modulların sayını artırmağa çalışır.
  3. HPA replikaların sayını yerləşdirmə/replikasiya kontrolerində yeniləyir.
  4. Yerləşdirmə/replikasiya kontroleri, daha sonra bütün lazımi əlavə modulları yerləşdirir.

Kubernetes-də üç avtomatik genişlənmə səviyyəsi: onları necə effektiv istifadə etmək olar
HPA metrika həddinə çatdıqda modulların yerləşdirilməsi prosesini işə salır.

HPA istifadə edərkən bunları nəzərə alın:

  • HPA-nın yoxlama intervalları standart olaraq 30 saniyədir. Bu, flag vasitəsilə təyin olunur horizontal-pod-autoscaler-sync-period nəzarətçi idarəçisində.
  • Standart nisbi səhv 10%-dir.
  • Son modul artırmasından sonra HPA, metrikanın sabitləşməsini üç dəqiqə gözləyir. Bu interval isə flag ilə müəyyən olunur horizontal-pod-autoscaler-upscale-delay.
  • Son modul azaldılmasından sonra HPA, sabitləşmə üçün beş dəqiqə gözləyir. Bu interval flag ilə müəyyən edilir horizontal-pod-autoscaler-downscale-delay.
  • HPA ən yaxşı dağıtım obyektləri ilə işləyir, replikator idarəçiləri ilə deyil. Horizontal avtomatik miqyaslama, birbaşa replikator idarəçilərinə müdaxilə edən fasiləsiz yeniləmə (rolling update) ilə uyğun deyil. Dağıtım zamanı replikaların sayı, birbaşa dağıtım obyektlərindən asılıdır.

Pod’ların şaquli avtomatik miqyaslanması

Şaquli avtomatik miqyaslanma (VPA), mövcud pod’lar üçün daha çox (və ya daha az) CPU və ya yaddaş ayırır. Stateful (məmmur) və ya stateless (stateful) pod’lar üçün uyğundur, lakin əsasən stateful xidmətlər üçün nəzərdə tutulub. Bununla birlikdə, əgər ilkin olaraq ayrılan resursların miqdarını avtomatik tənzimləmək lazım olsa, VPA-nı stateless modullarda da tətbiq edə bilərsiniz.

VPA həmçinin OOM (out of memory, yaddaş çatışmazlığı) hadisələrinə cavab verir. CPU vaxtını və yaddaşın miqdarını dəyişdirmək üçün pod’ların yenidən başladılması tələb olunur. Yenidən başladılan zaman, VPA ehtiyatın bölüşdürülməsi (pods distribution budget, PDB) üzrə minimal tələb olunan modul sayını təmin etmək üçün çalışır.

Hər modul üçün minimum və maksimum resurs miqdarını təyin edə bilərsiniz. Məsələn, maksimum təyin edilmiş yaddaş miqdarını 8 GB ilə məhdudlaşdıra bilərsiniz. Bu, hazırkı düyünlərin konteyner başına 8 GB-dan artıq yaddaş ayıra biləcəyinə zəmanət vermədiyi zaman faydalıdır. Ətraflı spesifikasiyalar və iş mexanizmi ilə bağlı məlumatları rəsmi VPA vikisində.

tapmaq olar. VPA-nın maraqlı bir xüsusiyyəti, yeni CPU vaxtı və yaddaş dəyərlərini təklif etmək üçün resurs istifadəsini və OOM hadisələrini izləyən VPA Recommender funksiyasıdır. Bu, tarixi metrikləri nəzərə alan intellektual bir algoritm əsasında təklif olunur. Həmçinin, pod təsviratı qəbul edən və təklif olunan resurs dəyərlərini təqdim edən bir API interfeysi mövcuddur.

Qeyd etmək lazımdır ki, VPA Recommender resursların 'limit'lərini izləməz. Bu, modulun düyünlər içərisində resursları monopolizasiya etməsinə səbəb ola bilər. Yüksək yaddaş və ya CPU vaxtının aşırı istifadə edilməməsi üçün, sərhəd dəyərini ad sahəsində qoymaq daha yaxşıdır.

VPA-nın yüksək səviyyəli iş sxemi:

  1. VPA davamlı olaraq qurulmuş metrik dəyərləri 10 saniyəlik standart intervalla yoxlayır.
  2. Tələb olunan həddə çatıldıqda, VPA ayrılan resursların miqdarını dəyişməyə çalışır.
  3. VPA dağıtım/replika idarəedicisi içində resurs miqdarını güncəlləyir.
  4. Modullar yenidən başladıqda, bütün yeni resurslar yaradılmış instanslara tətbiq olunur.

Kubernetes-də üç avtomatik genişlənmə səviyyəsi: onları necə effektiv istifadə etmək olar
VPA tələb olunan resursların miqdarını əlavə edir.

VPA istifadəsi zamanı aşağıdakıları nəzərə alın:

  • Miqyaslama pod-un mütləq yenidən başlamasını tələb edir. Bu, dəyişikliklər edildikdən sonra qeyri-sabit iş istisna etmək üçün lazımdır. Etibarlılıq üçün modullar yenidən başlayır və yeni ayrılan resurslara əsaslanaraq düyünlər arasında paylanır.
  • VPA və HPA hal-hazırda bir-biri ilə uyğun deyil və eyni podlarda işləyə bilmir. Əgər siz bir klasterdə hər iki miqyası tətbiq edirsinizsə, parametrlərin onların eyni obyektlərdə aktivləşməsini icazə vermədiyinə əmin olun.
  • VPA konteynerlərin resurs tələblərini yalnız keçmiş və cari istifadədən əsaslanaraq tənzimləyir. O, resurs istifadəsi limitləri qoymur. Resursları daha çox ələ keçirən tətbiqlərin incorrect işləməsi problemləri yarana bilər ki, bu da Kubernetes-in bu pod-u söndürməsinə səbəb olacaq.
  • VPA hal-hazırda inkişafın erkən mərhələsindədir. Yaxın zamanda sistemdə bəzi dəyişikliklərin baş verəcəyini gözləyin. Maraqlı məhdudiyyətlərinkişaf planları. Beləliklə, VPA və HPA birlikdə işləməsi və onların üçün vertikal avtomatik miqyaslama siyasəti ilə birlikdə modulların yayılması planlaşdırılır (məsələn, 'requires VPA' xüsusi etiketi).

Kubernetes klasterinin avtomatik miqyaslaması

Klasterin avtomatik miqyaslaması (Cluster Autoscaler, CA) gözləyən pod modullarının sayına əsaslanaraq düyünlərin sayını dəyişir. Sistem mütəmadi olaraq gözləyən modulların olub olmadığını yoxlayır və daha çox resurs tələb olunduqda klasterin ölçüsünü artırır, əgər klaster təyin edilmiş limitlərdən kənara çıxmırsa. CA bulud xidməti provayderi ilə qarşılıqlı əlaqədədir, ondan əlavə düyünlər tələb edir və ya işə yaramayanları sərbəst buraxır. CA-nın ilk ictimai versiyası Kubernetes 1.8-də təqdim edildi.

CA-nın yüksək səviyyəli iş sxemi:

  1. CA gözləyən modulların olub olmadığını mütəmadi 10 saniyəlik intervalla yoxlayır.
  2. Əgər bir və ya bir neçə modul klasterdə onları paylamaq üçün kifayət qədər resurs olmadığından gözləmə vəziyyətindədirsə, o, bir və ya daha çox əlavə düyün hazırlamağa çalışır.
  3. Bulud xidməti provayderi lazım olan düyünü ayırdıqda, o, klasterə qoşulur və pod modullarını xidmət etməyə hazırdır.
  4. Kubernetes planlayıcı, gözləyən modulları yeni bir düyünə yayır. Əgər bundan sonra bəzi modullar hələ də gözləmə vəziyyətində qalarsa, proses təkrarlanır - və klasterə yeni düyünlər əlavə edilir.

Kubernetes-də üç avtomatik genişlənmə səviyyəsi: onları necə effektiv istifadə etmək olar
Buludda klaster düyünlərinin avtomatik ayrılması

CA-nı istifadə edərkən aşağıdakıları nəzərə alın:

  • CA, klasterdəki bütün modulların işləmə yeri olmasını təmin edir, prosessor yüklənmə səviyyəsindən asılı olmayaraq. Bundan əlavə, o, klasterdə lazımsız düyünlərin olmadığını təmin etməyə çalışır.
  • CA, genişlənmə ehtiyacını təxminən 30 saniyə sonra qeyd edir.
  • Bir düyün lazımsız olduqda, CA standart olaraq sistemin miqyasını azaltmadan əvvəl 10 dəqiqə gözləyir.
  • Avtomatlaşdırılmış miqyaslandırma sistemində genişlənənlər (expanders) anlayışı var. Bu, yeni düyünlərin əlavə ediləcəyi düyün qrupunu seçmək üçün müxtəlif strategiyalardır.
  • İmkanlardan məsuliyyətli şəkildə istifadə edin cluster-autoscaler.kubernetes.io/safe-to-evict (doğru). Əgər bir çox pod yerləşdirsəniz və ya onların əksəriyyəti bütün düyünlərə yayılmışsa, klasteri azaltma imkanını əhəmiyyətli dərəcədə itirəcəksiniz.
  • Windows VPS-i uzaqdan iş üçün istifadə edin Cylindəki digər hissələrdə, pod'ların köçürülməsinin təsirlərini azaltmaq üçün Kubernetes-in bu funksiyalarından istifadə edəcəyik. Ana fikri izləmək üçün, yuxarıdakı nümunəni aşağıdakı resurs konfiqurasiyası ilə istifadə edəcəyik:, podların silinməsini əvvəlcədən qarşısını almaq üçün, bununla da tətbiqinizin bir hissəsi tamamilə sıradan çıxa bilər.

Kubernetes avtomatlaşdırma sistemləri bir-biri ilə necə qarşılıqlı əlaqədədir

İdeal harmoniya üçün həm pod səviyyəsində (HPA/VPA), həm də klaster səviyyəsində avtomatlaşdırma tətbiq etmək lazımdır. Onlar bir-biri ilə nisbətən asan qarşılıqlı əlaqə yaradırlar:

  1. HPA və ya VPA, podların replikalarını və ya mövcud podlara ayrılan resursları yeniləyir.
  2. Planlaşdırılan miqyaslandırma üçün düyünlər çatışmadıqda, CA gözləyən podların mövcud olduğunu qeyd edir.
  3. CA yeni düyünlər ayırır.
  4. Modullar yeni düyünlərə yayılır.

Kubernetes-də üç avtomatik genişlənmə səviyyəsi: onları necə effektiv istifadə etmək olar
Kubernetes-in birgə miqyaslandırma sistemi

Kubernetes avtomatlaşdırmasında tipik xətalar

Avtomatlaşdırma tətbiq edərkən devops-ların üzləşdiyi bir neçə tipik problem mövcuddur.

HPA və VPA, göstəricilər və bəzi tarixi məlumatlardan asılıdır. Əgər resurslar kifayət qədər ayrılmırsa, modullar sıxılır və göstərici yarada bilmir. Bu halda avtomatlaşdırma heç vaxt baş verməz.

Miqyaslandırma əməliyyatı vaxt həssasdır. Modulların və klasterin sürətlə miqyaslanmasını istəyirik - istifadəçilər hər hansı bir problem və ya uğursuzluq hiss etməzdən əvvəl. Bu səbəbdən podların və klasterin miqyaslanma üçün orta vaxtı nəzərə alınmalıdır.

İdeal ssenari - 4 dəqiqə:

  1. 30 saniyə. Hədəf göstəricilərin yenilənməsi: 30−60 saniyə.
  2. 30 saniyə. HPA göstərici dəyərlərini yoxlayır: 30 saniyə.
  3. 2 saniyədən az. Pod modulları yaradılır və gözləmə vəziyyətinə keçir: 1 saniyə.
  4. 2 saniyədən az. CA gözləyən modulları görür və düyünləri hazırlamaq üçün çağırışlar edir: 1 saniyə.
  5. 3 dəqiqə. Bulud provayderi nodo ayırır. K8s, bunlar hazır olana qədər gözləyir: 10 dəqiqəyə qədər (bir neçə amildən asılıdır).

Ən pis (daha gerçəkçi) ssenari — 12 dəqiqə:

  1. 30 saniyə. Hədəf metrikaların yenilənməsi.
  2. 30 saniyə. HPA metrikaların dəyərlərini yoxlayır.
  3. 2 saniyədən az. Pod modulları yaradılır və gözləmə vəziyyətinə keçir.
  4. 2 saniyədən az. CA gözləyən modulları görür və nodo hazırlama çağırışları göndərir.
  5. 10 dəqiqə. Bulud provayderi nodo ayırır. K8s, bunlar hazır olana qədər gözləyir. Gözləmə müddəti bir neçə amildən asılıdır, məsələn, provayder gecikməsi, OS gecikməsi, köməkçi alətlərin işləməsi.

Bulud provayderlərinin avtomatlaşdırma mexanizmlərini bizim CA ilə qarışdırmayın. Sonuncu Kubernetes klasteri daxilində işləyir, bulud provayderinin mexanizmi isə nodo paylanması əsasında fəaliyyət göstərir. O, pod-larınızın və ya tətbiqinizin baş verdiyini bilmir. Bu sistemlər paralel işləyir.

Kubernetes-də avtomatlaşdırmanı necə idarə etmək olar

  1. Kubernetes — resursların idarə edilməsi və orkestrasiya alətidir. Pod-ların idarə edilməsi və klaster resursları ilə əlaqəli əməliyyatlar Kubernetes'in öyrənilməsində əsas mərhələdir.
  2. HPA və VPA ilə pod-ların miqyaslanma məntiqini öyrənin.
  3. CA istifadə etməyə dəyər, yalnız pod-larınızın və konteynerlərinizin ehtiyaclarını yaxşı başa düşdüyünüz zaman.
  4. Klasterin optimal konfiqurasiyası üçün müxtəlif miqyası sistemlərinin birlikdə necə işlədiyini anlamaq lazımdır.
  5. Miqyaslanma müddətini qiymətləndirdikdə, ən pis və ən yaxşı ssenariləri nəzərə alın.

Mənbə: habr.com

DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər 🔥 DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər | ProHoster