Tres VM de pla de control semblen tres oportunitats de sobreviure a una mala nit. No ho són, i la distància entre aquestes dues creences és el que converteix un disseny polit de tres nodes en un clúster que deixa d'acceptar escriptures quan un edifici perd l'electricitat. Un enllaç VPN entre els llocs fa que les màquines siguin accessibles entre si i amaga el problema en lloc de resoldre'l. Els vots es compten per membre d'etcd, i dos d'aquests membres encara poden seure darrere d'un commutador, un SAI i un enllaç ascendent.

Tres nodes de pla de control, un domini de fallada

Executeu kubectl get nodes, veieu tres entrades de pla de control i archiveu el clúster com a d'alta disponibilitat. Aquest recompte descriu capacitat planificable, no supervivència. A kubeadm sense un etcd extern, cada node de pla de control també allotja un membre, així que tres nodes realment us donen tres votants. Si aquests votants fallen de manera independent és una pregunta separada que la llista de nodes no pot respondre.

Dues VM en un hipervisor, dos racks en una alimentació, dos enllaços ascendents d'un ISP: cada parell és un sol domini amb dos noms d'amfitrió. Escriviu la col·locació i marqueu què comparteix cada votant — hipervisor, PDU, commutador de dalt del rack, matriu d'emmagatzematge, dispositiu NAT, concentrador VPN. Després traieu cada objecte compartit sobre el paper i torneu a comptar els vots que queden. Un clúster que perd dos votants per un sol amfitrió fallit ha estat un clúster d'un sol votant tot el temps; ningú no li havia fet la pregunta.

Què pot i què no pot sobreviure una divisió en dos llocs

Amb tres votants col·locats dos i un en dos llocs, el costat més gran manté el quòrum quan l'altre lloc desapareix i el costat d'un sol votant mai no ho fa. Aquesta asimetria és aritmètica, no ajust. Qualsevol clúster d'etcd basat en majories repartit exactament en dos llocs independents falla la prova "perd qualsevol lloc i continua confirmant", perquè tots dos costats haurien de tenir més de la meitat dels vots alhora.

La taula de sota és la manera més ràpida de veure quines fallades heu comprat realment. Llegiu cada fila així: si aquesta fila sencera desapareix aquesta nit, els supervivents poden encara confirmar una escriptura?

What disappearsVoters leftWrites still commit
Site B, holding voter 32 of 3Yes
Site A, holding voters 1 and 21 of 3No
One hypervisor carrying any two voters1 of 3No
The inter-site VPN only2 of 3 on one sideOnly on the majority side

Per què el túnel mai afegeix un vot

Una VPN és transport, no un membre. Pot fer accessible un votant remot i pot convertir una partició en una cosa que sembla un temps d'espera lent, i això és tota la seva contribució al quòrum. El que sí que afegeix és cost, perquè cada confirmació ha de creuar l'enllaç i etcd paga aquesta anada i tornada en les escriptures que toquen el registre raft. Un camí que fluctua converteix la replicació en reintents i eleccions.

Les particions són on la gent espera màgia, així que sigueu precisos amb elles. Si l'enllaç cau mentre el líder antic seu al costat d'un sol votant, aquell costat no pot confirmar i el líder plega quan expira el temps d'espera d'elecció, mentre el costat de dos votants elegeix un substitut. La guia d'etcd sobre modes de fallada descriu el comportament planerament: servei continuat al costat de la majoria, cap segon clúster on es pugui escriure al costat aïllat.

Decidiu quina aturada compreu

Dos més un és un disseny legítim quan el lloc A és el primari i accepteu que perdre'l significa perdre escriptures del pla de control fins que algú actuï. El que el converteix en un defecte és deixar aquella decisió implícita. Poseu-la al runbook: de quin lloc sobreviu el vostre pla de control i què fa un operador quan l'altre lloc s'apaga a les 03:00.

Si el requisit és en canvi "qualsevol lloc pot fallar", la col·locació ha de tenir majoria a cada lloc, i tres votants en dos llocs no poden fer-ho. O afegiu un tercer domini genuïnament independent — una regió petita en un altre proveïdor funciona si el camí cap a ella és estable — o us dividiu en dos clústers amb etcd separats i accepteu el cost operatiu d'aquesta divisió. Cap drecera de testimoni ho evita: etcd no té cap membre àrbitre lleuger, així que un tercer votant és un membre complet amb les seves pròpies exigències de disc, memòria i xarxa. Dibuixar una caixa etiquetada com a testimoni al diagrama no en crea cap.

El quòrum no és el mateix que el servei

El quòrum d'etcd manté el servidor d'API capaç d'acceptar escriptures, i això és tot el que manté. Les comprovacions de salut del balancejador de càrrega, l'ingress, l'abastabilitat de CNI a través del túnel, les zones d'adjunció de volums i la replicació d'aplicacions necessiten cadascuna la seva pròpia resposta. Un clúster pot tenir una majoria neta i encara no oferir res útil als usuaris.

Després confirmeu la pertinença que creieu tenir, perquè els diagrames es desvien:

kubectl -n kube-system get pods -l component=etcd -o wide
kubectl get endpoints kube-apiserver -n default
etcdctl member list -w table

Compareu la llista de membres amb el dibuix de col·locació. Si dos membres es resolen al mateix amfitrió o al mateix rack, el dibuix és el que està malament i no el clúster, i redimensionar al voltant d'una topologia equivocada només compra una versió més cara de la mateixa aturada.

Abans d'aprovar qualsevol disseny de tres votants, responeu quatre preguntes: quants votants perden l'electricitat alhora, quina pèrdua de lloc encara deixa majoria, on se seu el líder quan el túnel cau, i què pot fer encara el lloc supervivent. Un "no ho sé" en qualsevol d'elles significa que el clúster encara no és d'alta disponibilitat. Són tres màquines que han tingut sort.

Articles relacionats