ProHoster > Blog > διαχείριση > Πώς να συνδέσετε συμπλέγματα Kubernetes σε διαφορετικά κέντρα δεδομένων
Πώς να συνδέσετε συμπλέγματα Kubernetes σε διαφορετικά κέντρα δεδομένων
Καλώς ορίσατε στη σειρά Γρήγορης Εκκίνησης Kubernetes. Αυτή είναι μια κανονική στήλη με τις πιο ενδιαφέρουσες ερωτήσεις που λαμβάνουμε στο διαδίκτυο και στις προπονήσεις μας. Απαντάει ο ειδικός της Kubernetes.
Ο σημερινός ειδικός είναι ο Daniel Polenchik (Ντανιέλε Πολέντσιτς). Ο Daniel εργάζεται ως εκπαιδευτής και προγραμματιστής λογισμικού στο Learnk8s.
Πολύ συχνά, η υποδομή αναπαράγεται και κατανέμεται σε διαφορετικές περιοχές, ειδικά σε ελεγχόμενα περιβάλλοντα.
Εάν μια περιοχή δεν είναι διαθέσιμη, η κυκλοφορία ανακατευθύνεται σε άλλη για να αποφευχθούν διακοπές.
Με το Kubernetes, μπορείτε να χρησιμοποιήσετε παρόμοια στρατηγική και να διανείμετε φόρτους εργασίας σε διαφορετικές περιοχές.
Μπορείτε να έχετε ένα ή περισσότερα συμπλέγματα ανά ομάδα, περιοχή, περιβάλλον ή συνδυασμό αυτών.
Τα συμπλέγματά σας μπορούν να φιλοξενηθούν σε πολλά σύννεφα και σε εγκαταστάσεις.
Πώς όμως να προγραμματιστεί η υποδομή για μια τέτοια γεωγραφική εξάπλωση;
Χρειάζεται να δημιουργήσετε ένα μεγάλο σύμπλεγμα για πολλά περιβάλλοντα cloud σε ένα μόνο δίκτυο;
Ή έχετε πολλά μικρά συμπλέγματα και βρείτε έναν τρόπο να τα ελέγξετε και να τα συγχρονίσετε;
Μία ηγετική ομάδα
Η δημιουργία ενός συμπλέγματος σε ένα μόνο δίκτυο δεν είναι τόσο εύκολη.
Φανταστείτε ότι έχετε ένα ατύχημα, η σύνδεση μεταξύ των τμημάτων συμπλέγματος χάνεται.
Εάν έχετε έναν κύριο διακομιστή, οι μισοί πόροι δεν θα μπορούν να λάβουν νέες εντολές επειδή δεν θα μπορούν να επικοινωνήσουν με τον κύριο διακομιστή.
Και ταυτόχρονα έχετε παλιούς πίνακες δρομολόγησης (kube-proxy δεν είναι δυνατή η λήψη νέων) και κανένα πρόσθετο pod (η kubelet δεν μπορεί να ζητήσει ενημερώσεις).
Ακόμη χειρότερα, εάν το Kubernetes δεν μπορεί να δει έναν κόμβο, τον επισημαίνει ως ορφανό και διανέμει τα pods που λείπουν στους υπάρχοντες κόμβους.
Ως αποτέλεσμα, έχετε διπλάσιο αριθμό λοβών.
Εάν δημιουργήσετε έναν κύριο διακομιστή ανά περιοχή, θα υπάρξουν προβλήματα με τον αλγόριθμο συναίνεσης στη βάση δεδομένων etcd. (περίπου. εκδ. - Στην πραγματικότητα, η βάση δεδομένων etcd δεν χρειάζεται να βρίσκεται στους κύριους διακομιστές. Μπορεί να εκτελεστεί σε ξεχωριστή ομάδα διακομιστών στην ίδια περιοχή. Ωστόσο, έχοντας λάβει ταυτόχρονα ένα σημείο αποτυχίας ενός cluster. Αλλά γρήγορα.)
κλπ. χρήσεις αλγόριθμος σχεδίαςνα συμφωνήσετε σε μια τιμή πριν την γράψετε στο δίσκο.
Δηλαδή, οι περισσότερες περιπτώσεις πρέπει να καταλήξουν σε συναίνεση για να μπορέσει να εγγραφεί η κατάσταση στο etcd.
Εάν η καθυστέρηση μεταξύ των παρουσιών etcd εκτοξεύεται, όπως συμβαίνει με τρεις περιπτώσεις etcd σε διαφορετικές περιοχές, χρειάζεται πολύς χρόνος για να συμφωνήσετε σε μια τιμή και να την εγγράψετε στο δίσκο.
Αυτό αντικατοπτρίζεται και στους ελεγκτές Kubernetes.
Ο διαχειριστής ελεγκτή χρειάζεται περισσότερο χρόνο για να μάθει για την αλλαγή και να γράψει την απάντηση στη βάση δεδομένων.
Και δεδομένου ότι ο ελεγκτής δεν είναι ένας, αλλά πολλοί, προκύπτει μια αλυσιδωτή αντίδραση και ολόκληρο το σύμπλεγμα αρχίζει να λειτουργεί πολύ αργά.
Επί του παρόντος δεν υπάρχουν καλά παραδείγματα μεγάλου δικτύου για ένα μόνο σύμπλεγμα.
Βασικά, η κοινότητα προγραμματιστών και η ομάδα SIG-cluster προσπαθούν να καταλάβουν πώς να ενορχηστρώνουν τα συμπλέγματα με τον ίδιο τρόπο που ο Kubernetes ενορχηστρώνει τα κοντέινερ.
Για πρώτη φορά, προσπαθήσαμε να διαχειριστούμε μια συλλογή συμπλεγμάτων ως μεμονωμένο αντικείμενο χρησιμοποιώντας το εργαλείο ομοσπονδίας kube.
Η αρχή ήταν καλή, αλλά στο τέλος, η ομοσπονδία kube δεν έγινε δημοφιλής, επειδή δεν υποστήριζε όλους τους πόρους.
Υποστήριξε ομοσπονδιακές προμήθειες και υπηρεσίες, αλλά όχι StatefulSets, για παράδειγμα.
Επίσης, η διαμόρφωση της ομοσπονδίας πέρασε με τη μορφή σχολιασμών και δεν ήταν ευέλικτη.
Φανταστείτε πώς μπορείτε να περιγράψετε τη διαίρεση των αντιγράφων για κάθε σύμπλεγμα σε μια ομοσπονδία χρησιμοποιώντας έναν μόνο σχολιασμό.
Αποδείχθηκε ότι ήταν ένα πλήρες χάος.
Το SIG-cluster έκανε εξαιρετική δουλειά μετά το kubefed v1 και αποφάσισε να προσεγγίσει το πρόβλημα από διαφορετική οπτική γωνία.
Αντί για σχολιασμούς, αποφάσισαν να κυκλοφορήσουν έναν ελεγκτή που είναι εγκατεστημένος σε συμπλέγματα. Μπορεί να διαμορφωθεί χρησιμοποιώντας προσαρμοσμένους ορισμούς πόρων (Custom Resource Definition, CRD).
Για κάθε πόρο που θα συνενωθεί, έχετε έναν προσαρμοσμένο ορισμό CRD σε τρεις ενότητες:
έναν τυπικό ορισμό ενός πόρου, όπως η ανάπτυξη·
τμήμα placement, όπου ορίζετε πώς θα διανεμηθεί ο πόρος στην ομοσπονδία.
τμήμα override, όπου για έναν συγκεκριμένο πόρο μπορείτε να παρακάμψετε το βάρος και τις παραμέτρους από την τοποθέτηση.
Ακολουθεί ένα παράδειγμα ομαδικής παράδοσης με ενότητες τοποθέτησης και παράκαμψης.
Όπως μπορείτε να δείτε, η προσφορά χωρίζεται σε δύο ομάδες: cluster1 и cluster2.
Το πρώτο σύμπλεγμα παρέχει τρία αντίγραφα και το δεύτερο έχει τιμή 5.
Εάν χρειάζεστε περισσότερο έλεγχο στον αριθμό των αντιγράφων, το kubefed2 παρέχει ένα νέο αντικείμενο ReplicaSchedulingPreference όπου μπορούν να σταθμιστούν τα αντίγραφα:
Οι προγραμματιστές της Booking.com δεν ασχολήθηκαν με το kubefed v2, αλλά κατέληξαν στο Shipper, έναν χειριστή για παράδοση σε πολλαπλά cluster, πολλαπλές περιοχές και πολλά σύννεφα.
Και τα δύο εργαλεία σάς επιτρέπουν να προσαρμόσετε τη στρατηγική ανάπτυξης πολλών συμπλεγμάτων (ποια συμπλέγματα χρησιμοποιούνται και πόσα αντίγραφα έχουν).
Αλλά Η δουλειά του αποστολέα είναι να μειώσει τον κίνδυνο σφαλμάτων παράδοσης.
Στο Αποστολέας, μπορείτε να ορίσετε μια σειρά βημάτων που περιγράφουν τη διαίρεση των αντιγράφων μεταξύ της προηγούμενης και της τρέχουσας ανάπτυξης και του όγκου της εισερχόμενης κίνησης.
Όταν προωθείτε έναν πόρο σε ένα σύμπλεγμα, ο ελεγκτής Αποστολέας αναπτύσσει σταδιακά αυτήν την αλλαγή σε όλα τα ενοποιημένα συμπλέγματα.
Επίσης ο αποστολέας είναι πολύ περιορισμένος.
Για παράδειγμα, παίρνει ως είσοδο τα διαγράμματα Helm και δεν υποστηρίζει πόρους βανίλιας.
Σε γενικές γραμμές, ο Αποστολέας λειτουργεί ως εξής.
Αντί για μια τυπική διανομή, πρέπει να δημιουργήσετε έναν πόρο εφαρμογής που να περιλαμβάνει ένα γράφημα Helm:
Το Kubefed v2 και ο Αποστολέας συνεργάζονται με την ομοσπονδία συμπλέγματος παρέχοντας νέους πόρους στα συμπλέγματα μέσω ενός προσαρμοσμένου ορισμού πόρων.
Τι γίνεται όμως αν δεν θέλετε να ξαναγράψετε όλα τα προμήθεια, StatefulSets, DaemonSets κ.λπ. που πρόκειται να συγχωνευθούν;
Πώς να συμπεριλάβετε ένα υπάρχον σύμπλεγμα στην ομοσπονδία χωρίς να αλλάξετε το YAML;
Αλλά αντί να εφεύρει έναν νέο τρόπο αλληλεπίδρασης με το σύμπλεγμα και να αναδιπλώσει τους πόρους σε προσαρμοσμένους ορισμούς, ο προγραμματιστής πολλαπλών συστάδων εγχέεται στον τυπικό κύκλο ζωής του Kubernetes και αναχαιτίζει όλες τις κλήσεις που δημιουργούν ομάδες.
Κάθε λοβό που δημιουργείται αντικαθίσταται αμέσως με ένα ομοίωμα.
Το αρχικό pod περνά από έναν άλλο κύκλο προγραμματισμού όπου, μετά από ψηφοφορία ολόκληρης της ομοσπονδίας, λαμβάνεται μια απόφαση φιλοξενίας.
Τέλος, το pod παραδίδεται στο σύμπλεγμα στόχο.
Ως αποτέλεσμα, έχετε ένα επιπλέον pod που δεν κάνει τίποτα, απλώς καταλαμβάνει χώρο.
Το πλεονέκτημα είναι ότι δεν χρειάζεται να γράψετε νέους πόρους για να συνδυάσετε προμήθειες.
Κάθε πόρος που δημιουργεί ένα pod είναι αυτόματα έτοιμος για συνένωση.
Αυτό είναι ενδιαφέρον, γιατί ξαφνικά έχετε διανεμηθεί προμήθειες σε πολλές περιοχές και δεν το προσέξατε. Ωστόσο, αυτό είναι αρκετά επικίνδυνο, γιατί εδώ όλα στηρίζονται στη μαγεία.
Όμως, ενώ ο Αποστολέας προσπαθεί κυρίως να μετριάσει τις επιπτώσεις των αποστολών, ο προγραμματισμός πολλαπλών συστάδων είναι πιο γενικός και ίσως πιο κατάλληλος για εργασίες παρτίδας.
Δεν διαθέτει προηγμένο μηχανισμό σταδιακής παράδοσης.
Περισσότερα για τον προγραμματιστή πολλαπλών συστάδων μπορείτε να βρείτε στη διεύθυνση επίσημη σελίδα αποθετηρίου.
Εάν θέλετε να διαβάσετε σχετικά με τον προγραμματισμό πολλαπλών συστάδων σε δράση, το Admiralty έχει ενδιαφέρουσα περίπτωση χρήσης με την Argo - ροές εργασιών, συμβάντα, CI και CD Kubernetes.
Άλλα εργαλεία και λύσεις
Η σύνδεση και η διαχείριση πολλαπλών συμπλεγμάτων είναι μια πολύπλοκη εργασία και δεν υπάρχει λύση που να ταιριάζει σε όλους.
Εάν θέλετε να μάθετε περισσότερα σχετικά με αυτό το θέμα, ακολουθούν ορισμένοι πόροι:
Submariner της Rancher είναι ένα εργαλείο που συνδέει δίκτυα επικάλυψης διαφορετικών συμπλεγμάτων Kubernetes.
Το Cilium, ένα πρόσθετο διεπαφής δικτύου κοντέινερ, προσφέρει λειτουργία πλέγματος συμπλέγματος, το οποίο σας επιτρέπει να συνδυάσετε πολλά συμπλέγματα
Αυτά για σήμερα
Σας ευχαριστώ που διαβάσατε μέχρι το τέλος!
Εάν γνωρίζετε πώς να συνδέσετε πιο αποτελεσματικά πολλαπλά συμπλέγματα, πες μας.
Θα προσθέσουμε τη μέθοδο σας στους συνδέσμους.
Ιδιαίτερες ευχαριστίες στον Chris Nesbitt-Smith (Κρις Νέσμπιτ-Σμιθ) και Vincent de Sme (Vincent De Smet) (στον μηχανικό αξιοπιστίας στο swatmobile.io) για να διαβάσετε το άρθρο και να μοιραστείτε χρήσιμες πληροφορίες σχετικά με τον τρόπο λειτουργίας της ομοσπονδίας.