Σε μια εποχή που τα πάντα μπορούν να τρέχουν στο cloud, δύο λέξεις είναι οι πιο διαδεδομένες στον τομέα του Cloud Computing: Kubernetes και Docker.

Οι τεχνολογίες των container έχουν κατακτήσει τον κλάδο των web services οπότε μια από τις πιο κοινές διαδικτυακές αναζητήσεις σχετικά με αυτά είναι το «Kubernetes vs Docker».

Η συνάφεια και η ακρίβεια αυτής της σύγκρισης είναι αμφισβητήσιμη, καθώς δεν συγκρίνει πραγματικά όμοια πράγματα. Σε αυτό το άρθρο, θα προσπαθήσουμε να διευκρινίσουμε και τους δύο όρους, να παρουσιάσουμε τις ομοιότητες και τις διαφορές τους και να βοηθήσουμε τους νέους SysAdmin και DevOPs αλλά και τους απλούς χρήστες να κατανοήσουν καλύτερα τους όρους αυτούς στο συνεχώς αναπτυσσόμενο οικοσύστημα των Containers.

Advertisements

Τι είναι τα Containers;

Ας ξεκινήσουμε με έναν σύντομο ορισμό των Containers.

Τα Containers είναι ένα λογισμικό πακεταρισμένο με τις εξαρτήσεις του με τέτοιο τρόπο που το ανεξαρτητοποιεί από την υποδομή στην οποία λειτουργεί.

Αυτό έχει το εξής σημαντικό πλεονέκτημα :

Μια εφαρμογή σε container μπορεί να εγκατασταθεί εύκολα και με συνέπεια σε ένα τοπικό μηχάνημα, ένα ιδιωτικό data center, ένα δημόσιο cloud ή οποιαδήποτε άλλη υποδομή υπολογιστών.

Συχνά τα containers συγκρίνονται με τις εικονικές μηχανές (VM), καθώς παρέχουν παρόμοιες δυνατότητες. Τα container είναι πιο μικρά, ελαφριά και φορητά από ότι τα VM, καθώς «εικονικοποιούν» μόνο τα απαραίτητα για το λογισμικό, συστατικά από το λειτουργικό σύστημα αντί για όλο το λειτουργικό.

Τα κοντέινερ είναι ένα εγγενές χαρακτηριστικό του πυρήνα Linux από την συνεισφορά των cgroups από την Google το 2006.

Για την ιστορική αναδρομή και το πως φτάσαμε από τα λειτουργικά, τα VM σε Containers διαβάστε την εισαγωγή μας :

Τι είναι το Docker;

Το Docker κυκλοφόρησε το 2013 από την Docker, Inc. ως ανοιχτού κώδικα πλατφόρμα δημιουργίας Container.

Υποσχέθηκε έναν εύκολο τρόπο κατασκευής και εγκατάστασης Container στο cloud ή στις τοπικές εγκαταστάσεις (on-premise) και είναι συμβατό με Linux και Windows.

Παρόλο που το Docker δεν εισήγαγε μια νέα ιδέα, το μήνυμα της για τον «νέο τρόπο ανάπτυξης – παράδοσης – κατανάλωσης υπηρεσιών λογισμικού» είχαν άμεση απήχηση στους χρήστες με αποτέλεσμα το Docker σύντομα έγινε σύντομο των Container και η προεπιλεγμένη μορφή για Container.

Ρωτήστε φοιτητές πληροφορικής όταν παραδίδουν κώδικα στον καθηγητή τους για να το τρέξει στον υπολογιστή του και θα καταλάβετε το άγχος τους… όπως στην παρακάτω εικόνα:

Το Docker βελτιστοποιεί τη δημιουργία κοντέινερ με εργαλεία όπως το dockerfile και το docker-compose. Βοηθά επίσης τους προγραμματιστές να μετακυλίουν το φόρτο εργασίας από το τοπικό τους περιβάλλον, σε cloud υπηρεσίες για να τεστάρουν την εφαρμογή τους, αφαιρώντας τις ασυνέπειες και τις εξαρτήσεις μεταξύ τοπικού – testing – παραγωγικού περιβάλλοντος. Αυτό έχει ως αποτέλεσμα ταχύτερη παράδοση του λογισμικού και αύξηση της ποιότητας.

Τι είναι το Kubernetes;

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

Ως αποτέλεσμα, η βιομηχανία σημείωσε σημαντική αύξηση στη χρήση conteiner και, κατά συνέπεια, οι επιχειρήσεις αντιμετώπισαν τώρα νέες προκλήσεις στη διαχείριση και την συντήρησή τους.

Καὶ ἐγένετο το Kubernetes (εκ του Κυβερνήτης), ένα έργο ανοιχτού κώδικα που διατέθηκε από την Google το 2014. Το Kubernetes είναι ένας ενορχηστρωτής πλατφορμών που διαχειρίζονται container, όπως το Docker.

Το Kubernetes επιτρέπει στους χρήστες να καθορίσουν την επιθυμητή κατάσταση της αρχιτεκτονικής της υποδομής των container τους. Είναι σημαντικό ο αναγνώστης αν κατανοήσει το «επιθυμητή κατάσταση». Για παράδειγμα, αν ο διαχειριστής επιθυμεί ένα WordPress site να είναι κατανεμημένο σε 4 σημεία του πλανήτη με χ ψ ζ ρυθμίσεις και να κατανέμει τον φόρτο εργασίας, το Kubernetes είναι υποχρεωμένο να τηρεί αυτή την «συμφωνία» που έχει υπογράψει με τον διαχειριστή. Έτσι, αν το Kubernetes δει ότι κάποιο στοιχείο από την συμφωνία δεν είναι στην κατάσταση που οφείλει να είναι τότε θα πρέπει αμέσως να δημιουργήσει π.χ. ένα αντίγραφο του στοιχείου και να καταστρέψει το προβληματικό μέχρι να ικανοποιηθεί πλήρως αρχική συμφωνία.

Στο παρακάτω βίντεο, ο Kelsey Hightower (ένας από τους καλύτερους «παρουσιαστές» για μένα) παρουσιάζει με απλό και χιουμοριστικό τρόπο το Kubernetes στους παραδοσιακούς Sysadmin

Advertisements

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

Αυτό το επίπεδο αυτοματισμού έχει φέρει επανάσταση στον χώρο των container καθώς δημιούργησε το πλαίσιο για χαρακτηριστικά όπως scalability, monitoring και cross-platform deployments.

Ποια είναι η σχέση μεταξύ Docker και Kubernetes;

Αν λοιπόν το Docker είναι containers και το Kubernetes είναι container orchestration γιατί θα ρωτούσε κανείς «Πιο πρέπει να χρησιμοποιήσω… το Docker ή το Kubernetes»;

Στην πραγματικότητα, τα δύο εργαλεία είναι συμπληρωματικά μεταξύ τους και βοηθούν στη δημιουργία αρχιτεκτονικών που βασίζονται στο cloud ή σε microservices.

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

Το Kubernetes δεν χρησιμοποιείται για τη δημιουργία container εφαρμογής. Τα container που έχουν δημιουργηθεί με το Docker ή οποιαδήποτε από τις εναλλακτικές του (Podman κανείς;) μπορούν να διαχειριστούν, να κλιμακωθούν και να μετακινηθούν με το Kubernetes, το οποίο θα διασφαλίζει επίσης τη διαχείριση εφεδρείας και τη συντήρηση της υγείας του συστήματος.

κύκλος ζωής container

Υπάρχουν μεγάλα οφέλη από τη χρήση του Kubernetes με το Docker:

  • Οι εφαρμογές είναι ευκολότερες στη συντήρηση καθώς χωρίζονται σε μικρότερα μέρη.
  • Αυτά τα μέρη λειτουργούν σε μια υποδομή που είναι πιο στιβαρή και οι εφαρμογές είναι πολύ πιο διαθέσιμες
  • Οι εφαρμογές είναι σε θέση να χειρίζονται περισσότερο φορτίο κατ ‘απαίτηση, με αποτέλεσμα την βελτίωση της εμπειρίας των χρηστών και μείωση της σπατάλης πόρων. Καθώς οι εφαρμογές γίνονται πιο κλιμακούμενες, δεν χρειάζεται να εκχωρήσετε εκ των προτέρων πόρους εν αναμονή ωρών αιχμής φόρτωσης.

Τόσο το Docker όσο και το Kubernetes υποστηρίζονται από ισχυρές κοινότητες ανοιχτού κώδικα και αποτελούν μέρος του Cloud Native Computing Foundation (CNCF), ένα έργο ιδρύματος Linux που στοχεύει στην προώθηση τεχνολογιών container και στην τυποποίηση της βιομηχανίας με συγκεκριμένα πρότυπα.

Kubernetes vs Docker Swarm

Αφού έχουμε καταστήσει σαφείς τους λόγους για τους οποίους δεν είναι έγκυρη η σύγκριση του Kubernetes με το Docker ας δούμε μια δόκιμη σύγκριση. Για να συγκρίνουμε δύο παρόμοιες τεχνολογίες container, πρέπει να δούμε το Kubernetes vs Docker Swarm.

Το Docker Swarm είναι η λύση ενορχήστρωσης container της εταιρείας Docker, Inc. Το Swarm ενσωματώνεται στενά στο οικοσύστημα Docker και έχει το δικό του API. Αυτή η στενή ενσωμάτωση είναι ένα από τα πλεονεκτήματα του Swarm έναντι του Kubernetes, καθώς η μετάβαση σε αυτό από το Docker είναι αρκετά εύκολη. Το Kubernetes έχει το δικό του GUI, κερδίζοντας κάποιους παραπάνω πόντους στο μυαλό των χρηστών που ενδιαφέρονται να χρησιμοποιήσουν μια γραφική διεπαφή αντί για από τη γραμμή εντολών.

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

Advertisements

Επίλογος

Οι εφαρμογές σε container προσφέρουν επεκτασιμότητα, κλιμάκωση, απομόνωση και φορητότητα, ειδικά όταν συγκρίνονται με μονολιθικές λύσεις και εγκαταστάσεις σε εταιρικά περιβάλλοντα.

Το Docker παρέχει ένα ανοιχτό πρότυπο για τη «συσκευασία και τη διανομή εφαρμογών» σε container και αρκεί για την χρήση σε απλές περιπτώσεις χρήσης. Οι επιχειρήσεις που έχουν σύνθετες αρχιτεκτονικές εφαρμογών μετακινούνται στο Kubernetes για να χειριστούν τις ανάγκες κλιμάκωσης και ανθεκτικότητας μεταξύ υποδομών. Το Kubernetes αξιοποιεί ένα μεγάλο οικοσύστημα εργαλείων μαζί με τη διαρκής ενσωμάτωσης / διαρκής ανάπτυξη (CI / CD) και άλλες πρακτικές DevOps για ενορχήστρωση μεγάλων σετ container, από την ανάπτυξη έως την παραγωγή.

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

Για περισσότερα, σχετικά με τα container και την χρήση τους έχουμε γράψει σχετικά άρθρα τα οποία εμπλουτίζουμε διαρκώς:

οπότε γραφτείτε στο email ή προσθέστε το Cerebrux @ Google News ή ακολουθείστε μας στα social του Cerebrux.

Παραπομπές: