İki sahəli Kubernetes klasterinə üç etcd seçicisi lazımdırmı?
İki VPN sahəsi boyunca üç idarəetmə müstəvisi qovşağı böyük sahə sönəndə hələ də kvorumu itirir. Həqiqi etcd seçicilərini sayın və hansı itkiyə dözəcəyinizi seçin.
Üç idarəetmə müstəvisi virtual maşını pis bir gecədən sağ çıxmaq üçün üç şans kimi görünür. Amma belə deyil və bu iki inanc arasındakı məsafə səliqəli üç qovşaqlı dizaynı bir bina elektrik itirəndə yazma qəbul etməyi dayandıran klasterə çevirir. Sahələr arasındakı VPN əlaqəsi maşınları bir-birinə çatımlı edir və problemi həll etmək əvəzinə gizlədir. Səslər hər etcd üzvü üzrə sayılır və həmin üzvlərdən ikisi hələ də bir açar, bir UPS və bir yuxarı xətt arxasında otura bilər.
Üç idarəetmə qovşağı, bir nasazlıq domeni
Siz kubectl get nodes işlədirsiniz, üç idarəetmə müstəvisi girişi görürsünüz və klasteri yüksək əlçatan kimi qeyd edirsiniz. Bu say planlaşdırıla bilən tutumu təsvir edir, sağ qalmanı yox. Xarici etcd olmadan saxlanılan kubeadm-də hər idarəetmə qovşağı da bir üzvə ev sahibliyi edir, yəni üç qovşaq həqiqətən sizə üç seçici verir. Bu seçicilərin müstəqil şəkildə sıradan çıxıb-çıxmadığı qovşaq siyahısının cavab verə bilmədiyi ayrı bir sualdır.
Bir hipervisor üzərində iki VM, bir enerji xəttində iki rək, bir ISP-dən iki yuxarı xətt: hər cüt iki host adı geyinən tək bir domendir. Yerləşdirməni yazın və hər seçicinin nəyi paylaşdığını qeyd edin — hipervisor, PDU, rəf üstü kommutator, yaddaş massivi, NAT cihazı, VPN konsentratoru. Sonra kağız üzərində hər paylaşılan obyekti çıxarın və qalan səsləri yenidən sayın. İki seçicini bir sıradan çıxmış hosta itirən klaster əvvəldən tək seçicili klaster olub; heç kim ona bu sualı verməmişdi.
İki sahəli bölünmənin nəyə dözə biləcəyi və bilmədiyi
Üç seçici iki sahə üzrə iki və bir kimi yerləşdirildikdə, digər sahə yox olanda böyük tərəf kvorumu saxlayır, tək seçicili tərəf isə heç vaxt saxlamır. Bu asimmetriya hesabdır, tənzimləmə deyil. Dəqiq iki müstəqil sahə üzrə yayılmış hər hansı çoxluq əsaslı etcd klasteri «hansı sahəni itirsən itir və yazmağa davam et» sınağından keçmir, çünki eyni anda hər iki tərəfin səslərin yarısından çoxunu tutması gərəkərdi.
Aşağıdakı cədvəl hansı nasazlıqları həqiqətən aldığınızı görməyin ən sürətli yoludur. Hər sətri belə oxuyun: bu gecə bütün bu sətir yox olsa, sağ qalanlar yenə də yazma əməliyyatını tamamlaya bilərmi?
| What disappears | Voters left | Writes still commit |
|---|---|---|
| Site B, holding voter 3 | 2 of 3 | Yes |
| Site A, holding voters 1 and 2 | 1 of 3 | No |
| One hypervisor carrying any two voters | 1 of 3 | No |
| The inter-site VPN only | 2 of 3 on one side | Only on the majority side |
Tunel niyə heç vaxt səs əlavə etmir
VPN daşıma vasitəsidir, üzv deyil. O, uzaq seçicini çatımlı edə bilər və bölünməni yavaş fasiləyə bənzəyən bir şeyə çevirə bilər və bu, onun kvroma bütün töhfəsidir. Əlavə etdiyi şey xərcdir, çünki hər tamamlama əlaqəni keçməlidir və etcd raft jurnalına toxunan yazmalarda bu gediş-dönüşü ödəyir. Yırğalanan yol replikasiyanı təkrar cəhdlərə və seçkilərə çevirir.
Bölünmələr insanların sehr gözlədiyi yerdir, ona görə də onlar barədə dəqiq olun. Əgər köhnə lider tək seçicili tərəfdə oturarkən əlaqə kəsilirsə, o tərəf yazmağı tamamlaya bilmir və seçki fasiləsi bitən kimi lider vəzifədən düşür, iki seçicili tərəf isə əvəzedici seçir. etcd-nin nasazlıq rejimləri bələdçisi davranışı sadə dildə təsvir edir: çoxluq tərəfində davam edən xidmət, təcrid olunmuş tərəfdə ikinci yazıla bilən klaster yoxdur.
Hansı kəsintini aldığınıza qərar verin
A sahəsi əsas olduqda və onu itirməyin kimsə tədbir görməyincə idarəetmə müstəvisi yazmalarını itirmək demək olduğunu qəbul etdikdə «iki üstəgəl bir» qanuni dizayndır. Onu qüsura çevirən şey həmin qərarı qeyri-müəyyən qoymaqdır. Onu runbook-a yazın: idarəetmə müstəviniz hansı sahədən sağ çıxır və digər sahə saat 03:00-da sönəndə operator nə edir.
Əgər tələb əvəzində «istənilən sahə sıradan çıxa bilər»dirsə, yerləşdirmə hər sahədə çoxluq saxlamalıdır və iki sahə üzrə üç seçici bunu edə bilməz. Ya həqiqətən müstəqil üçüncü domen əlavə edirsiniz — başqa provayderdə kiçik bir region, ora yol sabitdirsə işləyir — ya da ayrı etcd ilə iki klasterə bölünür və bu bölünmənin əməliyyat xərcini qəbul edirsiniz. Heç bir şahid qısayolu bundan yayınmır: etcd-də yüngül arbitr üzv yoxdur, ona görə üçüncü seçici öz diski, yaddaşı və şəbəkə tələbləri olan tam üzvdür. Diaqramda «şahid» yazılmış qutu çəkmək şahid yaratmır.
Kvorum xidmətlə eyni şey deyil
etcd kvorumu API serverin yazma qəbul etməsini saxlayır və saxladığı yalnız budur. Yük balanslaşdırıcısının sağlamlıq yoxlamaları, ingress, tunel boyu CNI çatımlılığı, həcm qoşulma zonaları və tətbiq replikasiyası hər biri öz cavabını tələb edir. Klaster təmiz çoxluq saxlaya və yenə də istifadəçilərə faydalı heç nə təqdim edə bilməz.
Sonra sahib olduğunuzu düşündüyünüz üzvlüyü təsdiqləyin, çünki diaqramlar sürüşür:
kubectl -n kube-system get pods -l component=etcd -o wide
kubectl get endpoints kube-apiserver -n default
etcdctl member list -w table
Üzvlər siyahısını yerləşdirmə cizgisi ilə müqayisə edin. İki üzv eyni hosta və ya eyni rəfə çözülürsə, səhv klasterdə deyil, cizgidədir və səhv topologiya ətrafında ölçü dəyişmək yalnız eyni kəsintinin daha bahalı versiyasını alır.
Hər hansı üç seçicili dizaynı təsdiqləməzdən əvvəl dörd suala cavab verin: neçə seçici birlikdə elektrik itirir, hansı sahənin itkisi hələ çoxluq buraxır, tunel qopanda lider harada oturur və sağ qalan sahə hələ nə edə bilər. Onlardan hər hansı birinə «əmin deyiləm» cavabı klasterin hələ yüksək əlçatan olmadığını bildirir. O, bəxti gətirmiş üç maşındır.