Διοικητές είναι το νέο παιδί στο μπλοκ, υπόσχεται να βοηθήσει στην ανάπτυξη εφαρμογών στο cloud και να τις κλιμακώσει πιο γρήγορα. Σήμερα, όταν αναπτύσσεται για μια αρχιτεκτονική μικροϋπηρεσιών, είναι αρκετά τυπικό να επιλέξετε το Scala για τη δημιουργία διακομιστών API.
Οι μικροϋπηρεσίες αντικαθιστούν τους κλασικούς μονολιθικούς διακομιστές back-end με πολλές ανεξάρτητες υπηρεσίες που επικοινωνούν μεταξύ τους και έχουν τις δικές τους διαδικασίες και πόρους.Εάν υπάρχει Σκάλα εφαρμογή στα σχέδιά σας και θέλετε κλίμακα σε σύννεφο, τότε βρίσκεστε στο σωστό μέρος. Σε αυτό το άρθρο θα δείξω βήμα προς βήμα πώς να πάρω μια γενική εφαρμογή Scala και να εφαρμόσω το Kubernetes με το Docker για να ξεκινήσω πολλές παρουσίες της εφαρμογής. Το τελικό αποτέλεσμα θα είναι μια μεμονωμένη εφαρμογή που θα χρησιμοποιείται ως πολλαπλές παρουσίες και θα ισορροπεί το φορτίο από το Kubernetes.
Όλα αυτά θα υλοποιηθούν με την απλή εισαγωγή του Κιτ πηγής Kubernetes στην εφαρμογή σας Scala. Λάβετε υπόψη ότι το κιτ κρύβει πολλές περίπλοκες λεπτομέρειες που σχετίζονται με την εγκατάσταση και τη διαμόρφωση, αλλά είναι αρκετά μικρό ώστε να είναι ευανάγνωστο και κατανοητό εάν θέλετε να αναλύσετε τι κάνει. Για απλότητα, θα αναπτύξουμε τα πάντα στο τοπικό σας μηχάνημα. Ωστόσο, η ίδια διαμόρφωση είναι κατάλληλη για ανάπτυξη πραγματικού κόσμου στο Kubernetes.
Πριν προχωρήσουμε στις λεπτομέρειες της εφαρμογής, ας συζητήσουμε τι είναι το Kubernetes και γιατί είναι σημαντικό.
Ίσως έχετε ήδη ακούσει για το Docker. Κατά μία έννοια, είναι μια ελαφριά εικονική μηχανή.
Για αυτούς τους λόγους, είναι ήδη ένα από τα πιο ευρέως χρησιμοποιούμενα εργαλεία για την ανάπτυξη εφαρμογών σε σύννεφα. Μια εικόνα Docker είναι πολύ εύκολη και γρήγορη στην κατασκευή και αναπαραγωγή, πολύ πιο εύκολη από μια παραδοσιακή εικονική μηχανή όπως VMWare, VirtualBox ή XEN.
Η Kubernetes συμπληρώνει το Docker, προσφέροντας ένα ολοκληρωμένο περιβάλλον για τη διαχείριση εφαρμογών που περιλαμβάνονται στο Docker. Χρησιμοποιώντας το Kubernetes, μπορείτε εύκολα να αναπτύξετε, να ρυθμίσετε, να ενορχηστρώσετε, να διαχειριστείτε και να παρακολουθήσετε εκατοντάδες ή και χιλιάδες εφαρμογές Docker.
Το Kubernetes είναι ένα εργαλείο ανοιχτού κώδικα που αναπτύχθηκε από την Google και έχει υιοθετηθεί από πολλούς άλλους προμηθευτές. Το Kubernetes διατίθεται εγγενώς στην πλατφόρμα cloud Google, αλλά και άλλοι προμηθευτές το έχουν υιοθετήσει και για τις υπηρεσίες cloud OpenShift. Μπορεί να βρεθεί σε Amazon AWS, Microsoft Azure, RedHat OpenShift και ακόμη περισσότερες τεχνολογίες cloud. Μπορούμε να πούμε ότι είναι σε καλή θέση για να γίνει πρότυπο για την ανάπτυξη εφαρμογών cloud.
Τώρα που καλύψαμε τα βασικά, ας δούμε αν έχετε εγκαταστήσει όλο το προαπαιτούμενο λογισμικό. Πρώτα απ 'όλα, χρειάζεστε Λιμενεργάτης . Εάν χρησιμοποιείτε Windows ή Mac, χρειάζεστε το Εργαλειοθήκη Docker . Εάν χρησιμοποιείτε Linux, πρέπει να εγκαταστήσετε το συγκεκριμένο πακέτο που παρέχεται από τη διανομή σας ή απλά ακολουθήστε τις επίσημες οδηγίες .
s body vs c body
Θα κωδικοποιήσουμε στη Σκάλα, η οποία είναι μια γλώσσα JVM. Φυσικά, χρειάζεστε το Java Development Kit και το εργαλείο scala SBT εγκατεστημένο και διαθέσιμο στην καθολική διαδρομή. Εάν είστε ήδη προγραμματιστής Scala, είναι πιθανό να έχετε ήδη εγκαταστήσει αυτά τα εργαλεία.
Εάν χρησιμοποιείτε Windows ή Mac, το Docker θα δημιουργήσει από προεπιλογή μια εικονική μηχανή που ονομάζεται default
με μόνο 1 GB μνήμης, η οποία μπορεί να είναι πολύ μικρή για την εκτέλεση Kubernetes. Από την εμπειρία μου, είχα προβλήματα με τις προεπιλεγμένες ρυθμίσεις. Σας συνιστώ να ανοίξετε το VirtualBox GUI, να επιλέξετε την εικονική σας μηχανή default
και να αλλάξετε τη μνήμη σε τουλάχιστον 2048MB.
Οι οδηγίες σε αυτό το σεμινάριο μπορούν να εφαρμοστούν σε οποιαδήποτε εφαρμογή ή έργο Scala. Για να δουλέψω αυτό το άρθρο για κάποιο κρέας, επέλεξα ένα παράδειγμα που χρησιμοποιείται πολύ συχνά για να δείξω μια απλή μικροϋπηρεσία REST στη Σκάλα, που ονομάζεται Akka HTTP . Σας συνιστώ να προσπαθήσετε να εφαρμόσετε το κιτ πηγής στο προτεινόμενο παράδειγμα πριν επιχειρήσετε να το χρησιμοποιήσετε στην εφαρμογή σας. Έχω δοκιμάσει το κιτ ενάντια στην εφαρμογή επίδειξης, αλλά δεν μπορώ να εγγυηθώ ότι δεν θα υπάρξουν διενέξεις με τον κωδικό σας.
Αρχικά, ξεκινάμε κλωνοποιώντας την εφαρμογή επίδειξης:
git clone https://github.com/theiterators/akka-http-microservice
Στη συνέχεια, ελέγξτε αν όλα λειτουργούν σωστά:
cd akka-http-microservice sbt run
Στη συνέχεια, αποκτήστε πρόσβαση στο http://localhost:9000/ip/8.8.8.8
και θα δείτε κάτι όπως στην ακόλουθη εικόνα:
Τώρα, μπορούμε να προσθέσουμε το κιτ πηγής με κάποια μαγεία Git:
git remote add ScalaGoodies https://github.com/sciabarra/ScalaGoodies git fetch --all git merge ScalaGoodies/kubernetes
Με αυτό, έχετε την επίδειξη που περιλαμβάνει το κιτ προέλευσης και είστε έτοιμοι να δοκιμάσετε. Ή μπορείτε ακόμη και να αντιγράψετε και να επικολλήσετε τον κώδικα από εκεί στην εφαρμογή σας.
Μόλις συγχωνεύσετε ή αντιγράψετε τα αρχεία στα έργα σας, είστε έτοιμοι να ξεκινήσετε.
Μόλις κατεβάσετε το κιτ, πρέπει να κατεβάσετε τα απαραίτητα kubectl
δυαδικό, εκτελώντας:
bin/install.sh
Αυτό το πρόγραμμα εγκατάστασης είναι αρκετά έξυπνο (ελπίζουμε) για λήψη του σωστού kubectl
δυαδικό για OSX, Linux ή Windows, ανάλογα με το σύστημά σας. Σημειώστε ότι ο εγκαταστάτης δούλεψε στα συστήματα που έχω. Αναφέρετε τυχόν προβλήματα, ώστε να μπορέσω να διορθώσω το κιτ.
Μόλις εγκαταστήσετε το kubectl
δυαδικό, μπορείτε να ξεκινήσετε ολόκληρο το Kubernetes στο τοπικό Docker. Απλά τρέχα:
Εκμάθηση angularjs για αρχάριους με παραδείγματα
bin/start-local-kube.sh
Την πρώτη φορά που εκτελείται, αυτή η εντολή θα κατεβάσει τις εικόνες ολόκληρης της στοίβας Kubernetes και ένα τοπικό μητρώο που απαιτείται για την αποθήκευση των εικόνων σας. Μπορεί να χρειαστεί λίγος χρόνος, οπότε παρακαλώ να είστε υπομονετικοί. Σημειώστε επίσης ότι χρειάζεται άμεση πρόσβαση στο Διαδίκτυο. Εάν βρίσκεστε πίσω από έναν διακομιστή μεσολάβησης, θα είναι πρόβλημα καθώς το κιτ δεν υποστηρίζει διακομιστές μεσολάβησης. Για να το λύσετε, πρέπει να διαμορφώσετε τα εργαλεία όπως το Docker, το curl και ούτω καθεξής για να χρησιμοποιήσετε τον διακομιστή μεσολάβησης. Είναι αρκετά περίπλοκο που προτείνω να αποκτήσετε μια προσωρινή απεριόριστη πρόσβαση.
Υποθέτοντας ότι μπορούσατε να κατεβάσετε τα πάντα με επιτυχία, για να ελέγξετε εάν το Kubernetes λειτουργεί καλά, μπορείτε να πληκτρολογήσετε την ακόλουθη εντολή:
bin/kubectl get nodes
Η αναμενόμενη απάντηση είναι:
NAME STATUS AGE 127.0.0.1 Ready 2m
Σημειώστε ότι η ηλικία μπορεί να διαφέρει φυσικά. Επίσης, δεδομένου ότι η εκκίνηση του Kubernetes μπορεί να διαρκέσει λίγο, ίσως χρειαστεί να καλέσετε την εντολή μερικές φορές προτού δείτε την απάντηση. Εάν δεν λάβετε σφάλματα εδώ, συγχαρητήρια, έχετε ενεργοποιήσει το Kubernetes στο τοπικό σας μηχάνημα.
Τώρα που έχετε ενεργοποιήσει το Kubernetes, μπορείτε να αναπτύξετε την εφαρμογή σας σε αυτό. Παλαιότερα, πριν από το Docker, έπρεπε να αναπτύξετε έναν ολόκληρο διακομιστή για την εκτέλεση της εφαρμογής σας. Με το Kubernetes, το μόνο που χρειάζεται να κάνετε για να αναπτύξετε την εφαρμογή σας είναι:
Ευτυχώς, είναι πολύ λιγότερο περίπλοκο που φαίνεται, ειδικά αν χρησιμοποιείτε το εργαλείο δημιουργίας SBT, όπως κάνουν πολλοί.
Στο κιτ, περιέλαβα δύο αρχεία που περιέχουν όλους τους απαραίτητους ορισμούς για να δημιουργήσω μια εικόνα ικανή να εκτελεί εφαρμογές Scala ή τουλάχιστον αυτό που απαιτείται για την εκτέλεση της επίδειξης Akka HTTP. Δεν μπορώ να εγγυηθώ ότι θα λειτουργεί με άλλες εφαρμογές Scala, αλλά είναι ένα καλό σημείο εκκίνησης και θα πρέπει να λειτουργεί για πολλές διαφορετικές διαμορφώσεις. Τα αρχεία που πρέπει να αναζητήσετε για την κατασκευή της εικόνας Docker είναι:
docker.sbt project/docker.sbt
Ας ρίξουμε μια ματιά σε αυτό που υπάρχει. Το αρχείο project/docker.sbt
περιέχει την εντολή για την εισαγωγή του sbt-docker
συνδέω:
addSbtPlugin('se.marcuslonnberg' % 'sbt-docker' % '1.4.0')
Αυτό το πρόσθετο διαχειρίζεται τη δημιουργία της εικόνας Docker με SBT για εσάς. Ο ορισμός του Docker βρίσκεται στο docker.sbt
αρχείο και μοιάζει με αυτό:
imageNames in docker := Seq(ImageName('localhost:5000/akkahttp:latest')) dockerfile in docker := { val jarFile: File = sbt.Keys.`package`.in(Compile, packageBin).value val classpath = (managedClasspath in Compile).value val mainclass = mainClass.in(Compile, packageBin).value.getOrElse(sys.error('Expected exactly one main class')) val jarTarget = s'/app/${jarFile.getName}' val classpathString = classpath.files.map('/app/' + _.getName) .mkString(':') + ':' + jarTarget new Dockerfile { from('anapsix/alpine-java:8') add(classpath.files, '/app/') add(jarFile, jarTarget) entryPoint('java', '-cp', classpathString, mainclass) } }
Για να κατανοήσετε πλήρως την έννοια αυτού του αρχείου, πρέπει να γνωρίζετε το Docker αρκετά καλά για να κατανοήσετε αυτό το αρχείο ορισμού. Ωστόσο, δεν πρόκειται να αναφερθούμε στις λεπτομέρειες του αρχείου ορισμού του Docker, επειδή δεν χρειάζεται να το κατανοήσετε διεξοδικά για να δημιουργήσετε την εικόνα.
Η ομορφιά της χρήσης SBT για την κατασκευή της εικόνας Docker είναι αυτήΣημειώστε ότι το classpath δημιουργείται αυτόματα με την ακόλουθη εντολή:
δημιουργία rest api node js
val classpath = (managedClasspath in Compile).value
Γενικά, είναι πολύ περίπλοκο να συγκεντρώσετε όλα τα αρχεία JAR για να εκτελέσετε μια εφαρμογή. Χρησιμοποιώντας το SBT, το αρχείο Docker θα δημιουργηθεί με add(classpath.files, '/app/')
. Με αυτόν τον τρόπο, το SBT συλλέγει όλα τα αρχεία JAR για εσάς και δημιουργεί ένα Dockerfile για την εκτέλεση της εφαρμογής σας.
Οι άλλες εντολές συλλέγουν τα κομμάτια που λείπουν για να δημιουργήσουν μια εικόνα Docker. Η εικόνα θα κατασκευαστεί χρησιμοποιώντας μια υπάρχουσα εικόνα APT για την εκτέλεση προγραμμάτων Java (anapsix/alpine-java:8
, διαθέσιμα στο Διαδίκτυο στο Docker Hub). Άλλες οδηγίες προσθέτουν τα άλλα αρχεία για την εκτέλεση της εφαρμογής σας. Τέλος, καθορίζοντας ένα σημείο εισόδου, μπορούμε να το εκτελέσουμε. Σημειώστε επίσης ότι το όνομα ξεκινά με localhost:5000
επίτηδες, επειδή localhost:5000
είναι όπου εγκατέστησα το μητρώο στο start-kube-local.sh
γραφή.
Για να δημιουργήσετε την εικόνα του Docker, μπορείτε να αγνοήσετε όλες τις λεπτομέρειες του Dockerfile. Απλά πρέπει να πληκτρολογήσετε:
sbt dockerBuildAndPush
Το sbt-docker
Στη συνέχεια, το plugin θα δημιουργήσει μια εικόνα Docker για εσάς, κατεβάζοντας από το Διαδίκτυο όλα τα απαραίτητα κομμάτια και, στη συνέχεια, θα μεταβεί σε ένα μητρώο Docker που ξεκίνησε πριν, μαζί με την εφαρμογή Kubernetes στο localhost
. Έτσι, το μόνο που χρειάζεστε είναι να περιμένετε λίγο περισσότερο για να προετοιμάσετε και να ετοιμάσετε την εικόνα σας.
Σημειώστε, εάν αντιμετωπίζετε προβλήματα, το καλύτερο που μπορείτε να κάνετε είναι να επαναφέρετε τα πάντα σε μια γνωστή κατάσταση εκτελώντας τις ακόλουθες εντολές:
bin/stop-kube-local.sh bin/start-kube-local.sh
Αυτές οι εντολές θα πρέπει να σταματήσουν όλα τα κοντέινερ και να τα επανεκκινήσουν σωστά για να προετοιμάσουν το μητρώο σας για να λάβουν την εικόνα που έχει δημιουργηθεί και προωθηθεί από sbt
.
Τώρα που η εφαρμογή είναι συσκευασμένη σε κοντέινερ και προωθείται σε μητρώο, είμαστε έτοιμοι να τη χρησιμοποιήσουμε. Το Kubernetes χρησιμοποιεί τη γραμμή εντολών και τα αρχεία διαμόρφωσης για τη διαχείριση του συμπλέγματος. Δεδομένου ότι οι γραμμές εντολών μπορούν να γίνουν πολύ μεγάλες και να μπορέσω να επαναλάβω τα βήματα, χρησιμοποιώ εδώ τα αρχεία διαμόρφωσης. Όλα τα δείγματα στο κιτ προέλευσης βρίσκονται στο φάκελο kube
.
Το επόμενο βήμα μας είναι να ξεκινήσουμε μια μεμονωμένη παρουσία της εικόνας. Μια τρέχουσα εικόνα ονομάζεται, στη γλώσσα Kubernetes, a υπό . Ας δημιουργήσουμε λοιπόν ένα pod χρησιμοποιώντας την ακόλουθη εντολή:
if ($_post)
bin/kubectl create -f kube/akkahttp-pod.yml
Τώρα μπορείτε να ελέγξετε την κατάσταση με την εντολή:
bin/kubectl get pods
Πρέπει να δεις:
NAME READY STATUS RESTARTS AGE akkahttp 1/1 Running 0 33s k8s-etcd-127.0.0.1 1/1 Running 0 7d k8s-master-127.0.0.1 4/4 Running 0 7d k8s-proxy-127.0.0.1 1/1 Running 0 7d
Η κατάσταση μπορεί πραγματικά να είναι διαφορετική, για παράδειγμα, 'ContainerCreating', μπορεί να χρειαστούν λίγα δευτερόλεπτα για να γίνει 'Running'. Επίσης, μπορείτε να λάβετε μια άλλη κατάσταση όπως 'Σφάλμα' εάν, για παράδειγμα, ξεχάσετε να δημιουργήσετε την εικόνα πριν.
Μπορείτε επίσης να ελέγξετε αν το pod σας λειτουργεί με την εντολή:
bin/kubectl logs akkahttp
Θα πρέπει να δείτε μια έξοδο που τελειώνει με κάτι τέτοιο:
[DEBUG] [05/30/2016 12:19:53.133] [default-akka.actor.default-dispatcher-5] [akka://default/system/IO-TCP/selectors/$a/0] Successfully bound to /0:0:0:0:0:0:0:0:9000
Τώρα έχετε ενεργοποιήσει την υπηρεσία μέσα στο κοντέινερ. Ωστόσο, η υπηρεσία δεν είναι ακόμη προσβάσιμη. Αυτή η συμπεριφορά είναι μέρος του σχεδιασμού του Kubernetes. Το pod σας λειτουργεί, αλλά πρέπει να το εκθέσετε ρητά. Διαφορετικά, η υπηρεσία προορίζεται να είναι εσωτερική.
Η δημιουργία μιας υπηρεσίας και ο έλεγχος του αποτελέσματος είναι θέμα εκτέλεσης:
bin/kubectl create -f kube/akkahttp-service.yaml bin/kubectl get svc
Θα πρέπει να δείτε κάτι τέτοιο:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE akkahttp-service 10.0.0.54 9000/TCP 44s kubernetes 10.0.0.1 443/TCP 3m
Σημειώστε ότι η θύρα μπορεί να είναι διαφορετική. Ο Kubernetes διέθεσε μια θύρα για την υπηρεσία και το ξεκίνησε. Εάν χρησιμοποιείτε Linux, μπορείτε να ανοίξετε απευθείας το πρόγραμμα περιήγησης και να πληκτρολογήσετε http://10.0.0.54:9000/ip/8.8.8.8
για να δείτε το αποτέλεσμα. Εάν χρησιμοποιείτε Windows ή Mac με Docker Toolbox, η IP είναι τοπική για την εικονική μηχανή που εκτελεί το Docker και, δυστυχώς, εξακολουθεί να μην είναι προσβάσιμη.
Θέλω να τονίσω εδώ ότι αυτό δεν είναι πρόβλημα του Kubernetes, αλλά είναι ένας περιορισμός της Docker Toolbox, η οποία με τη σειρά της εξαρτάται από τους περιορισμούς που επιβάλλονται από εικονικές μηχανές όπως το VirtualBox, οι οποίες λειτουργούν σαν υπολογιστής σε έναν άλλο υπολογιστή. Για να ξεπεράσουμε αυτόν τον περιορισμό, πρέπει να δημιουργήσουμε μια σήραγγα. Για να διευκολύνω τα πράγματα, συμπεριέλαβα ένα άλλο σενάριο που ανοίγει μια σήραγγα σε μια αυθαίρετη θύρα για να φτάσω σε οποιαδήποτε υπηρεσία που αναπτύξαμε. Μπορείτε να πληκτρολογήσετε την ακόλουθη εντολή:
bin/forward-kube-local.sh akkahttp-service 9000
Σημειώστε ότι η σήραγγα δεν θα τρέξει στο παρασκήνιο, πρέπει να διατηρήσετε το παράθυρο του τερματικού ανοιχτό όσο το χρειάζεστε και να κλείσετε όταν δεν χρειάζεστε πλέον τη σήραγγα. Κατά τη διάρκεια της λειτουργίας της σήραγγας, μπορείτε να ανοίξετε: http://localhost:9000/ip/8.8.8.8
και τελικά δείτε την εφαρμογή να εκτελείται στο Kubernetes.
Μέχρι στιγμής έχουμε 'απλώς' βάλει την αίτησή μας στο Kubernetes. Αν και είναι ένα συναρπαστικό επίτευγμα, δεν προσθέτει πάρα πολύ αξία στην ανάπτυξη μας. Είμαστε εξοικονομημένοι από την προσπάθεια μεταφόρτωσης και εγκατάστασης σε διακομιστή και διαμόρφωσης διακομιστή μεσολάβησης για αυτόν.
Όπου λάμπει το Kubernetes βρίσκεται σε κλιμάκωση. Μπορείτε να αναπτύξετε δύο, δέκα ή εκατό παρουσίες της εφαρμογής μας αλλάζοντας μόνο τον αριθμό των αντιγράφων στο αρχείο διαμόρφωσης. Αρα ας το κάνουμε.
Θα σταματήσουμε το ενιαίο pod και θα ξεκινήσουμε μια ανάπτυξη αντ 'αυτού. Ας εκτελέσουμε λοιπόν τις ακόλουθες εντολές:
bin/kubectl delete -f kube/akkahttp-pod.yml bin/kubectl create -f kube/akkahttp-deploy.yaml
Στη συνέχεια, ελέγξτε την κατάσταση. Και πάλι, μπορείτε να δοκιμάσετε μερικές φορές, επειδή η ανάπτυξη μπορεί να χρειαστεί λίγο χρόνο για να εκτελεστεί:
NAME READY STATUS RESTARTS AGE akkahttp-deployment-4229989632-mjp6u 1/1 Running 0 16s akkahttp-deployment-4229989632-s822x 1/1 Running 0 16s k8s-etcd-127.0.0.1 1/1 Running 0 6d k8s-master-127.0.0.1 4/4 Running 0 6d k8s-proxy-127.0.0.1 1/1 Running 0 6d
Τώρα έχουμε δύο λοβό, όχι ένα. Αυτό συμβαίνει επειδή στο αρχείο διαμόρφωσης που παρείχαμε, υπάρχει η τιμή replica: 2
, με δύο διαφορετικά ονόματα να δημιουργούνται από το σύστημα. Δεν πρόκειται να αναφερθώ στις λεπτομέρειες των αρχείων διαμόρφωσης, επειδή το πεδίο του άρθρου είναι απλώς μια εισαγωγή για τους προγραμματιστές Scala να ξεκινήσουν στο Kubernetes.
Εν πάση περιπτώσει, υπάρχουν τώρα δύο pods ενεργά. Αυτό που είναι ενδιαφέρον είναι ότι η υπηρεσία είναι η ίδια όπως και πριν. Διαμορφώσαμε την υπηρεσία ώστε να φορτώνει την ισορροπία μεταξύ όλων των λοβών με την ετικέτα akkahttp
. Αυτό σημαίνει ότι δεν χρειάζεται να αναδιατάξουμε την υπηρεσία, αλλά μπορούμε να αντικαταστήσουμε τη μεμονωμένη παρουσία με μια επαναλαμβανόμενη.
Μπορούμε να το επαληθεύσουμε εκκινώντας ξανά το διακομιστή μεσολάβησης (εάν βρίσκεστε σε Windows και το έχετε κλείσει):
τι μπορεί να προκαλέσει διαρροή μνήμης
bin/forward-kube-local.sh akkahttp-service 9000
Στη συνέχεια, μπορούμε να προσπαθήσουμε να ανοίξουμε δύο παράθυρα τερματικού και να δούμε τα αρχεία καταγραφής για κάθε ομάδα. Για παράδειγμα, στον πρώτο τύπο:
bin/kubectl logs -f akkahttp-deployment-4229989632-mjp6u
Και στον δεύτερο τύπο:
bin/kubectl logs -f akkahttp-deployment-4229989632-s822x
Φυσικά, επεξεργαστείτε τη γραμμή εντολών ανάλογα με τις τιμές που έχετε στο σύστημά σας.
Τώρα, προσπαθήστε να αποκτήσετε πρόσβαση στην υπηρεσία με δύο διαφορετικά προγράμματα περιήγησης. Θα πρέπει να περιμένετε να δείτε τα αιτήματα να χωρίζονται μεταξύ των πολλαπλών διαθέσιμων διακομιστών, όπως στην ακόλουθη εικόνα:
Σήμερα μόλις ξύσαμε την επιφάνεια. Το Kubernetes προσφέρει πολύ περισσότερες δυνατότητες, όπως αυτοματοποιημένη κλιμάκωση και επανεκκίνηση, σταδιακές αναπτύξεις και τόμους. Επιπλέον, η εφαρμογή που χρησιμοποιήσαμε ως παράδειγμα είναι πολύ απλή, ανιθαγενής με τις διάφορες περιπτώσεις που δεν χρειάζεται να γνωρίζονται μεταξύ τους. Στον πραγματικό κόσμο, κατανεμημένες εφαρμογές κάνω πρέπει να γνωρίζουν ο ένας τον άλλον και να αλλάζουν τις διαμορφώσεις ανάλογα με τη διαθεσιμότητα άλλων διακομιστών. Πράγματι, το Kubernetes προσφέρει ένα κατανεμημένο keystore (etcd
) για να επιτρέπει σε διαφορετικές εφαρμογές να επικοινωνούν μεταξύ τους όταν αναπτύσσονται νέες παρουσίες. Ωστόσο, αυτό το παράδειγμα είναι σκόπιμα αρκετά μικρό και απλοποιημένο για να σας βοηθήσει να ξεκινήσετε, εστιάζοντας στις βασικές λειτουργίες. Εάν ακολουθήσετε το σεμινάριο, θα πρέπει να μπορείτε να αποκτήσετε ένα περιβάλλον εργασίας για το δικό σας Σκάλα εφαρμογή στο μηχάνημά σας χωρίς να μπερδεύεστε από μεγάλο αριθμό λεπτομερειών και να χαθείτε στην πολυπλοκότητα.