Χρειάζεται ένα σύμπλεγμα Kubernetes σε δύο τοποθεσίες τρεις ψηφοφόρους etcd;
Τρεις κόμβοι επιπέδου ελέγχου σε δύο τοποθεσίες VPN εξακολουθούν να χάνουν την απαρτία όταν η μεγαλύτερη τοποθεσία πέσει. Μετρήστε τους πραγματικούς ψηφοφόρους του etcd και επιλέξτε την αστοχία που θα επιβιώσετε.
Τρεις εικονικές μηχανές επιπέδου ελέγχου μοιάζουν με τρεις ευκαιρίες να επιβιώσετε από μια κακή νύχτα. Δεν είναι, και η απόσταση μεταξύ αυτών των δύο πεποιθήσεων είναι αυτό που μετατρέπει έναν τακτικό σχεδιασμό τριών κόμβων σε σύμπλεγμα που σταματά να δέχεται εγγραφές όταν ένα κτίριο χάσει το ρεύμα. Ένας σύνδεσμος VPN μεταξύ των τοποθεσιών κάνει τις μηχανές προσβάσιμες μεταξύ τους και κρύβει το πρόβλημα αντί να το διορθώνει. Οι ψήφοι μετρώνται ανά μέλος etcd, και δύο από αυτά τα μέλη μπορούν ακόμη να βρίσκονται πίσω από έναν διακόπτη, ένα UPS και μία ζεύξη.
Τρεις κόμβοι επιπέδου ελέγχου, ένα πεδίο αστοχίας
Εκτελείτε kubectl get nodes, βλέπετε τρεις καταχωρίσεις επιπέδου ελέγχου και καταγράφετε το σύμπλεγμα ως υψηλής διαθεσιμότητας. Αυτός ο αριθμός περιγράφει ικανότητα προγραμματισμού, όχι επιβίωση. Στο kubeadm χωρίς εξωτερικό etcd, κάθε κόμβος επιπέδου ελέγχου φιλοξενεί επίσης ένα μέλος, άρα τρεις κόμβοι σας δίνουν πραγματικά τρεις ψηφοφόρους. Το αν αυτοί οι ψηφοφόροι αποτυγχάνουν ανεξάρτητα είναι ξεχωριστό ερώτημα που η λίστα κόμβων δεν μπορεί να απαντήσει.
Δύο εικονικές μηχανές σε έναν hypervisor, δύο ράφια σε μία παροχή ρεύματος, δύο ζεύξεις από έναν ISP: κάθε ζεύγος είναι ένα πεδίο με δύο ονόματα κεντρικών υπολογιστών. Γράψτε την τοποθέτηση και σημειώστε τι μοιράζεται κάθε ψηφοφόρος — hypervisor, PDU, διακόπτης κορυφής ραφιού, συστοιχία αποθήκευσης, συσκευή NAT, συγκεντρωτής VPN. Έπειτα αφαιρέστε κάθε κοινό αντικείμενο στο χαρτί και μετρήστε ξανά τις ψήφους που απομένουν. Ένα σύμπλεγμα που χάνει δύο ψηφοφόρους από έναν αποτυχημένο κεντρικό υπολογιστή ήταν από την αρχή σύμπλεγμα ενός ψηφοφόρου· κανείς δεν του είχε κάνει την ερώτηση.
Τι μπορεί και τι δεν μπορεί να επιβιώσει ένας διαχωρισμός σε δύο τοποθεσίες
Όταν τρεις ψηφοφόροι τοποθετούνται δύο και ένας σε δύο τοποθεσίες, η μεγαλύτερη πλευρά διατηρεί την απαρτία όταν η άλλη τοποθεσία εξαφανιστεί και η πλευρά του ενός ψηφοφόρου ποτέ. Αυτή η ασυμμετρία είναι αριθμητική, όχι ρύθμιση. Κάθε σύμπλεγμα etcd βασισμένο σε πλειοψηφία που απλώνεται ακριβώς σε δύο ανεξάρτητες τοποθεσίες αποτυγχάνει στη δοκιμή «χάσε οποιαδήποτε τοποθεσία και συνέχισε να δεσμεύεις», γιατί και οι δύο πλευρές θα έπρεπε ταυτόχρονα να κρατούν περισσότερες από τις μισές ψήφους.
Ο πίνακας παρακάτω είναι ο γρηγορότερος τρόπος να δείτε ποιες αστοχίες αγοράσατε πραγματικά. Διαβάστε κάθε γραμμή έτσι: αν ολόκληρη αυτή η γραμμή εξαφανιστεί απόψε, μπορούν οι επιζώντες να δεσμεύσουν ακόμη μια εγγραφή;
| 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 |
Γιατί το τούνελ δεν προσθέτει ποτέ ψήφο
Ένα VPN είναι μεταφορά, όχι μέλος. Μπορεί να κάνει έναν απομακρυσμένο ψηφοφόρο προσβάσιμο και μπορεί να μετατρέψει έναν διαχωρισμό σε κάτι που μοιάζει με αργό χρονικό όριο, και αυτή είναι όλη η συμβολή του στην απαρτία. Αυτό που προσθέτει είναι κόστος, γιατί κάθε δέσμευση πρέπει να διασχίσει τη ζεύξη και το etcd πληρώνει αυτή τη μετάβαση σε εγγραφές που αγγίζουν το αρχείο raft. Μια διαδρομή που πάλλεται μετατρέπει την αντιγραφή σε επαναλήψεις και εκλογές.
Οι διαχωρισμοί είναι το σημείο όπου οι άνθρωποι περιμένουν μαγεία, γι' αυτό να είστε ακριβείς μαζί τους. Αν η ζεύξη πέσει ενώ ο παλιός ηγέτης κάθεται στην πλευρά του ενός ψηφοφόρου, εκείνη η πλευρά δεν μπορεί να δεσμεύσει και ο ηγέτης παραιτείται μόλις λήξει το χρονικό όριο εκλογής, ενώ η πλευρά των δύο ψηφοφόρων εκλέγει αντικαταστάτη. Ο οδηγός του etcd για τους τρόπους αστοχίας περιγράφει τη συμπεριφορά απλά: συνεχής υπηρεσία στην πλευρά της πλειοψηφίας, κανένα δεύτερο σύμπλεγμα με δυνατότητα εγγραφής στην απομονωμένη πλευρά.
Αποφασίστε ποια διακοπή αγοράζετε
Το δύο συν ένα είναι νόμιμος σχεδιασμός όταν η τοποθεσία A είναι η κύρια και δέχεστε ότι η απώλειά της σημαίνει απώλεια εγγραφών του επιπέδου ελέγχου μέχρι να ενεργήσει κάποιος. Αυτό που το κάνει ελάττωμα είναι να αφήνουμε αυτή την απόφαση σιωπηρή. Γράψτε την στο runbook: από ποια τοποθεσία επιβιώνει το επίπεδο ελέγχου σας και τι κάνει ένας χειριστής όταν η άλλη τοποθεσία σβήσει στις 03:00.
Αν η απαίτηση είναι αντίθετα «οποιαδήποτε τοποθεσία μπορεί να αποτύχει», η τοποθέτηση πρέπει να κρατά πλειοψηφία σε κάθε τοποθεσία, και τρεις ψηφοφόροι σε δύο τοποθεσίες δεν μπορούν να το κάνουν. Είτε προσθέτετε ένα πραγματικά ανεξάρτητο τρίτο πεδίο — μια μικρή περιοχή σε άλλον πάροχο λειτουργεί αν η διαδρομή προς αυτή είναι σταθερή — είτε χωρίζεστε σε δύο συμπλέγματα με ξεχωριστό etcd και δέχεστε το λειτουργικό κόστος αυτού του χωρισμού. Καμία συντόμευση με μάρτυρα δεν το αποφεύγει: το etcd δεν έχει ελαφρύ μέλος διαιτητή, άρα ένας τρίτος ψηφοφόρος είναι πλήρες μέλος με τις δικές του απαιτήσεις σε δίσκο, μνήμη και δίκτυο. Το να σχεδιάσετε ένα κουτί με την ένδειξη μάρτυρας στο διάγραμμα δεν δημιουργεί έναν.
Η απαρτία δεν είναι το ίδιο με την υπηρεσία
Η απαρτία του etcd κρατά τον διακομιστή API ικανό να δέχεται εγγραφές, και αυτό είναι το μόνο που κρατά. Οι έλεγχοι υγείας του εξισορροπητή φόρτωσης, το ingress, η προσβασιμότητα CNI μέσω του τούνελ, οι ζώνες προσάρτησης τόμων και η αντιγραφή εφαρμογών χρειάζονται το καθένα τη δική του απάντηση. Ένα σύμπλεγμα μπορεί να κρατά καθαρή πλειοψηφία και παρόλα αυτά να μην προσφέρει τίποτα χρήσιμο στους χρήστες.
Έπειτα επιβεβαιώστε τη σύνθεση μελών που νομίζετε ότι έχετε, γιατί τα διαγράμματα παρεκκλίνουν:
kubectl -n kube-system get pods -l component=etcd -o wide
kubectl get endpoints kube-apiserver -n default
etcdctl member list -w table
Συγκρίνετε τη λίστα μελών με το σχέδιο τοποθέτησης. Αν δύο μέλη αναλύονται στον ίδιο κεντρικό υπολογιστή ή στο ίδιο ράφι, το σχέδιο είναι λάθος και όχι το σύμπλεγμα, και η αλλαγή μεγέθους γύρω από λανθασμένη τοπολογία αγοράζει μόνο μια ακριβότερη εκδοχή της ίδιας διακοπής.
Πριν εγκρίνετε οποιονδήποτε σχεδιασμό τριών ψηφοφόρων, απαντήστε σε τέσσερις ερωτήσεις: πόσοι ψηφοφόροι χάνουν το ρεύμα μαζί, ποια απώλεια τοποθεσίας αφήνει ακόμη πλειοψηφία, πού κάθεται ο ηγέτης όταν πέσει το τούνελ και τι μπορεί ακόμη να κάνει η τοποθεσία που επιβίωσε. Ένα «δεν είμαι σίγουρος» σε οποιαδήποτε από αυτές σημαίνει ότι το σύμπλεγμα δεν είναι ακόμη υψηλής διαθεσιμότητας. Είναι τρεις μηχανές που στάθηκαν τυχερές.