Je, kundi la Kubernetes la maeneo mawili linahitaji wapiga kura watatu wa etcd?
Nodi tatu za udhibiti katika maeneo mawili ya VPN bado hupoteza kworumu eneo kubwa linapozima. Hesabu wapiga kura halisi wa etcd na uchague hasara unayonusurika.
Mashine tatu za udhibiti huonekana kama nafasi tatu za kusalimika usiku mbaya. Lakini sivyo, na umbali kati ya imani hizi mbili ndio hubadilisha muundo safi wa nodi tatu kuwa kundi linaloacha kukubali maandishi jengo moja linapopoteza umeme. Kiungo cha VPN kati ya maeneo hufanya mashine kufikiwa na nyingine na huficha tatizo badala ya kulirekebisha. Kura huhesabiwa kwa kila mwanachama wa etcd, na wawili wa wanachama hao bado wanaweza kukaa nyuma ya swichi moja, UPS moja na mstari mmoja.
Nodi tatu za udhibiti, kikoa kimoja cha hitilafu
Unaendesha kubectl get nodes, unaona maingizo matatu ya udhibiti na kuandikisha kundi kama lenye upatikanaji mkubwa. Idadi hiyo inaeleza uwezo unaopangwa, si kunusurika. Katika kubeadm bila etcd ya nje, kila nodi ya udhibiti pia hukaribisha mwanachama, kwa hivyo nodi tatu hukupa wapiga kura watatu kwa kweli. Kama wapiga kura hao hushindwa kwa kujitegemea ni swali tofauti ambalo orodha ya nodi haiwezi kujibu.
Mashine mbili kwenye hypervisor moja, rafu mbili kwenye umeme mmoja, mistari miwili kutoka ISP mmoja: kila jozi ni kikoa kimoja kilichovaa majina mawili ya mwenyeji. Andika mpangilio na uweke alama kile kila mpiga kura hushiriki — hypervisor, PDU, swichi ya juu ya rafu, safu ya hifadhi, kifaa cha NAT, kitovu cha VPN. Kisha ondoa kila kitu kinachoshirikiwa kwenye karatasi na uhesabu tena kura zilizobaki. Kundi linalopoteza wapiga kura wawili kwa sababu ya mwenyeji mmoja aliyeshindwa limekuwa kundi la mpiga kura mmoja wakati wote; hakuna aliyekuwa ameuliza swali hilo.
Mgawanyiko wa maeneo mawili unaweza kuvumilia nini na hauwezi
Wapiga kura watatu wanapowekwa wawili na mmoja katika maeneo mawili, upande mkubwa huhifadhi kworumu eneo lingine linapotoweka na upande wenye mpiga kura mmoja hauhifadhi kamwe. Utengano huo ni hesabu, si urekebishaji. Kundi lolote la etcd linalotegemea wengi lililoenea hasa katika maeneo mawili huru hushindwa jaribio la "poteza eneo lolote na uendelee kuthibitisha", kwa sababu pande zote mbili zingepaswa kushikilia zaidi ya nusu ya kura kwa wakati mmoja.
Jedwali lililo hapa chini ni njia ya haraka zaidi ya kuona ni hitilafu gani ulizonunua kweli. Soma kila mstari hivi: ikiwa usiku wa leo mstari huu wote utatoweka, je, walionusurika bado wanaweza kuthibitisha maandishi?
| 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 |
Kwa nini handaki haiongezi kura kamwe
VPN ni usafirishaji, si mwanachama. Inaweza kufanya mpiga kura wa mbali afikiwe na inaweza kubadilisha mgawanyiko kuwa kitu kinachoonekana kama muda wa kusubiri wa polepole, na hiyo ndiyo mchango wake wote kwa kworumu. Kinachoongeza ni gharama, kwa sababu kila uthibitisho lazima uvuke kiungo na etcd hulipa safari hiyo ya kwenda na kurudi kwenye maandishi yanayogusa kumbukumbu ya raft. Njia inayotetemeka hubadilisha urudufishaji kuwa majaribio upya na chaguzi.
Migawanyiko ni mahali ambapo watu hutegemea uchawi, kwa hivyo kuwa sahihi kuhusu hayo. Ikiwa kiungo kitaanguka wakati kiongozi wa zamani amekaa upande wa mpiga kura mmoja, upande huo hauwezi kuthibitisha na kiongozi hujiuzulu muda wa uchaguzi unapoisha, wakati upande wa wapiga kura wawili huchagua mbadala. Mwongozo wa etcd kuhusu hali za hitilafu unaeleza tabia kwa uwazi: huduma inayoendelea upande wa wengi, hakuna kundi la pili linaloweza kuandikwa upande uliotengwa.
Amua ni usumbufu gani unaonunua
Mbili pamoja na moja ni muundo halali wakati Eneo A ni la msingi na unakubali kwamba kulipoteza kunamaanisha kupoteza maandishi ya udhibiti hadi mtu atakapochukua hatua. Kinacholifanya kuwa kasoro ni kuacha uamuzi huo usioelezwa. Andika kwenye runbook: ni eneo gani udhibiti wako unanusurika kutoka kwalo, na mwendeshaji hufanya nini eneo lingine linapozima saa 03:00.
Ikiwa hitaji ni "eneo lolote linaweza kushindwa", mpangilio lazima ushikilie wengi katika kila eneo, na wapiga kura watatu katika maeneo mawili hawawezi kufanya hivyo. Ama unaongeza kikoa cha tatu huru kwa kweli — eneo dogo kwa mtoa huduma mwingine hufanya kazi ikiwa njia ya kuelekea huko ni thabiti — au unagawanyika katika makundi mawili yenye etcd tofauti na unakubali gharama ya uendeshaji ya mgawanyiko huo. Hakuna njia ya mkato ya shahidi inayoepuka hili: etcd haina mwanachama msuluhishi mwepesi, kwa hivyo mpiga kura wa tatu ni mwanachama kamili na mahitaji yake ya diski, kumbukumbu na mtandao. Kuchora kisanduku kilichoandikwa "shahidi" kwenye mchoro hakuundi shahidi.
Kworumu si sawa na huduma
Kworumu ya etcd huweka seva ya API ikiwa na uwezo wa kupokea maandishi, na ndiyo yote inayoiweka. Ukaguzi wa afya wa kisawazisha mzigo, ingress, ufikiaji wa CNI kupitia handaki, kanda za kuunganisha ujazo na urudufishaji wa programu kila kimoja kinahitaji jibu lake. Kundi linaweza kushikilia wengi safi na bado halitoi kitu chochote cha manufaa kwa watumiaji.
Kisha thibitisha uanachama unaodhani unayo, kwa sababu michoro huteleza:
kubectl -n kube-system get pods -l component=etcd -o wide
kubectl get endpoints kube-apiserver -n default
etcdctl member list -w table
Linganisha orodha ya wanachama na mchoro wa mpangilio. Ikiwa wanachama wawili hutatuliwa kwa mwenyeji mmoja au rafu moja, mchoro ndio mbaya si kundi, na kubadilisha ukubwa karibu na topolojia isiyo sahihi hununua toleo la gharama kubwa zaidi la usumbufu huo.
Kabla ya kuidhinisha muundo wowote wa wapiga kura watatu, jibu maswali manne: wapiga kura wangapi hupoteza umeme pamoja, upotezaji wa eneo gani bado huacha wengi, kiongozi hukaa wapi handaki linapoanguka, na eneo lililonusurika bado linaweza kufanya nini. "Sina uhakika" kwa lolote kati ya hayo kunamaanisha kundi bado halina upatikanaji mkubwa. Ni mashine tatu zilizokuwa na bahati.