Kubernetes: ανοιχτού κώδικα έναντι συγκεκριμένου προμηθευτή

Γεια σας, με λένε Ντμίτρι Κράσνοφ. Για περισσότερα από πέντε χρόνια διαχειρίζομαι συμπλέγματα Kubernetes και χτίζω πολύπλοκες αρχιτεκτονικές μικροϋπηρεσιών. Στις αρχές του τρέχοντος έτους, ξεκινήσαμε μια υπηρεσία για τη διαχείριση συμπλεγμάτων Kubernetes με βάση το Containerum. Με αυτήν την ευκαιρία, θα σας πω τι είναι το Kubernetes και πώς η ενσωμάτωση με έναν προμηθευτή διαφέρει από τον ανοιχτό κώδικα.

Για αρχή, τι είναι Kubernetes. Αυτό είναι ένα σύστημα διαχείρισης κοντέινερ σε μεγάλο αριθμό κεντρικών υπολογιστών. Από τα ελληνικά, παρεμπιπτόντως, μεταφράζεται ως "πιλότος" ή "τιμόνι". Αναπτύχθηκε αρχικά από την Google και στη συνέχεια δωρήθηκε ως τεχνολογική συνεισφορά στο Cloud Native Computing Foundation, έναν διεθνή μη κερδοσκοπικό οργανισμό που συγκεντρώνει κορυφαίους προγραμματιστές, τελικούς χρήστες και παρόχους τεχνολογίας κοντέινερ στον κόσμο.

Kubernetes: ανοιχτού κώδικα έναντι συγκεκριμένου προμηθευτή

Διαχειριστείτε μεγάλο αριθμό κοντέινερ

Τώρα ας δούμε τι είδους δοχεία είναι αυτά. Πρόκειται για μια εφαρμογή με ολόκληρο το περιβάλλον της - κυρίως τις βιβλιοθήκες από τις οποίες εξαρτάται το πρόγραμμα. Όλα αυτά συσκευάζονται σε αρχεία και παρουσιάζονται με τη μορφή εικόνας που μπορεί να εκτελεστεί ανεξάρτητα από το λειτουργικό σύστημα, δοκιμασμένο και πολλά άλλα. Αλλά υπάρχει ένα πρόβλημα - η διαχείριση κοντέινερ σε μεγάλο αριθμό κεντρικών υπολογιστών είναι πολύ δύσκολη. Γι' αυτό δημιουργήθηκε το Kubernetes.

Μια εικόνα κοντέινερ αντιπροσωπεύει μια εφαρμογή συν τις εξαρτήσεις της. Η εφαρμογή, οι εξαρτήσεις της και η εικόνα του συστήματος αρχείων του λειτουργικού συστήματος βρίσκονται σε διαφορετικά μέρη της εικόνας, τα λεγόμενα επίπεδα. Τα στρώματα μπορούν να επαναχρησιμοποιηθούν για διαφορετικά δοχεία. Για παράδειγμα, όλες οι εφαρμογές σε μια εταιρεία μπορεί να χρησιμοποιούν το βασικό επίπεδο του Ubuntu. Κατά τη λειτουργία κοντέινερ, δεν υπάρχει ανάγκη αποθήκευσης πολλαπλών αντιγράφων ενός μόνο στρώματος βάσης στον κεντρικό υπολογιστή. Αυτό σας επιτρέπει να βελτιστοποιήσετε την αποθήκευση και την παράδοση εικόνων.

Όταν θέλουμε να εκτελέσουμε μια εφαρμογή από ένα κοντέινερ, τα απαραίτητα επίπεδα τοποθετούνται το ένα πάνω στο άλλο και σχηματίζεται ένα σύστημα αρχείων επικάλυψης. Ένα στρώμα εγγραφής τοποθετείται από πάνω, το οποίο αφαιρείται όταν σταματήσει το δοχείο. Αυτό διασφαλίζει ότι όταν εκτελείται το κοντέινερ, η εφαρμογή θα έχει πάντα το ίδιο περιβάλλον, το οποίο δεν μπορεί να αλλάξει. Αυτό εγγυάται την αναπαραγωγιμότητα του περιβάλλοντος σε διαφορετικά κεντρικά λειτουργικά συστήματα. Είτε πρόκειται για Ubuntu είτε για CentOS, το περιβάλλον θα είναι πάντα το ίδιο. Επιπλέον, το κοντέινερ απομονώνεται από τον κεντρικό υπολογιστή χρησιμοποιώντας μηχανισμούς ενσωματωμένους στον πυρήνα του Linux. Οι εφαρμογές σε ένα κοντέινερ δεν βλέπουν αρχεία, διεργασίες του κεντρικού υπολογιστή και γειτονικά κοντέινερ. Αυτή η απομόνωση εφαρμογών από το κεντρικό λειτουργικό σύστημα παρέχει ένα επιπλέον επίπεδο ασφάλειας.

Υπάρχουν πολλά διαθέσιμα εργαλεία για τη διαχείριση κοντέινερ σε έναν κεντρικό υπολογιστή. Το πιο δημοφιλές από αυτά είναι το Docker. Σας επιτρέπει να παρέχετε τον πλήρη κύκλο ζωής των δοχείων. Ωστόσο, λειτουργεί μόνο σε έναν κεντρικό υπολογιστή. Εάν χρειάζεται να διαχειριστείτε κοντέινερ σε πολλούς κεντρικούς υπολογιστές, το Docker μπορεί να κάνει τη ζωή κόλαση για τους μηχανικούς. Γι' αυτό δημιουργήθηκε το Kubernetes.

Η ζήτηση για Kubernetes οφείλεται ακριβώς στην ικανότητα διαχείρισης ομάδων κοντέινερ σε πολλαπλούς κεντρικούς υπολογιστές ως κάποιου είδους μεμονωμένη οντότητα. Η δημοτικότητα του συστήματος παρέχει την ευκαιρία να δημιουργηθούν DevOps ή Λειτουργίες Ανάπτυξης, στις οποίες το Kubernetes χρησιμοποιείται για την εκτέλεση των διαδικασιών αυτού του DevOps.

Kubernetes: ανοιχτού κώδικα έναντι συγκεκριμένου προμηθευτή

Εικόνα 1. Σχηματική αναπαράσταση του τρόπου λειτουργίας του Kubernetes

Πλήρης αυτοματοποίηση

Το DevOps είναι βασικά η αυτοματοποίηση της διαδικασίας ανάπτυξης. Σε γενικές γραμμές, οι προγραμματιστές γράφουν κώδικα που φορτώνεται στο αποθετήριο. Στη συνέχεια, αυτός ο κώδικας μπορεί να συλλεχθεί αυτόματα αμέσως σε ένα κοντέινερ με όλες τις βιβλιοθήκες, να ελεγχθεί και να «κυκλοφορήσει» στο επόμενο στάδιο - Σταδιοποίηση, και στη συνέχεια αμέσως στην Παραγωγή.

Μαζί με το Kubernetes, το DevOps σάς επιτρέπει να αυτοματοποιήσετε αυτή τη διαδικασία έτσι ώστε να πραγματοποιείται χωρίς ουσιαστικά καμία συμμετοχή από τους ίδιους τους προγραμματιστές. Λόγω αυτού, η κατασκευή είναι σημαντικά ταχύτερη, αφού ο προγραμματιστής δεν χρειάζεται να το κάνει αυτό στον υπολογιστή του - απλώς γράφει ένα κομμάτι κώδικα, ωθεί τον κώδικα στο αποθετήριο, μετά από το οποίο εκκινείται η διοχέτευση, η οποία μπορεί να περιλαμβάνει τη διαδικασία κατασκευής, δοκιμής και ανάπτυξης. Και αυτό συμβαίνει με κάθε δέσμευση, επομένως η δοκιμή γίνεται συνεχώς.

Ταυτόχρονα, η χρήση ενός κοντέινερ σάς επιτρέπει να είστε σίγουροι ότι ολόκληρο το περιβάλλον αυτού του προγράμματος θα κυκλοφορήσει στην παραγωγή ακριβώς με τη μορφή που δοκιμάστηκε. Δηλαδή, δεν θα υπάρχουν προβλήματα όπως «υπήρχαν κάποιες εκδόσεις στη δοκιμή, άλλες στην παραγωγή, αλλά όταν τις εγκαταστήσαμε, έπεσαν όλα». Και δεδομένου ότι σήμερα έχουμε μια τάση προς την αρχιτεκτονική μικροϋπηρεσιών, όταν αντί για μια τεράστια εφαρμογή υπάρχουν εκατοντάδες μικρές, για να τις διαχειρίζεσαι χειροκίνητα θα απαιτηθεί ένα τεράστιο προσωπικό εργαζομένων. Γι' αυτό χρησιμοποιούμε Kubernetes.

Πλεονεκτήματα, υπέρ, υπέρ


Αν μιλάμε για τα πλεονεκτήματα του Kubernetes ως πλατφόρμας, τότε έχει σημαντικά πλεονεκτήματα από την άποψη της διαχείρισης μιας αρχιτεκτονικής microservice.

  • Διαχείριση πολλαπλών αντιγράφων. Το πιο σημαντικό πράγμα είναι η διαχείριση κοντέινερ σε πολλούς κεντρικούς υπολογιστές. Το πιο σημαντικό είναι να διαχειριστείτε πολλαπλά αντίγραφα εφαρμογών σε κοντέινερ ως μια ενιαία οντότητα. Χάρη σε αυτό, οι μηχανικοί δεν χρειάζεται να ανησυχούν για κάθε μεμονωμένο δοχείο. Εάν ένα από τα κοντέινερ χαλάσει, το Kubernetes θα το δει και θα το επανεκκινήσει ξανά.
  • Δίκτυο συμπλέγματος. Το Kubernetes έχει επίσης ένα λεγόμενο δίκτυο συμπλέγματος με δικό του χώρο διευθύνσεων. Χάρη σε αυτό, κάθε λοβό έχει τη δική του διεύθυνση. Ως υποπόδιο νοείται η ελάχιστη δομική μονάδα ενός συμπλέγματος στο οποίο εκτοξεύονται απευθείας δοχεία. Επιπλέον, το Kubernetes διαθέτει λειτουργικότητα που συνδυάζει ένα load balancer και Service Discovery. Αυτό σας επιτρέπει να απαλλαγείτε από τη μη αυτόματη διαχείριση διευθύνσεων IP και να αναθέσετε αυτήν την εργασία στο Kubernetes. Και οι αυτόματοι έλεγχοι υγείας θα βοηθήσουν στην ανίχνευση προβλημάτων και θα ανακατευθύνουν την κυκλοφορία σε ομάδες εργασίας.
  • Διαχείριση διαμόρφωσης. Κατά τη διαχείριση μεγάλου αριθμού εφαρμογών, καθίσταται δύσκολη η διαχείριση της διαμόρφωσης της εφαρμογής. Για το σκοπό αυτό, το Kubernetes διαθέτει ειδικούς πόρους ConfigMap. Σας επιτρέπουν να αποθηκεύετε κεντρικά τις διαμορφώσεις και να τις εκθέτετε σε pods κατά την εκτέλεση εφαρμογών. Αυτός ο μηχανισμός μας επιτρέπει να εγγυηθούμε τη συνοχή της διαμόρφωσης σε τουλάχιστον δέκα ή εκατό αντίγραφα εφαρμογών.
  • Επίμονοι όγκοι. Τα κοντέινερ είναι εγγενώς αμετάβλητα και όταν το κοντέινερ σταματήσει, όλα τα δεδομένα που είναι γραμμένα στο σύστημα αρχείων θα καταστραφούν. Ωστόσο, ορισμένες εφαρμογές αποθηκεύουν δεδομένα απευθείας στο δίσκο. Για την επίλυση αυτού του προβλήματος, το Kubernetes διαθέτει μια λειτουργία διαχείρισης αποθήκευσης δίσκου - Persistent Volumes. Αυτός ο μηχανισμός χρησιμοποιεί εξωτερική αποθήκευση δεδομένων και μπορεί να μεταφέρει μόνιμο χώρο αποθήκευσης, μπλοκ ή αρχείο, σε κοντέινερ. Αυτή η λύση σάς επιτρέπει να αποθηκεύετε δεδομένα χωριστά από τους εργαζομένους, γεγονός που τα αποθηκεύει σε περίπτωση βλάβης αυτών των ίδιων εργαζομένων.
  • Load Balancer. Παρόλο που στο Kubernetes διαχειριζόμαστε αφηρημένες οντότητες όπως Deployment, StatefulSet κ.λπ., τελικά τα κοντέινερ τρέχουν σε κανονικές εικονικές μηχανές ή διακομιστές υλικού. Δεν είναι τέλεια και μπορούν να πέσουν ανά πάσα στιγμή. Το Kubernetes θα το δει αυτό και θα ανακατευθύνει την εσωτερική κυκλοφορία σε άλλα αντίγραφα. Τι να κάνουμε όμως με την κίνηση που έρχεται από έξω; Εάν απλώς κατευθύνετε την κυκλοφορία σε έναν από τους εργαζομένους, εάν διακοπεί, η υπηρεσία θα καταστεί μη διαθέσιμη. Για να λύσει αυτό το πρόβλημα, η Kubernetes διαθέτει υπηρεσίες όπως το Load Balancer. Έχουν σχεδιαστεί για να διαμορφώνουν αυτόματα έναν εξωτερικό εξισορροπητή cloud για όλους τους εργαζόμενους στο σύμπλεγμα. Αυτός ο εξωτερικός εξισορροπητής κατευθύνει την εξωτερική κίνηση στους εργαζόμενους και παρακολουθεί η ίδια την κατάστασή τους. Εάν ένας ή περισσότεροι εργαζόμενοι δεν είναι διαθέσιμοι, η κυκλοφορία ανακατευθύνεται σε άλλους. Αυτό σας επιτρέπει να δημιουργήσετε εξαιρετικά διαθέσιμες υπηρεσίες χρησιμοποιώντας το Kubernetes.

Το Kubernetes λειτουργεί καλύτερα όταν εκτελούνται αρχιτεκτονικές microservice. Είναι δυνατό να εφαρμοστεί το σύστημα στην κλασική αρχιτεκτονική, αλλά είναι άσκοπο. Εάν μια εφαρμογή δεν μπορεί να τρέξει σε πολλαπλά αντίγραφα, τότε τι διαφορά έχει - στο Kubernetes ή όχι;

Ανοιχτού κώδικα Kubernetes


Το Kubernetes ανοιχτού κώδικα είναι υπέροχο: το εγκατέστησα και λειτουργεί. Μπορείτε να το αναπτύξετε στους δικούς σας διακομιστές υλικού, στη δική σας υποδομή, να εγκαταστήσετε master και εργαζόμενους στους οποίους θα εκτελούνται όλες οι εφαρμογές. Και το πιο σημαντικό, όλα αυτά είναι δωρεάν. Ωστόσο, υπάρχουν αποχρώσεις.

  • Το πρώτο είναι η απαίτηση για γνώση και εμπειρία από διαχειριστές και μηχανικούς που θα αναπτύξουν και θα υποστηρίξουν όλα αυτά. Εφόσον ο πελάτης λαμβάνει πλήρη ελευθερία δράσης στο cluster, είναι υπεύθυνος για την απόδοση του cluster ο ίδιος. Και είναι πολύ εύκολο να σπάσεις τα πάντα εδώ.
  • Το δεύτερο είναι η έλλειψη ενσωματώσεων. Εάν εκτελείτε το Kubernetes χωρίς μια δημοφιλή πλατφόρμα εικονικοποίησης, δεν θα έχετε όλα τα οφέλη του προγράμματος. Όπως η χρήση υπηρεσιών Persistent Volumes και Load balancer.

Kubernetes: ανοιχτού κώδικα έναντι συγκεκριμένου προμηθευτή

Εικόνα 2. αρχιτεκτονική k8s

Kubernetes από τον πωλητή


Η ενσωμάτωση με έναν πάροχο cloud παρέχει δύο επιλογές:

  • Πρώτον, ένα άτομο μπορεί απλώς να κάνει κλικ στο κουμπί "δημιουργία συμπλέγματος" και να αποκτήσει ένα σύμπλεγμα που έχει ήδη διαμορφωθεί και είναι έτοιμο για χρήση.
  • Δεύτερον, ο ίδιος ο προμηθευτής εγκαθιστά το σύμπλεγμα και ρυθμίζει την ενοποίηση με το cloud.

Πώς συμβαίνει εδώ. Ο μηχανικός που ξεκινά το σύμπλεγμα καθορίζει πόσους εργάτες χρειάζεται και με ποιες παραμέτρους (για παράδειγμα, 5 εργαζόμενοι, ο καθένας με 10 CPU, 16 GB μνήμης RAM και, ας πούμε, 100 GB δίσκου). Μετά από αυτό αποκτά πρόσβαση στο ήδη σχηματισμένο σύμπλεγμα. Σε αυτήν την περίπτωση, οι εργαζόμενοι στους οποίους εκτοξεύεται το φορτίο μεταφέρονται πλήρως στον πελάτη, αλλά ολόκληρο το επίπεδο διαχείρισης παραμένει υπό την ευθύνη του πωλητή (εάν η υπηρεσία παρέχεται σύμφωνα με το μοντέλο διαχειριζόμενης υπηρεσίας).

Ωστόσο, αυτό το σύστημα έχει τα μειονεκτήματά του. Λόγω του γεγονότος ότι το επίπεδο διαχείρισης παραμένει στον προμηθευτή, ο πωλητής δεν παρέχει πλήρη πρόσβαση στον πελάτη και αυτό μειώνει την ευελιξία στη συνεργασία με την Kubernetes. Μερικές φορές συμβαίνει ότι ένας πελάτης θέλει να προσθέσει κάποια συγκεκριμένη λειτουργικότητα στο Kubernetes, για παράδειγμα, έλεγχο ταυτότητας μέσω LDAP, αλλά η διαμόρφωση του επιπέδου διαχείρισης δεν το επιτρέπει.

Kubernetes: ανοιχτού κώδικα έναντι συγκεκριμένου προμηθευτή

Εικόνα 3. Παράδειγμα συμπλέγματος Kubernetes από πάροχο cloud

Τι να επιλέξετε: ανοιχτού κώδικα ή προμηθευτής


Λοιπόν, είναι το Kubernetes ανοιχτού κώδικα ή συγκεκριμένος προμηθευτής; Αν πάρουμε το Kubernetes ανοιχτού κώδικα, τότε ο χρήστης κάνει ό,τι θέλει με αυτό. Αλλά υπάρχει μεγάλη πιθανότητα να πυροβολήσετε τον εαυτό σας στο πόδι. Με τον προμηθευτή είναι πιο δύσκολο, γιατί όλα είναι μελετημένα και διαμορφωμένα για την εταιρεία. Το μεγαλύτερο μειονέκτημα του ανοιχτού κώδικα Kubernetes είναι η απαίτηση για ειδικούς. Με μια επιλογή προμηθευτή, η εταιρεία απαλλάσσεται από αυτόν τον πονοκέφαλο, αλλά θα πρέπει να αποφασίσει αν θα πληρώσει τους ειδικούς της ή τον πωλητή.

Kubernetes: ανοιχτού κώδικα έναντι συγκεκριμένου προμηθευτή

Kubernetes: ανοιχτού κώδικα έναντι συγκεκριμένου προμηθευτή

Λοιπόν, τα θετικά είναι προφανή, τα μειονεκτήματα είναι επίσης γνωστά. Ένα πράγμα είναι σταθερό: Το Kubernetes λύνει πολλά προβλήματα αυτοματοποιώντας τη διαχείριση πολλών κοντέινερ. Και ποιο να διαλέξετε, ανοιχτού κώδικα ή προμηθευτή - ο καθένας παίρνει τη δική του απόφαση.

Το άρθρο προετοιμάστηκε από τον Dmitry Krasnov, κορυφαίο αρχιτέκτονα της υπηρεσίας Containerum του παρόχου #CloudMTS

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο