- Οι μικροϋπηρεσίες επιτρέπουν την ανάπτυξη αρθρωτών και κλιμακούμενων εφαρμογών, όπου κάθε υπηρεσία είναι αυτόνομη και μπορεί να αναπτυχθεί ανεξάρτητα.
- Το Docker διευκολύνει τη δημιουργία ελαφρών, φορητών κοντέινερ που συσκευάζουν κάθε μικρουπηρεσία με όλες τις εξαρτήσεις της.
- Το Kubernetes συντονίζει τα κοντέινερ, διαχειριζόμενο την ανάπτυξη, την κλιμάκωση, τη δικτύωση και την αυτόματη ανάκτηση των μικροϋπηρεσιών στο σύμπλεγμα.
- Η εφαρμογή καλών πρακτικών ασφάλειας, παρακολούθησης και αυτοματισμού είναι το κλειδί για την επιτυχή λειτουργία των μικροϋπηρεσιών στην παραγωγή.

Τα τελευταία χρόνια, ο συνδυασμός μικροϋπηρεσιών, Docker και Kubernetes Έχει γίνει το de facto πρότυπο για την ανάπτυξη σύγχρονων, επεκτάσιμων και εύκολων στη συντήρηση εφαρμογών. Όλο και περισσότερες εταιρείες απομακρύνονται από τις μονολιθικές εφαρμογές υπέρ κατανεμημένων αρχιτεκτονικών που είναι πιο προσαρμοσμένες σε μεταβαλλόμενα περιβάλλοντα και στρατηγικές DevOps.
Αν αναρωτιέστε Πώς να εφαρμόσετε μικροϋπηρεσίες με Docker και Kubernetes στην πράξηΑυτό το περιεχόμενο θα είναι ιδανικό για εσάς: θα εξετάσουμε τις βασικές έννοιες, τα πλεονεκτήματα και τις προκλήσεις, τον τρόπο δημιουργίας κοντέινερ, τον τρόπο ενορχήστρωσής τους σε ένα σύμπλεγμα και τα βήματα που πρέπει να ακολουθήσετε για να τα εγκαταστήσετε. Windows y Linuxκαθώς και μια σειρά από συμβουλές για τη συνετή χρήση τους σε πραγματικά περιβάλλοντα.
Τι είναι μια αρχιτεκτονική μικρουπηρεσιών και πώς διαφέρει από μια μονόλιθο;
Μια αρχιτεκτονική μικροϋπηρεσιών βασίζεται σε διαιρέστε μια εφαρμογή σε πολλαπλές μικρές, αυτόνομες και ανεξάρτητα αναπτυσσόμενες υπηρεσίεςΚάθε ένα από αυτά επικεντρώθηκε σε μια συγκεκριμένη λειτουργικότητα (χρήστες, πληρωμές, κατάλογος, παραγγελίες κ.λπ.), οι οποίες επικοινωνούν κυρίως μέσω ελαφρών API (HTTP/REST, gRPC, ανταλλαγή μηνυμάτων κ.λπ.).
Σε μια μονολιθική εφαρμογή, από την άλλη πλευρά, Όλη η επιχειρηματική λογική, το επίπεδο παρουσίασης και η πρόσβαση σε δεδομένα συσκευάζονται σε ένα ενιαίο μπλοκ ανάπτυξης.Οποιαδήποτε αλλαγή απαιτεί επαναμεταγλώττιση, δοκιμή και ανάπτυξη ολόκληρου του συστήματος, γεγονός που περιπλέκει την εξέλιξη και αυξάνει τον κίνδυνο εισαγωγής σφαλμάτων στην παραγωγή.
Με τις μικροϋπηρεσίες, κάθε υπηρεσία έχει τον δικό της κύκλο ζωής: Μπορεί να αναπτυχθεί, να δοκιμαστεί, να αναπτυχθεί, να κλιμακωθεί και να τροποποιηθεί ανεξάρτητα.Αυτό επιτρέπει σε πολλές ομάδες να εργάζονται παράλληλα, απλοποιεί την υιοθέτηση νέων τεχνολογιών και διευκολύνει την ενσωμάτωση με πρακτικές CI/CD.
Επιπλέον, αυτή η αρχιτεκτονική εισάγει την έννοια του επεκτασιμότητα ανεξάρτητη από στοιχείαΑντί να κλιμακώνεται μια ολόκληρη μονολιθική εφαρμογή για να υποστηρίζει περισσότερο φόρτο σε μια συγκεκριμένη ενότητα, κλιμακώνονται μόνο οι μικροϋπηρεσίες που το χρειάζονται πραγματικά, βελτιστοποιώντας καλύτερα τους πόρους υποδομής.
Πραγματικά πλεονεκτήματα και προκλήσεις των μικροϋπηρεσιών
Η μετάβαση στις μικροϋπηρεσίες δεν είναι απλώς μια μόδα: Παρέχει απτά οφέλη στην επεκτασιμότητα, την ανθεκτικότητα και την ταχύτητα ανάπτυξης.Αλλά εισάγει επίσης μια λειτουργική πολυπλοκότητα που πρέπει να αντιμετωπιστεί.
Ανάμεσα στα πιο αξιοσημείωτα πλεονεκτήματα είναι η ανεξάρτητη επεκτασιμότητα κάθε υπηρεσίαςΕάν, για παράδειγμα, η ενότητα πληρωμών λαμβάνει περισσότερη επισκεψιμότητα από τη ενότητα διαχείρισης, μπορείτε να αυξήσετε μόνο τα αντίγραφα της μικροϋπηρεσίας πληρωμών, χωρίς να επηρεάσετε την υπόλοιπη εφαρμογή ή να σπαταλήσετε πόρους.
Κερδίζεις επίσης πολλά συνεχής ανάπτυξη και συχνές παραδόσειςΑπομονώνοντας κάθε υπηρεσία, είναι δυνατή η σταδιακή κυκλοφορία νέων εκδόσεων, χωρίς να χρειάζεται να διακοπεί ή να αναδιαταχθεί ολόκληρη η εφαρμογή, μειώνοντας τα παράθυρα συντήρησης και βελτιώνοντας τον χρόνο διάθεσης στην αγορά.
Ένα άλλο βασικό σημείο είναι το ανθεκτικότητα και ανοχή σφαλμάτωνΌταν σχεδιαστεί σωστά, η αποτυχία μιας μικρουπηρεσίας δεν θα πρέπει να οδηγήσει σε διακοπή λειτουργίας ολόκληρου του συστήματος. Με μοτίβα όπως χρονικά όρια, επαναλήψεις και διακόπτες κυκλώματος, οι άλλες υπηρεσίες μπορούν να συνεχίσουν να ανταποκρίνονται, περιορίζοντας τον αντίκτυπο των βλαβών.
Επιπλέον, οι μικροϋπηρεσίες επιτρέπουν τεχνολογική ευελιξίαΚάθε ομάδα μπορεί να επιλέξει τη γλώσσα, το πλαίσιο ή τη βάση δεδομένων που είναι πιο κατάλληλη για την υπηρεσία της, εφόσον σέβεται τις συμβάσεις επικοινωνίας και τις παγκόσμιες πολιτικές της πλατφόρμας.
Στην άλλη πλευρά του νομίσματος βρίσκουμε το λειτουργική και παρατηρησιμότητα πολυπλοκότηταΗ διαχείριση δεκάδων ή εκατοντάδων υπηρεσιών περιλαμβάνει την αντιμετώπιση κατανεμημένων δικτύων, ιχνηλατήσεων μεταξύ υπηρεσιών, κεντρικής καταγραφής, ασφάλειας, διαχείρισης εκδόσεων API και συνέπειας δεδομένων, κάτι που απαιτεί προηγμένα εργαλεία και ώριμες διαδικασίες.
Γίνεται επίσης περίπλοκο διαχείριση της επικοινωνίας μεταξύ των υπηρεσιώνΕίναι απαραίτητο να σχεδιαστεί προσεκτικά ο τρόπος ανταλλαγής δεδομένων, ο τρόπος αντιμετώπισης σφαλμάτων, ο τρόπος διαχείρισης της καθυστέρησης και ο τρόπος αποτροπής μιας αργής εξάρτησης που θα επιβαρύνει το υπόλοιπο σύστημα. Οι δοκιμές και η αποσφαλμάτωση παύουν να είναι ασήμαντες, επειδή Δεν δοκιμάζεται ένα μόνο μπλοκ, αλλά ένα σύνολο διασυνδεδεμένων υπηρεσιών..

Δοχεία: η βάση για την εκτέλεση μικροϋπηρεσιών σε απομόνωση
Η τεχνολογία κοντέινερ έχει γίνει η ιδανική υποστήριξη για μικροϋπηρεσίες επειδή Σας επιτρέπει να συσκευάσετε μια εφαρμογή και όλες τις εξαρτήσεις της σε μια τυποποιημένη και φορητή μονάδα.Αντί να εγκαθίστανται βιβλιοθήκες, χρόνοι εκτέλεσης και εργαλεία σε κάθε διακομιστή, όλα μεταφέρονται μέσα στο κοντέινερ.
Ένα κοντέινερ είναι, ουσιαστικά, μια ελαφριά μορφή εικονικοποίησης σε επίπεδο λειτουργικού συστήματος: μοιράζεται τον πυρήνα κεντρικού υπολογιστή αλλά εκτελεί διεργασίες σε απομονωμένους χώρους ονομάτων και με πόρους περιορισμένους από cgroups, γεγονός που τις κάνει να εκκινούν γρήγορα και να καταναλώνουν λιγότερο από μια εικονική μηχανή.
Μεταξύ των βασικών ιδιοτήτων του είναι η μόνωση, φορητότητα, ελαφρότητα και αρθρωτότηταΚάθε μικρουπηρεσία που εκτελείται στο δικό της container γίνεται ευκολότερη στην ανάπτυξη, τη διακοπή, την ενημέρωση ή την αντιγραφή, ταιριάζοντας τέλεια με τις αρχές των κατανεμημένων αρχιτεκτονικών.
Σε σύγκριση με το εικονικές μηχανές για παραγωγήτα δοχεία Δεν χρειάζονται ένα πλήρες λειτουργικό σύστημα ανά περίπτωση.αλλά μάλλον να μοιράζονται αυτό του κεντρικού υπολογιστή. Αυτό μειώνει δραστικά το μέγεθος των εικόνων και El tiempo de εκκίνησηεπιτρέποντάς σας να σηκώνετε ή να καταστρέφετε δοχεία σε δευτερόλεπτα.
Docker: η πλατφόρμα αναφοράς για την εμπορευματοποίηση μικρουπηρεσιών
Το Docker είναι το πιο δημοφιλές εργαλείο για εργασία με κοντέινερ, επειδή Διευκολύνει τη δημιουργία, τη συσκευασία, τη διανομή και την εκτέλεση εφαρμογών σε κοντέινερ. τόσο σε περιβάλλοντα ανάπτυξης όσο και σε δοκιμές και παραγωγή.
Η κεντρική τους ιδέα είναι να συσκευάσουν το λογισμικό σε Εικόνες DockerΑυτά είναι αμετάβλητα αντικείμενα που περιλαμβάνουν τον κώδικα της εφαρμογής, τις βιβλιοθήκες που χρειάζεται, τα εργαλεία συστήματος και τις βασικές διαμορφώσεις. Οι εφαρμογές δημιουργούνται από αυτές τις εικόνες. δοχεία σε λειτουργία, τα οποία είναι μεμονωμένα παραδείγματα που βασίζονται σε αυτήν την εικόνα.
Η κατασκευή εικόνας ορίζεται σε ένα Dockerfile, ένα αρχείο κειμένου που καθορίζει οδηγίες όπως η βασική εικόνα, ο κατάλογος εργασίας, ποια αρχεία θα αντιγραφούν, ποιες εξαρτήσεις θα εγκατασταθούν, ποιες θύρες θα εκτεθούν και ποια εντολή θα εκτελεστεί κατά την εκκίνηση του κοντέινερ.
Φανταστείτε ότι έχετε ένα API γραμμένο σε Node.js. Θα μπορούσατε να δημιουργήσετε ένα Dockerfile παρόμοιο με το ακόλουθο, όπου Ξεκινώντας με μια επίσημη εικόνα Node, τα αρχεία αντιγράφονται, οι εξαρτήσεις εγκαθίστανται και ορίζεται η εντολή εκκίνησης.:
FROM node:14
WORKDIR /app
COPY . .
RUN npm install
EXPOSE 3000
CMD
Αυτό το αρχείο υποδεικνύει ότι η εφαρμογή θα εκτελεστεί στον κατάλογο /app μέσα στο κοντέινερ, ότι οι εξαρτήσεις θα εγκατασταθούν με npm, ότι η θύρα 3000 θα είναι εκτεθειμένη και ότι, κατά την εκκίνηση του κοντέινερ, θα εκτελεστεί έναρξη npm.
Για να δημιουργήσετε και να εκκινήσετε αυτό το κοντέινερ, απλώς εκτελέστε την εντολή από τον φάκελο του έργου. κατασκευή λιμενεργατών και μετά τρέξιμο λιμανιούχαρτογράφηση των θυρών για να επιτρέπεται η πρόσβαση από τον κεντρικό υπολογιστή ή για χρήση σε εφαρμογές πολλαπλών κοντέινερ docker-compose:
docker build -t mi-app .
docker run -p 3000:3000 mi-app
Χάρη σε αυτό το μοντέλο, Το κλασικό πρόβλημα «λειτουργεί στο μηχάνημά μου» μειώνεται στο ελάχιστο.Επειδή το περιβάλλον εκτέλεσης ταξιδεύει μαζί με την εφαρμογή. Επιπλέον, το Docker ενσωματώνεται άψογα με συστήματα CI/CD, ιδιωτικά μητρώα και εργαλεία ενορχήστρωσης όπως το Kubernetes.
Βασικά στοιχεία του Docker και ο ρόλος τους στις μικροϋπηρεσίες
Σε μια τυπική ανάπτυξη, μιλάμε για ένα Docker Hostπου είναι το σύστημα (φυσικό ή εικονικό) όπου είναι εγκατεστημένο το Docker· εκτελείται πάνω από αυτό. Docker Engine, ο δαίμονας που διαχειρίζεται εικόνες, δίκτυα, τόμους και τον κύκλο ζωής των κοντέινερ.
Τα δοχεία περιέχουν το εφαρμογή και οι εξαρτήσεις της συσκευασμένες σε μια εικόναΑυτό επιτρέπει σε οποιονδήποτε διακομιστή με Docker να εκτελεί με συνέπεια αυτήν την εικόνα. Αυτή η συνέπεια είναι κρίσιμη όταν έχετε αναπτύξει πολλές μικρουπηρεσίες σε διάφορα περιβάλλοντα (ανάπτυξη, διασφάλιση ποιότητας, παραγωγή κ.λπ.).
Ανάμεσα στα πιο ενδιαφέροντα πλεονεκτήματα του Docker είναι τα φορητότητα μεταξύ περιβαλλόντων, αυτοματοποίηση ανάπτυξης, αρθρωτή διαδικασία και υποστήριξη για layering και έλεγχο έκδοσης σε εικόνεςγεγονός που διευκολύνει την αντιστροφή των αλλαγών και τη βελτιστοποίηση του αποθήκευση.
Kubernetes: ο ενορχηστρωτής για τη διαχείριση εκατοντάδων κοντέινερ
Όταν μεταβαίνετε από λίγα δοχεία σε δεκάδες ή εκατοντάδες, Η διαχείρισή τους χειροκίνητα καταλήγει σε τρέλαΕκεί έρχεται το Kubernetes, μια πλατφόρμα ανοιχτού κώδικα που έχει σχεδιαστεί για να ενορχηστρώνει κοντέινερ σε μεγάλη κλίμακα.
Το Kubernetes αυτοματοποιεί κρίσιμες εργασίες όπως ανάπτυξη, κλιμάκωση, αποκατάσταση σφαλμάτων, διαμόρφωση δικτύου και αποθήκευση εφαρμογών σε κοντέινερ. Έχει σχεδιαστεί για να λειτουργεί σε δημόσια cloud, ιδιωτικά cloud, υβριδικά περιβάλλοντα, ακόμη και σε εσωτερικές εγκαταστάσεις.
Εστιάζεται στη διαχείριση συμπλεγμάτων που αποτελούνται από διάφορους κόμβους (μηχανές) όπου εκτελούνται κοντέινερ. Στόχος είναι να διασφαλιστεί ότι οι εφαρμογές βρίσκονται πάντα στην επιθυμητή κατάσταση: αριθμός αντιγράφων, ανεπτυγμένες εκδόσεις, κατανεμημένοι πόροι και συνδεσιμότητα μεταξύ υπηρεσιών.
Βασικά στοιχεία του Kubernetes
Η μικρότερη μονάδα στο Kubernetes είναι η ΤσόφλιΈνα Pod αντιπροσωπεύει μία ή περισσότερες παρουσίες κοντέινερ που πρέπει να εκτελούνται μαζί (για παράδειγμα, ένα κοντέινερ εφαρμογής και ένα κοντέινερ sidecar για καταγραφή). Τα Pod είναι εφήμερα. Δημιουργούνται, καταστρέφονται και αντικαθίστανται ανάλογα με τις ανάγκες του cluster..
Για να εκθέσετε τα Pods σας, το Kubernetes προσφέρει τον πόρο Υπηρεσίατο οποίο λειτουργεί ως επίπεδο αφαίρεσης δικτύου. Μια Υπηρεσία ομαδοποιεί ένα σύνολο Pods και Παρέχει μια σταθερή διεύθυνση IP, ένα όνομα DNS και εσωτερική εξισορρόπηση φόρτου.έτσι ώστε οι πελάτες να μην χρειάζεται να γνωρίζουν τις λεπτομέρειες κάθε Pod.
Ο πόρος Ανάπτυξη Χρησιμοποιείται για να ορίσει τον τρόπο με τον οποίο θα πρέπει να αναπτύσσονται και να ενημερώνονται τα Pods: πόσα αντίγραφα, ποια εικόνα θα χρησιμοποιηθεί, ποιες ετικέτες θα εφαρμοστούν και ποια στρατηγική ενημέρωσης θα ακολουθηθεί. Το Kubernetes το χειρίζεται αυτό. να διατηρείτε πάντα τον επιθυμητό αριθμό Pods σε λειτουργία και για να εκτελείτε κυλιόμενες ενημερώσεις ή επαναφορές όταν αλλάζετε τη διαμόρφωση.
Υπάρχουν επίσης πόροι όπως ConfigMap και SecretΑυτές οι λειτουργίες σάς επιτρέπουν να εξωτερικεύετε τη διαμόρφωση και να αποθηκεύετε ευαίσθητα δεδομένα (κωδικούς πρόσβασης, διακριτικά, κλειδιά API) χωρίς να χρειάζεται να τα συσκευάζετε μέσα στις εικόνες. Αυτό απλοποιεί σημαντικά τη διαχείριση ασφαλούς διαμόρφωσης σε διαφορετικά περιβάλλοντα.
Πώς να οργανώσετε ένα σύμπλεγμα Kubernetes
Η «κεφαλή» του συμπλέγματος είναι η Σχέδιο ελέγχου Kubernetesτο οποίο ομαδοποιεί διάφορα στοιχεία που είναι υπεύθυνα για την ενορχήστρωση ολόκληρου του συστήματος. Μεταξύ αυτών είναι το Διακομιστής APIη οποία είναι η πύλη για τη διαχείριση του συμπλέγματος. Οποιαδήποτε ενέργεια (δημιουργία ανάπτυξης, καταχώριση Pods, τροποποίηση υπηρεσίας) διέρχεται από αυτό το API.
El Scheduler Είναι υπεύθυνο για την απόφαση σχετικά με τον κόμβο που εκτελεί κάθε Pod, λαμβάνοντας υπόψη τους διαθέσιμους πόρους, τις συγγένειες και τους περιορισμούς. Διευθυντής Ελεγκτή Παρακολουθήστε την κατάσταση του συμπλέγματος και λάβετε μέτρα για να διασφαλίσετε ότι η πραγματικότητα ταιριάζει με αυτό που έχετε δηλώσει στα μανιφέστα (για παράδειγμα, δημιουργήστε νέα Pods εάν υπάρχουν λιγότερα από αυτά που ζητήσατε).
Η αποθήκευση κατάστασης ανατίθεται σε κλπΜια κατανεμημένη βάση δεδομένων αποθηκεύει τη διαμόρφωση και τις πληροφορίες για όλους τους πόρους του συμπλέγματος. Επιπλέον, διεργασίες όπως οι ακόλουθες εκτελούνται σε κάθε κόμβο εργασίας: kubelet (πράκτορας που επικοινωνεί τον κόμβο με τον διακομιστή API), ο kube-proxy (το οποίο διαχειρίζεται την κίνηση δικτύου και την εξισορρόπηση φορτίου) και το χρόνος εκτέλεσης κοντέινερ (Docker, container, CRI-O, κ.λπ.).
Ανάπτυξη μικροϋπηρεσιών στο Kubernetes με αρχεία YAML
Για να αναπτύξετε μια μικρουπηρεσία στο Kubernetes, είναι σύνηθες να την περιγράφετε με ένα Μανιφέστο YAML, όπου ορίζετε την Ανάπτυξη (πρότυπο Pod, εικόνα, θύρες, αριθμός αντιγράφων, ετικέτες) και την αντίστοιχη Υπηρεσία για να την εκθέσετε εντός ή εκτός του συμπλέγματος.
Ένα βασικό παράδειγμα ανάπτυξης για μια εφαρμογή που ονομάζεται «my-app» μπορεί να μοιάζει κάπως έτσι, όπου Ορίζονται τρία αντίγραφα και η θύρα 3000 ως θύρα κοντέινερ:
apiVersion: apps/v1
kind: Deployment
metadata:
name: mi-app
spec:
replicas: 3
selector:
matchLabels:
app: mi-app
template:
metadata:
labels:
app: mi-app
spec:
containers:
- name: mi-app
image: mi-app:latest
ports:
- containerPort: 3000
Αυτό το μανιφέστο υποδεικνύει ότι το σύμπλεγμα πρέπει να διατηρήσει τρία Pods σε λειτουργία Με την εικόνα «my-app:latest», όλα έχουν την ετικέτα app=my-app, έτσι ώστε μια Υπηρεσία να μπορεί να τα εντοπίσει και να κατανείμει την επισκεψιμότητα μεταξύ τους. Το Kubernetes χειρίζεται αυτόματα τη λογική για την κλιμάκωση, τις ενημερώσεις και την αντικατάσταση Pods σε περίπτωση βλάβης.
Μαζί με τις αναπτύξεις, είναι σύνηθες να ορίζονται υπηρεσίες τύπου ClusterIP, NodePort ή LoadBalancerΑνάλογα με το αν η μικρουπηρεσία θα πρέπει να είναι προσβάσιμη μόνο εντός του συμπλέγματος, από τους κόμβους ή από το διαδίκτυο, όλη αυτή η διαμόρφωση διαμορφώνεται σε αποθετήρια, ενσωματώνοντας απρόσκοπτα τους αγωγούς CI/CD.
Κλιμάκωση, αναβαθμίσεις και αυτοθεραπεία στο Kubernetes
Ένας από τους σημαντικότερους λόγους για να χρησιμοποιήσετε το Kubernetes είναι η ικανότητά του να κλιμάκωση και ενημέρωση μικρουπηρεσιών χωρίς διακοπή της εφαρμογήςΜπορείτε να αλλάξετε τον αριθμό των αντιγράφων στο μανιφέστο (ή με μια εντολή kubectl) και το σύμπλεγμα θα φροντίσει για τη δημιουργία ή την αφαίρεση Pods μέχρι να επιτευχθεί η επιθυμητή τιμή.
Αυτή η κλιμάκωση μπορεί να είναι χειροκίνητη ή αυτόματη, χρησιμοποιώντας πόρους όπως Αυτόματη κλίμακα οριζόντιας βάσης (HPA)Αυτή η λειτουργία προσαρμόζει δυναμικά τα αντίγραφα με βάση μετρήσεις όπως η CPU ή η μνήμη. Έτσι, η χωρητικότητα αυξάνεται σε περιόδους υψηλής ζήτησης και οι πόροι απελευθερώνονται όταν μειώνεται το φόρτο.
Όσον αφορά τις ενημερώσεις, το Kubernetes υλοποιεί κυλιόμενες ενημερώσεις Από προεπιλογή: δημιουργεί Pods με τη νέα έκδοση και διαγράφει σταδιακά αυτά από την προηγούμενη έκδοση, χωρίς να κάνει απότομη περικοπή. Εάν κάτι πάει στραβά, ένα rollback Σας επιτρέπει να ανακτήσετε γρήγορα την προηγούμενη έκδοση.
Μια άλλη κρίσιμη λειτουργικότητα είναι η αυτοεπισκευήΕάν ένα κοντέινερ ή ένα Pod τερματιστεί, το Kubernetes το αναδημιουργεί αυτόματα. Εάν ένας κόμβος σταματήσει να ανταποκρίνεται, τα Pods που επηρεάζονται επαναπρογραμματίζονται σε άλλους διαθέσιμους κόμβους, διατηρώντας την εφαρμογή σε λειτουργία.
Παρακολούθηση και παρατηρησιμότητα μικροϋπηρεσιών στο Kubernetes
Για να λειτουργήσει σωστά ένα περιβάλλον μικροϋπηρεσιών, δεν αρκεί απλώς η ανάπτυξη και η κλιμάκωση: Χρειάζεστε ορατότητα σε πραγματικό χρόνο στην απόδοση και την κατάσταση των υπηρεσιώνΣτο Kubernetes, είναι πολύ συνηθισμένο να ενσωματώνετε εργαλεία όπως το Prometheus για τη συλλογή μετρήσεων και το Grafana για την οπτικοποίησή τους.
Το Prometheus χειρίζεται την "ανάκτηση" μετρήσεων από τα Pods, τους κόμβους και τα στοιχεία του cluster, αποθηκεύοντάς τα και επιτρέποντάς σας να ορίσετε ειδοποιήσεις σχετικά με αυτά. Σε συνδυασμό με το Grafana, μπορείτε να δημιουργήσετε πίνακες ελέγχου όπου Παρακολούθηση χρήσης CPU, μνήμης, σφαλμάτων HTTP, καθυστέρησης, αριθμού αντιγράφων ή κατάστασης κόμβου πολύ καθαρά.
Επιπλέον, το kubectl προσφέρει εντολές Για να ελέγξετε την κατάσταση των Deployments, Services, Pods και άλλων πόρων, ανατρέξτε στην ενότητα κορμούςΑυτό περιλαμβάνει την περιγραφή συμβάντων ή την πρόσβαση σε κοντέινερ για εντοπισμό σφαλμάτων. Όλα αυτά αποτελούν μέρος μιας στρατηγικής παρατηρησιμότητας που, στις μικροϋπηρεσίες, Δεν είναι προαιρετικό αν θέλετε να κοιμάστε ήσυχοι..
Σχέση μεταξύ μικροϋπηρεσιών, Docker και Kubernetes
Οι Microservices, Docker και Kubernetes ταιριάζουν μεταξύ τους σαν κομμάτια του ίδιου παζλ: Η αρχιτεκτονική μικρουπηρεσιών ορίζει τον τρόπο με τον οποίο σχεδιάζετε την εφαρμογή, το Docker χειρίζεται τη συσκευασία και την εκτέλεση κάθε υπηρεσίας και το Kubernetes ενορχηστρώνει όλα αυτά τα κοντέινερ. σε ένα σύμπλεγμα.
Κάθε μικρουπηρεσία είναι ενθυλακωμένη σε μια εικόνα Docker που περιλαμβάνει τον κώδικα και τις εξαρτήσεις τηςΑυτό διασφαλίζει ότι συμπεριφέρεται με τον ίδιο τρόπο στον φορητό υπολογιστή ενός προγραμματιστή, σε ένα περιβάλλον δοκιμών ή στην παραγωγή cloud. Αυτή η συνεπής συσκευασία είναι ζωτικής σημασίας για τη φιλοσοφία DevOps.
Από την πλευρά του, το Kubernetes λειτουργεί ως ενορχηστρωτής κοντέινερΑποφασίζει πόσες παρουσίες κάθε μικροϋπηρεσίας θα πρέπει να εκτελούνται, πού βρίσκονται, πώς εξισορροπείται η κίνηση σε αυτές, πώς ανακάμπτουν από αποτυχίες και πώς κλιμακώνονται όταν η ζήτηση αυξάνεται ή μειώνεται.
Σε μια εφαρμογή ηλεκτρονικού εμπορίου, για παράδειγμα, θα μπορούσατε να έχετε μικροϋπηρεσίες για έλεγχο ταυτότητας, κατάλογο, καλάθι αγορών και πληρωμές, καθεμία με τη δική της εικόνα Docker και ανάπτυξη Kubernetes. Με αυτόν τον τρόπο, Μπορείτε να κλιμακώσετε τον κατάλογο σε μαζικές καμπάνιες ή πληρωμές σε κρίσιμες στιγμές χωρίς να επηρεάσετε τα υπόλοιπακαι να οργανώσει ολόκληρο τον κύκλο ζωής του, από τους αγωγούς CI/CD έως την παρακολούθηση μετά την παραγωγή.
Εγκατάσταση Docker και Kubernetes σε Windows
Αν εργάζεστε με Windows, ο ευκολότερος τρόπος για να ξεκινήσετε είναι να εγκαταστήσετε Επιφάνεια εργασίας Dockerπου περιλαμβάνει τη μηχανή Docker και πρόσθετα εργαλεία, ακόμη και επιλογές για να ενεργοποιήσετε το Kubernetes ενσωματωμένο στο μηχάνημά σας.
Η τυπική διαδικασία περιλαμβάνει Κατεβάστε το Docker Desktop από την επίσημη ιστοσελίδαΕκτελέστε το πρόγραμμα εγκατάστασης (Docker Desktop Installer.exe) και ακολουθήστε τον οδηγό. Κατά την εγκατάσταση, μπορείτε να επιλέξετε μεταξύ της χρήσης Hyper-V ή WSL 2 ως τεχνολογία εικονικοποίησης· εάν υπάρχει μόνο μία διαθέσιμη, αυτή θα χρησιμοποιηθεί.
Μετά την επανεκκίνηση του συστήματος, το άνοιγμα του Docker Desktop αρχικοποιεί το περιβάλλον κοντέινερ. Εάν η εικονικοποίηση δεν ήταν ενεργοποιημένη, το ίδιο το πρόγραμμα εγκατάστασης συνήθως προσφέρει ενεργοποιήστε το αυτόματαΑπό εκεί μπορείτε να εκκινήσετε κοντέινερ, για παράδειγμα, Nginx ή τις δικές σας εφαρμογές.
Για να χρησιμοποιήσετε το Kubernetes σε Windows, πρέπει πρώτα να έχετε ενεργοποιήσει τις δυνατότητες Docker και εικονικοποίησης. Στη συνέχεια, μπορείτε να ενεργοποιήσετε το Kubernetes από το Docker Desktop ή εγκατάσταση και ρύθμιση παραμέτρων του kubectl για τη διαχείριση εξωτερικών συμπλεγμάτων και, εάν είναι απαραίτητο, την ανάπτυξη του πίνακα ελέγχου Kubernetes μέσω ενός απομακρυσμένου μανιφέστου.
Μόλις ολοκληρωθεί η ρύθμιση παραμέτρων, θα μπορείτε να αποκτήσετε πρόσβαση στον πίνακα ελέγχου μέσω ενός τοπικού διακομιστή μεσολάβησης, χρησιμοποιώντας ένα διακριτικό ελέγχου ταυτότητας που δημιουργείται με το kubectl και δείχνει, για παράδειγμα, στο αρχείο ρύθμισης παραμέτρων. .kube/config για να διαχειριστείτε την πρόσβαση στο σύμπλεγμα από το πρόγραμμα περιήγησης.
Εγκατάσταση Docker και Kubernetes σε Linux
Σε συστήματα Linux, όπως το Ubuntu, η εγκατάσταση του Docker είναι συνήθως αρκετά απλή: Τα πακέτα ενημερώνονται, εγκαθίσταται η μηχανή Docker και ελέγχεται το περιβάλλον για να διασφαλιστεί ότι λειτουργεί σωστά. εκτέλεση ενός δοκιμαστικού κοντέινερ.
Τα τυπικά βήματα περιλαμβάνουν την ενημέρωση του συστήματος με apt-get update και apt-get upgradeΑφαιρέστε τυχόν προηγούμενες εκδόσεις του Docker Desktop, εάν υπάρχουν, και στη συνέχεια εγκαταστήστε τα docker-ce, docker-ce-cli, containerd.io και το πρόσθετο docker-compose από τα επίσημα αποθετήρια ή καθορίζοντας την επιθυμητή έκδοση.
Για να επαληθευτεί ότι όλα είναι εντάξει, συνήθως εκκινείται ένα κοντέινερ "hello-world". Κατεβάζει μια ελάχιστη εικόνα και την εκτελεί.Εάν το μήνυμα εμφανίζεται σωστά, έχετε ενεργοποιήσει το Docker και είστε έτοιμοι να ξεκινήσετε την αποθήκευση σε κοντέινερ των μικρουπηρεσιών σας.
Όσο για το Kubernetes, σε Linux μπορεί να εγκατασταθεί χρησιμοποιώντας εργαλεία όπως kubeadmΗ τυπική ροή εργασίας περιλαμβάνει την προσθήκη του κλειδιού αποθετηρίου Kubernetes, τη διαμόρφωση του αρχείου λίστας πακέτων, την εγκατάσταση του kubeadm και τον έλεγχο της έκδοσής του.
Στη συνέχεια, το σύμπλεγμα αρχικοποιείται στον κύριο κόμβο με kubeadm init (καθορίζοντας το εύρος δικτύου για τα Pods), ανακτάται η εντολή "join" έτσι ώστε οι κόμβοι εργασίας να ενταχθούν στο σύμπλεγμα και η τοπική πρόσβαση να διαμορφωθεί δημιουργώντας τον κατάλογο $HOME/.kubeαντιγράφοντας το αρχείο admin.conf και προσαρμόζοντας τα δικαιώματα.
Με αυτό, θα έχετε ένα βασικό σύμπλεγμα έτοιμο για ανάπτυξη μικρουπηρεσιών σε κοντέινερ, εγκαταστήστε ένα δίκτυο Pods (Flannel, Calico, κ.λπ.) και ξεκινήστε να εργάζεστε με Deployments, Services και τους υπόλοιπους πόρους του Kubernetes.
Βέλτιστες πρακτικές και συστάσεις για τη χρήση του Docker και του Kubernetes
Για να αξιοποιήσετε στο έπακρο αυτά τα περιβάλλοντα, συνιστάται να ακολουθήσετε μια σειρά από βέλτιστες πρακτικές με το Docker, ξεκινώντας με χρησιμοποιήστε επίσημες ή αξιόπιστες εικόνες, είτε από το Docker Hub είτε από επαληθευμένα ιδιωτικά αποθετήρια, για τη μείωση των κινδύνων ασφαλείας.
Συνιστάται ιδιαίτερα βελτιστοποίηση του μεγέθους της εικόνας χρησιμοποιώντας ελαφριές βασικές εικόνες, πολυβάθμιες κατασκευές και αφαίρεση προσωρινά αρχεία ή περιττά αντικείμενα. Οι μικρότερες εικόνες κατεβαίνουν πιο γρήγορα και επιταχύνουν τις αναπτύξεις στο Kubernetes.
Ένα άλλο βασικό σημείο είναι η χρήση όγκοι για διατήρηση δεδομένωνΑντί της αποθήκευσης πληροφοριών μέσα σε κοντέινερ, η απώλεια ή η αναδημιουργία ενός κοντέινερ δεν συνεπάγεται απώλεια σημαντικών δεδομένων.
Ο περιορισμός των πόρων που έχουν εκχωρηθεί σε κάθε κοντέινερ (CPU, μνήμη, I/O) βοηθάει στο να αποτρέψτε μια μεμονωμένη υπηρεσία από το να μονοπωλήσει τον κεντρικό υπολογιστή και να υποβαθμίσουν τα υπόλοιπα. Επιπλέον, τα κοντέινερ πρέπει να παρακολουθούνται με εργαλεία όπως το Docker Stats ή πιο προηγμένες λύσεις για τη διατήρηση του ελέγχου στην παραγωγή.
Με το Kubernetes, είναι απαραίτητο να κατανοήσετε την αρχιτεκτονική του cluster και τα στοιχεία του πριν ξεκινήσετε την παραγωγή. Αυτό μειώνει πολλούς πονοκεφάλους.
Είναι επίσης μια καλή ιδέα αυτοματοποιήστε όσο το δυνατόν περισσότεροΧρησιμοποιήστε ελεγκτές αναπαραγωγής, αυτόματους κλιμακωτές και εργασίες για μαζικές μεταφορτώσεις, επωφεληθείτε από τις κυλιόμενες ενημερώσεις και τις επαναφορές και ορίστε δηλωτικές μανιφέστες με βάση τις εκδόσεις σε αποθετήρια Git.
Η ασφάλεια πρέπει πάντα να αποτελεί ύψιστη προτεραιότητα: Περιορίστε την πρόσβαση στον διακομιστή API, διαχειριστείτε τα διαπιστευτήρια χρησιμοποιώντας μυστικά, κρυπτογραφήστε δεδομένα κατά τη μεταφορά και σε κατάσταση αδράνειαςΕφαρμόζετε τακτικά ενημερώσεις κώδικα και ορίζετε πολιτικές δικτύου που περιορίζουν την επικοινωνία μεταξύ υπηρεσιών σύμφωνα με την αρχή των ελαχίστων προνομίων.
Τέλος, είναι απαραίτητο να υπάρχει καλά κεντρικά συστήματα παρακολούθησης και καταγραφήςκαθώς και με περιβάλλοντα προπαραγωγής όπου οι αλλαγές μπορούν να δοκιμαστούν διεξοδικά πριν εισαχθούν στο σύμπλεγμα παραγωγής, μειώνοντας τους κινδύνους και τις δυσάρεστες εκπλήξεις.
Αυτό το ολόκληρο οικοσύστημα μικροϋπηρεσιών, κοντέινερ Docker και ενορχήστρωσης Kubernetes σάς επιτρέπει να δημιουργείτε συστήματα που είναι πολύ πιο ευέλικτα, επεκτάσιμα και ανθεκτικά από τα παραδοσιακά μονόλιθα. Συνδυάζοντας μια καλά μελετημένη αρχιτεκτονική, κατάλληλα εργαλεία και βέλτιστες πρακτικές DevOps, μπορείτε να αναπτύξετε εφαρμογές που προσαρμόζονται απρόσκοπτα στις αλλαγές στο φόρτο εργασίας, ανακάμπτουν γρήγορα από αποτυχίες και είναι πιο εύκολο να εξελιχθούν με την πάροδο του χρόνου.
Παθιασμένος συγγραφέας για τον κόσμο των byte και της τεχνολογίας γενικότερα. Μου αρέσει να μοιράζομαι τις γνώσεις μου μέσω της γραφής, και αυτό θα κάνω σε αυτό το blog, θα σας δείξω όλα τα πιο ενδιαφέροντα πράγματα σχετικά με τα gadget, το λογισμικό, το υλικό, τις τεχνολογικές τάσεις και πολλά άλλα. Στόχος μου είναι να σας βοηθήσω να περιηγηθείτε στον ψηφιακό κόσμο με απλό και διασκεδαστικό τρόπο.
