Vai Kubernetes klasterim divās vietās vajag trīs etcd vēlētājus?
Trīs vadības plaknes mezgli divās VPN vietās joprojām zaudē kvorumu, kad lielākā vieta izslēdzas. Saskaitiet īstos etcd vēlētājus un izvēlieties zaudējumu, ko pārdzīvosit.
Trīs vadības plaknes VM šķiet kā trīs iespējas pārdzīvot sliktu nakti. Taču tā nav, un tieši attālums starp šiem diviem uzskatiem pārvērš kārtīgu trīs mezglu dizainu klasterī, kas pārstāj pieņemt ierakstus, kad viena ēka zaudē barošanu. VPN savienojums starp vietām padara mašīnas viena otrai sasniedzamas un slēpj problēmu, nevis to labo. Balsis skaita uz katru etcd dalībnieku, un divi no šiem dalībniekiem joprojām var sēdēt aiz viena komutatora, viena UPS un vienas līnijas.
Trīs vadības plaknes mezgli, viena kļūmes joma
Jūs palaižat kubectl get nodes, redzat trīs vadības plaknes ierakstus un reģistrējat klasteri kā augsti pieejamu. Šis skaitlis raksturo plānojamu jaudu, nevis izdzīvošanu. kubeadm bez ārēja etcd katrs vadības plaknes mezgls mitina arī dalībnieku, tāpēc trīs mezgli tiešām dod trīs vēlētājus. Vai šie vēlētāji kļūst neveiksmīgi neatkarīgi, ir atsevišķs jautājums, uz kuru mezglu saraksts nevar atbildēt.
Divas VM uz viena hipervizora, divi statīvi uz viena barošanas avota, divas līnijas no viena ISP: katrs pāris ir viena joma ar diviem resursdatora nosaukumiem. Pierakstiet izvietojumu un atzīmējiet, ko katrs vēlētājs dala — hipervizors, PDU, statīva augšējais komutators, krātuves masīvs, NAT ierīce, VPN koncentrators. Pēc tam uz papīra noņemiet katru koplietoto objektu un pārskaitiet atlikušās balsis. Klasteris, kas viena bojāta resursdatora dēļ zaudē divus vēlētājus, visu laiku ir bijis viena vēlētāja klasteris; neviens tam vēl nebija uzdevis šo jautājumu.
Ko divu vietu sadalījums var un nevar pārdzīvot
Kad trīs vēlētāji ir izvietoti divās vietās pa diviem un vienam, lielākā puse saglabā kvorumu, kad otra vieta pazūd, bet viena vēlētāja puse nekad. Šī asimetrija ir aritmētika, nevis regulēšana. Jebkurš uz vairākumu balstīts etcd klasteris, kas izvietots tieši divās neatkarīgās vietās, neiztur pārbaudi “zaudē jebkuru vietu un turpini apstiprināt”, jo abām pusēm vienlaikus būtu jātur vairāk nekā puse balsu.
Zemāk esošā tabula ir ātrākais veids, kā redzēt, kādus bojājumus jūs patiešām nopirkāt. Lasiet katru rindu tā: ja šonakt pazūd visa šī rinda, vai izdzīvojušie joprojām var apstiprināt ierakstu?
| 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 |
Kāpēc tunelis nekad nepievieno balsi
VPN ir transportēšana, nevis dalībnieks. Tas var padarīt attālu vēlētāju sasniedzamu un var pārvērst sadalījumu kaut kā tādā, kas izskatās kā lēns taimauts, un tas ir viss tā ieguldījums kvorumā. Ko tas pievieno, ir izmaksas, jo katram apstiprinājumam jāšķērso savienojums un etcd maksā par šo turp un atpakaļ ierakstos, kas skar raft žurnālu. Ceļš, kas mirgo, pārvērš replikāciju atkārtojumos un vēlēšanās.
Sadalījumi ir vieta, kur cilvēki gaida maģiju, tāpēc esiet precīzi. Ja savienojums pārtrūkst, kamēr vecais līderis sēž viena vēlētāja pusē, tā puse nevar apstiprināt un līderis atkāpjas, tiklīdz beidzas vēlēšanu taimauts, savukārt divu vēlētāju puse ievēl aizstājēju. etcd rokasgrāmata par kļūmju režīmiem skaidri apraksta uzvedību: turpināta pakalpošana vairākuma pusē, neviens otrs rakstāms klasteris izolētajā pusē.
Izlemiet, kuru pārtraukumu jūs pērkat
Divi plus viens ir likumīgs dizains, kad A vieta ir primārā un jūs pieņemat, ka tās zaudēšana nozīmē vadības plaknes ierakstu zaudēšanu, līdz kāds rīkojas. Par defektu to padara šī lēmuma atstāšana netiešu. Ierakstiet to runbook: no kuras vietas jūsu vadības plakne izdzīvo un ko operators dara, kad otra vieta nodziest 03:00.
Ja prasība ir “jebkura vieta drīkst sabojāties”, izvietojumam jātur vairākums katrā vietā, un trīs vēlētāji divās vietās to nevar izdarīt. Jūs vai nu pievienojat patiesi neatkarīgu trešo jomu — mazs reģions pie cita pakalpojumu sniedzēja der, ja ceļš uz to ir stabils — vai sadalāties divos klasteros ar atsevišķu etcd un pieņemat šī sadalījuma ekspluatācijas izmaksas. Nekāds liecinieka apvedceļš no tā neizvairās: etcd nav viegla arbitrāžas dalībnieka, tāpēc trešais vēlētājs ir pilnīgs dalībnieks ar savām diska, atmiņas un tīkla prasībām. Uzzīmēt diagrammā lodziņu ar uzrakstu liecinieks liecinieku nerada.
Kvorums nav tas pats, kas pakalpojums
etcd kvorums uztur API serveri spējīgu pieņemt ierakstus, un tas ir viss, ko tas uztur. Slodzes līdzsvarotāja veselības pārbaudes, ingress, CNI sasniedzamība caur tuneli, sējumu pievienošanas zonas un lietotņu replikācija katrai vajadzīga sava atbilde. Klasterim var būt tīrs vairākums un tas tomēr var nepiedāvāt lietotājiem neko noderīgu.
Pēc tam apstipriniet dalību, kura, jūsuprāt, jums ir, jo diagrammas dreifē:
kubectl -n kube-system get pods -l component=etcd -o wide
kubectl get endpoints kube-apiserver -n default
etcdctl member list -w table
Salīdziniet dalībnieku sarakstu ar izvietojuma rasējumu. Ja divi dalībnieki atrisinās uz vienu un to pašu resursdatoru vai vienu un to pašu statīvu, nepareizs ir rasējums, nevis klasteris, un izmēra maiņa ap nepareizu topoloģiju nopērk tikai dārgāku tā paša pārtraukuma versiju.
Pirms apstiprināt jebkuru trīs vēlētāju dizainu, atbildiet uz četriem jautājumiem: cik vēlētāju kopā zaudē barošanu, kuras vietas zaudēšana vēl atstāj vairākumu, kur sēž līderis, kad tunelis krīt, un ko vēl var darīt izdzīvojusī vieta. “Nezinu” uz jebkuru no tiem nozīmē, ka klasteris vēl nav augsti pieejams. Tās ir trīs mašīnas, kurām ir paveicies.