CATS εναντίον DOGS + FLASK + DOCKER + KUBERNETES

Αναρωτηθήκατε ποτέ πώς να οικοδομήσουμε μια εφαρμογή Ιστού για Εκμάθηση Μηχανών και να την αναπτύξουμε και να την διαχειριστούμε για όλους στο σύννεφο; Έχετε έρθει στο σωστό μέρος. Σε αυτή τη θέση θα περάσω από τις βασικές έννοιες της Containerizing της εφαρμογής ML σας και την ανάπτυξη της στο cloud Google χρησιμοποιώντας μηχανή kebernetes.

Μπορείτε να βρείτε τον πλήρη κωδικό εδώ. Για μια γρήγορη επίσκεψη επίδειξης http://130.211.229.36/. (Κάντε λήψη μόνο εικόνων jpg)

Προϋποθέσεις = Κατανόηση των Dockers

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

Kubernetes Αρχιτεκτονική

Η επισκόπηση του συμπλέγματος Kubernetes με τους κόμβους του Master και των εργαζομένων. Όλες οι δραστηριότητες του cluster ελέγχονται από τον κύριο κόμβο ο οποίος έχει ένα API σε λειτουργία. Το Kubectl είναι μια διεπαφή γραμμής εντολών για την εκτέλεση εντολών κατά συμπλεγμάτων Kubernetes.

Κάθε Κόμβοι φέρουν ετικέτες και δίδονται ετικέτες. Η εφαρμογή σας σε κοντέινερ τρέχει μέσα σε ένα pod σε έναν κόμβο και αναπτύσσεται στον κύριο κόμβο.

Ένα κόμβο

Αυτός είναι ένας κόμβος με πολλά λοβό με τις διευθύνσεις IP τους.

Pods- Αυτές είναι η βασική μονάδα της αρχιτεκτονικής συνήθως περιέχει 2 δοχεία. Κάθε pod στο Kubernetes διαθέτει μια μοναδική διεύθυνση IP στο εσωτερικό του συμπλέγματος και μπορεί να γίνει χειροκίνητα μέσω του API Kubernetes. Το pod μπορεί να ορίσει έναν τόμο, όπως έναν τοπικό κατάλογο δίσκων ή έναν δίσκο δικτύου, και να το εκθέσει στα δοχεία του φλούδα.

Και έρχεται τελικά η έκθεση σας χρησιμοποιώντας μια υπηρεσία. Όταν ο κόμβος ενός εργαζομένου πεθάνει, χάνονται επίσης τα Pods που εκτελούνται στον κόμβο. Ένα σύνολο αντιγράφων μπορεί στη συνέχεια να οδηγήσει δυναμικά το σύμπλεγμα πίσω στην επιθυμητή κατάσταση μέσω της δημιουργίας νέων pods για να κρατήσει την εφαρμογή σας σε λειτουργία. Αυτό γίνεται μέσω του αρχείου service.yaml.

Για καλύτερη κατανόηση της υποδομής kubernetes προτείνω ένα βίντεο που εξηγεί όλες τις έννοιες με έναν απλοποιημένο τρόπο σύνδεσης.

Ας ξεκινήσουμε την εφαρμογή μας στο διαδίκτυο.

Εκπαιδεύτηκα το μοντέλο του νευρικού δικτύου μου και το έσωσε στο JSON και επίσης έβαλα τα βάρη σε ένα αρχείο h5. Έγραψα ένα use_model.py για να φορτώσω το εκπαιδευμένο μοντέλο από το JSON και για να προβλέψω τη νέα εικόνα.

Χρησιμοποίησα το FLASK για να δημιουργήσω μια εφαρμογή ιστού. Η εφαρμογή είναι απλή, παίρνει την εικόνα και προβλέπει τη γάτα ή το σκύλο με τη χρήση use_model.py και επιστρέφει είτε "Είστε ένα DOG" είτε "Είστε CAT". Το app.py πηγαίνει έτσι (αλλάξα το host = 0.0.0.0 κατά τη δημιουργία του κοντέινερ.)

Στη συνέχεια, το πιο σημαντικό μέρος είναι να γράψετε το Dockerfie για να μπορέσετε να δημιουργήσετε την εικόνα του λιμένα.

Εκτελέστε εντολές apt-get update && install python3 ...

Αντιγράψτε τον τρέχοντα κατάλογο. pip install requirements.txt

Θύρα EXPOSE (όπου εμφανίζεται το app.py)

Στη συνέχεια εκτελέστε την εντολή python3 app.py. Το CMD θα είναι πάντα προσαρτημένο στο Entrypoint για να σας δώσει την τελική εντολή που θα εκτελεστεί.

Μπορείτε να δημιουργήσετε το κοντέινερ τοπικά και να δοκιμάσετε την εφαρμογή σας σε δοχεία συσκευασίας (εκτελέστε αυτές τις εντολές στον κατάλογο έργων σας)

δημιουργία υποδοχής -t image_classifier: τελευταία.
λιμάνι τρέχει -it -p 5500: 3000 image_classifier

Αυτό θα εκτελέσει το app.py και με την προώθηση θυρών στη θέση του μπορείτε να έχετε πρόσβαση στο webapp στο πρόγραμμα περιήγησής σας στο http: // localhost: 5000.

Τώρα έρχεται το πιο αναμενόμενο κομμάτι.

Δημιουργήστε έναν λογαριασμό στο cloud.google.com για να ενεργοποιήσετε τις πληρωμές για να έχετε πρόσβαση στον κινητήρα Kubernetes. Πλοηγηθείτε στον κινητήρα kubernetes και κάντε κλικ στο κουμπί ενεργοποίησης του cloud shell στο επάνω μέρος του παραθύρου της κονσόλας. Θα πάρετε μια κονσόλα στο κάτω μέρος όπου μπορείτε να εκτελέσετε εντολές αυτή η κονσόλα έρχεται pre εγκατεστημένη με gcloud, docker, και kubectl. Κάποτε στην κονσόλα:

git clone 
cd your_project

Ορίστε τη μεταβλητή περιβάλλοντος PROJECT_ID στο κέλυφος σας ανακτώντας το προεπιλεγμένο αναγνωριστικό έργου στο gcloud εκτελώντας την παρακάτω εντολή:

εξαγωγή PROJECT_ID = "$ (gcloud config get-value project -q)"

Η τιμή του PROJECT_ID θα χρησιμοποιηθεί για την επισήμανση της εικόνας του κοντέινερ για την ώθηση του στο ιδιωτικό μητρώο εμπορευματοκιβωτίων.

Τώρα μπορείτε να δημιουργήσετε την εικόνα του δοχείου:

δημιουργία docker -t gcr.io/${PROJECT_ID}/:1.0.0
λιμάνι ώθηση gcr.io/${PROJECT_ID}/:1.0.0

Θα χρειαστεί λίγος χρόνος για να οικοδομηθεί, μετά την κατασκευή μπορείτε να επαληθεύσετε χρησιμοποιώντας την εντολή "Εικόνες Docker". Τώρα μπορείτε να δημιουργήσετε το σύμπλεγμα σας:

Δημιουργία της εικόνας του δοχείου

Δημιουργία συμπλέγματος δοχείων:

Τώρα που η εικόνα του δοχείου αποθηκεύεται σε ένα μητρώο, πρέπει να δημιουργήσετε ένα σύμπλεγμα δοχείων για να εκτελέσετε την εικόνα του δοχείου. Ένα σύμπλεγμα αποτελείται από ένα σύνολο παρουσιών VM Compute Engine που εκτελούν Kubernetes.

Οι ομάδες συμπλέγματος gcloud δημιουργούν  - zone = us-central1-f -num-nodes = 2

Θα χρειαστεί λίγος χρόνος για να ολοκληρωθεί, μετά την ολοκλήρωση μπορείτε να επιβεβαιώσετε με την εντολή "gcloud compute instances list".

Ανάπτυξη της εφαρμογής σας:

kubectl εκτέλεση  --image = gcr.io / $ {PROJECT_ID} / : 1.0.0 -port 3000

"Kubectl get pods" εντολή για να δείτε το pod δημιουργήθηκε από την ανάπτυξη.

Εκθέτοντας την αίτησή σας στο Διαδίκτυο:

kubectl εκθέτουν την ανάπτυξη  --type = LoadBalancer --port 80 - στόχος 3000

Η εντολή έκθεσης kubectl παραπάνω δημιουργεί έναν πόρο υπηρεσίας, ο οποίος παρέχει υποστήριξη δικτύωσης και IP στη σημαία Pods.The - λιμάνι της εφαρμογής σας καθορίζει τον αριθμό θύρας που έχει διαμορφωθεί στο Load Balancer και η σημαία - port-στόχος καθορίζει τον αριθμό θύρας που χρησιμοποιείται από το Pod που δημιουργήθηκε από την εντολή εκτέλεσης kubectl από το προηγούμενο βήμα.

kubectl πάρει υπηρεσία

Η έξοδος θα σας δώσει μια εξωτερική διεύθυνση IP (στο κάτω μέρος της παρακάτω εικόνας):

Αποκτήστε το εξωτερικό σας IP

Μόλις προσδιορίσετε την εξωτερική διεύθυνση IP της εφαρμογής σας, αντιγράψτε τη διεύθυνση IP. Τοποθετήστε τον περιηγητή σας σε αυτήν τη διεύθυνση URL (όπως http://130.211.229.36) για να ελέγξετε εάν η εφαρμογή σας είναι προσβάσιμη.

Κατά την επίσκεψη εξωτερικής IP

ΣΗΜΕΙΩΣΗ: 1. Όπου και αν χρησιμοποιώ <> μπορείτε να προσθέσετε τα επιθυμητά ονόματά σας. 2. Έχω γράψει αρχεία yaml επίσης στο github μου αν χρησιμοποιείτε Digitalocean ή οποιαδήποτε άλλη πλατφόρμα cloud.

Αυτό το blog είναι χρήσιμο. Για οποιεσδήποτε αμφιβολίες και ερωτήματα σχολιάζει παρακάτω.