Kubernetes nədir və o, sizə həqiqətən lazımdırmı?
Kubernetes mürəkkəb olması ilə tanınır və bu şöhrət haqlıdır — lakin onun əsas ideyası sadədir: bu, bir qrup maşın üzərində çoxlu konteyneri etibarlı şəkildə işlətmək, nasaz olanları yenidən başlatmaq və yükü sağlam olanlar arasında paylamaq üçün sistemdir; özü də idarəetmə panelini izləyib əl ilə müdaxilə edən insan olmadan.
Həll etdiyi problem
Bir serverdə bir konteyneri idarə etmək asandır. Real canlı trafik yarandığı an, adətən, tətbiqinizin bir neçə nüsxəsinin işləməsi (həm tutum üçün, həm də bir serverin sıradan çıxmasına tab gətirmək üçün), üstəlik verilənlər bazası, keş, fon prosesləri (background workers) və trafiki həmin an həqiqətən sağlam olan nüsxələrə yönləndirmək üçün hansısa üsul lazım olur. Bunu əl ilə etmək — serverə SSH ilə daxil olmaq, konteynerin dayandığını görmək, onu yenidən başlatmaq, yük balanslaşdırıcısının konfiqurasiyasını yeniləmək — bir neçə servisdən artıq miqyasda işləmir və maşının çoxdan özü düzəltməli olduğu bir şeyə görə kiminsə gecə saat 3-də oyadılacağına zəmanət verir.
Kubernetes bu işi öz üzərinə götürür. Siz istədiyiniz vəziyyəti təsvir edirsiniz — «bu konteynerin üç nüsxəsini fərqli maşınlarda işlət və bu vəziyyəti qoru» — Kubernetes isə reallığı həmin təsvirə uyğunlaşdırmaq üçün fasiləsiz işləyir. Server sıradan çıxdı? O, həmin serverdəki konteynerləri başqa yerə köçürür. Konteyner çökdü? Avtomatik yenidən başladılır. Trafik artdı? Onu əlavə nüsxələri özü işə salacaq şəkildə konfiqurasiya edə bilərsiniz.
Əsas komponentlər, termin bolluğu olmadan
- Pod — yerləşdirilə bilən ən kiçik vahid, adətən cəmi bir konteyner (bəzən sıx əlaqədə işləyən bir neçə konteyner).
- Deployment — pod-un neçə nüsxəsinin işləməli olduğunu və onlara yeniləmələrin fasiləsiz necə tətbiq ediləcəyini təsvir edir.
- Service — pod-lar dəyişdirilsə belə, həmin an mövcud olan sağlam pod-lara yönləndirən sabit şəbəkə ünvanı.
- Node — pod-ların işlədiyi real maşın (fiziki və ya virtual).
- Cluster — Kubernetes-in vahid sistem kimi idarə etdiyi node-ların bütöv toplusu.
Bunların altında Kubernetes servislərin aşkarlanmasını (service discovery), yük balanslaşdırmasını, mərhələli yerləşdirmələri (rolling deployments), uğursuz sağlamlıq yoxlamalarında avtomatik geri qaytarmanı və məxfi açarların idarə olunmasını öz üzərinə götürür — əvvəllər əl ilə bir-birinə bağlanmış bir sıra ayrı alətlər tələb edən əməliyyat «santexnikasını».
Dürüst cavab: sizə lazımdırmı?
Kubernetes real problemləri həll edir, lakin real mürəkkəblik bahasına — öyrənmə çətinliyi, əməliyyat yükü və komandanızın artıq bilməli olduğu bütöv bir lüğət. Proqnozlaşdırıla bilən, mülayim trafiklə bir-iki servis işlədirsinizsə, daha sadə quruluş — yük balanslaşdırıcısı arxasında bir-iki server və ya orkestrasiyanı tamamilə gizlədən idarə olunan platforma — çox güman ki, sizə daha yaxşı xidmət edəcək və dəstəklənməsi üçün qat-qat az mühəndis vaxtı tələb edəcək.
Kubernetes adətən bu hallarda öz mürəkkəbliyini doğruldur: ayrı-ayrılıqda miqyaslanmalı və yerləşdirilməli olan çoxlu servis işlədirsiniz; trafik avtomatik miqyaslanmanın həqiqətən vacib olduğu qədər dəyişkəndir; yaxud bulud infrastrukturuna artıq o qədər dərindən bağlısınız ki, onun ekosistemi (və onu artıq bilən mühəndislərin geniş bazarı) öyrənmə xərcindən üstün gəlir. Bu nöqtəyə çatmazdan əvvəl ona əl atmaq komandaların klasterin işlətməli olduğu məhsulu qurmaq əvəzinə klasterin özünü sağlam saxlamaq kimi tam ştatlı işlə məşğul qalmasının ən çox rast gəlinən yollarından biridir.
Ağlabatan yol
Bir çox uğurlu məhsul heç vaxt Kubernetes-ə toxunmur, digərləri isə onu bir-iki il sonra, onun həll etdiyi əməliyyat problemləri real olaraq üzə çıxanda tətbiq edir. Daha sadə başlamaq və Kubernetes-in həll etdiyi konkret problemi hiss etdikdən sonra ona keçmək, adətən, sadəcə məşhur ad olduğu üçün onu əvvəldən tətbiq etməkdən daha az riskli ardıcıllıqdır.
Kubernetes-in düzgün seçim olub-olmadığına — yoxsa daha sadə quruluşun yaxın bir ildə sizə daha yaxşı xidmət edəcəyinə — qərar vermək Burncode-da komandalara bir gün ola biləcək deyil, hazırda real olan trafik və komanda ölçüsünə əsaslanaraq qəbul etməyə kömək etdiyimiz infrastruktur qərarlarının məhz özüdür.