Αυτό το σεμινάριο σάς δείχνει πώς να πακετάρετε μια εφαρμογή Ιστού σε μια εικόνα κοντέινερ Docker και να εκτελέσετε αυτήν την εικόνα κοντέινερ σε ένα σύμπλεγμα Google Kubernetes Engine (GKE). Στη συνέχεια, αναπτύσσετε την εφαρμογή Ιστού ως ένα σύνολο αντιγράφων ισορροπημένου φορτίου που μπορεί να προσαρμοστεί στις ανάγκες των χρηστών σας ## Στόχοι - Συσκευάστε ένα δείγμα εφαρμογής web σε μια εικόνα Docker - Μεταφορτώστε την εικόνα Docker στο Μητρώο Artifact - Δημιουργήστε ένα σύμπλεγμα GKE - Αναπτύξτε το δείγμα εφαρμογής στο σύμπλεγμα - Διαχειριστείτε την αυτόματη κλιμάκωση για την ανάπτυξη - Εκθέστε το δείγμα εφαρμογής στο διαδίκτυο - Αναπτύξτε μια νέα έκδοση του δείγματος εφαρμογής ## Κόστος Αυτός ο οδηγός χρησιμοποιεί τα ακόλουθα χρεώσιμα στοιχεία του Google Cloud: Για να δημιουργήσετε μια εκτίμηση κόστους με βάση την προβλεπόμενη χρήση σας, χρησιμοποιήστε τον υπολογιστή τιμολόγησης Όταν ολοκληρώσετε αυτόν τον οδηγό, μπορείτε να αποφύγετε τη συνέχιση της χρέωσης διαγράφοντας τους πόρους που δημιουργήσατε. Για περισσότερες πληροφορίες, ανατρέξτε στην ενότητα Εκκαθάριση ## Πριν ξεκινήσετε Ακολουθήστε τα παρακάτω βήματα για να ενεργοποιήσετε το Kubernetes Engine API: - Συνδεθείτε στον λογαριασμό σας στο Google Cloud. Εάν είστε νέοι στο Google Cloud, δημιουργήστε έναν λογαριασμό για να αξιολογήσετε την απόδοση των προϊόντων μας σε πραγματικές συνθήκες. Οι νέοι πελάτες λαμβάνουν επίσης δωρεάν πιστώσεις 300 $ για εκτέλεση, δοκιμή και ανάπτυξη φόρτου εργασίας - Στην κονσόλα Google Cloud, στη σελίδα επιλογής έργου, επιλέξτε ή δημιουργήστε ένα έργο Google Cloud - Βεβαιωθείτε ότι η χρέωση είναι ενεργοποιημένη για το έργο σας στο Cloud. Μάθετε πώς μπορείτε να ελέγξετε εάν η χρέωση είναι ενεργοποιημένη σε ένα έργο - Ενεργοποιήστε το Μητρώο Artifact και τα API του Google Kubernetes Engine - Στην κονσόλα Google Cloud, στη σελίδα επιλογής έργου, επιλέξτε ή δημιουργήστε ένα έργο Google Cloud - Βεβαιωθείτε ότι η χρέωση είναι ενεργοποιημένη για το έργο σας στο Cloud. Μάθετε πώς μπορείτε να ελέγξετε εάν η χρέωση είναι ενεργοποιημένη σε ένα έργο - Ενεργοποιήστε το Μητρώο Artifact και τα API του Google Kubernetes Engine Επιλογή Α: Χρησιμοποιήστε το Cloud Shell Μπορείτε να ακολουθήσετε αυτό το σεμινάριο χρησιμοποιώντας το Cloud Shell, το οποίο έρχεται προεγκατεστημένο με το gcloud, λιμενεργάτης, και χρησιμοποιούμενα εργαλεία γραμμής εντολών kubectl σε αυτό το σεμινάριο. Εάν χρησιμοποιείτε το Cloud Shell, δεν χρειάζεται να τα εγκαταστήσετε εργαλεία γραμμής εντολών στο σταθμό εργασίας σας Για να χρησιμοποιήσετε το Cloud Shell: - Μεταβείτε στην κονσόλα Google Cloud Κάντε κλικ στο Ενεργοποιήστε το Cloud Shell κουμπί στο επάνω μέρος του παραθύρου της κονσόλας Google Cloud Μια περίοδος λειτουργίας Cloud Shell ανοίγει μέσα σε ένα νέο πλαίσιο στο κάτω μέρος της κονσόλας Google Cloud και εμφανίζει μια γραμμή εντολών Επιλογή Β: Χρησιμοποιήστε τοπικά εργαλεία γραμμής εντολών Εάν προτιμάτε να ακολουθήσετε αυτό το σεμινάριο στο σταθμό εργασίας σας, ακολουθήστε αυτά τα βήματα για να εγκαταστήσετε τα απαραίτητα εργαλεία Εγκαταστήστε το Google Cloud CLI Χρησιμοποιώντας το gcloud CLI, εγκαταστήστε το εργαλείο γραμμής εντολών Kubernetes Το kubectlis επικοινωνούσε με το Kubernetes, το οποίο είναι το σύστημα ενορχήστρωσης συστάδων των συμπλεγμάτων GKE: Τα στοιχεία του gcloud εγκαθιστούν το kubectl Εγκαταστήστε το Docker Community Edition (CE) στο σταθμό εργασίας σας. Μπορείτε να το χρησιμοποιήσετε για να δημιουργήσετε μια εικόνα κοντέινερ για την εφαρμογή Εγκαταστήστε το εργαλείο ελέγχου πηγής Git για να ανακτήσετε το δείγμα εφαρμογής από το GitHub ## Δημιουργήστε ένα αποθετήριο Σε αυτό το σεμινάριο, αποθηκεύετε μια εικόνα στο Μητρώο Artifact και την αναπτύσσετε από το μητρώο. Το Μητρώο Artifact είναι το προτεινόμενο μητρώο κοντέινερ Google Cloud. Για αυτήν τη γρήγορη εκκίνηση, θα δημιουργήσετε ένα αποθετήριο με το όνομα γεια-ρεπο Ρυθμίστε το PROJECT_IDμεταβλητή περιβάλλοντος στο αναγνωριστικό του έργου σας στο Google Cloud ( ). Θα χρησιμοποιήσετε αυτήν τη μεταβλητή περιβάλλοντος όταν δημιουργείτε την εικόνα του κοντέινερ και την σπρώχνετε στο αποθετήριο σας PROJECT_ID εξαγωγή PROJECT_ID= PROJECT_ID Επιβεβαιώστε ότι το Η μεταβλητή PROJECT_IDenvironment έχει τη σωστή τιμή: ηχώ $PROJECT_ID Ορίστε το αναγνωριστικό του έργου σας για το Google Cloud CLI: Έργο συνόλου παραμέτρων gcloud $PROJECT_ID Παραγωγή: Ενημερωμένη ιδιοκτησία [πυρήνας/έργο] Δημιουργήστε το hello-repository με την ακόλουθη εντολή: gcloud artifacts repositories δημιουργούν hello-repo \ --repository-format=docker \ --location= REGION\ --description="Αποθήκη Docker"Αντικαθιστώ με την περιοχή a για το αποθετήριο, όπως π.χ ΠΕΡΙΦΕΡΕΙΑ ΗΠΑ-δυση1. Για να δείτε μια λίστα με τις διαθέσιμες τοποθεσίες, εκτελέστε την εντολή: λίστα τοποθεσιών gcloud artifacts ## Δημιουργία της εικόνας του κοντέινερ Σε αυτό το σεμινάριο, αναπτύσσετε ένα δείγμα ιστού καλείται η εφαρμογή hello-app, γραμμένος διακομιστής ιστού στο Go που απαντά σε όλα τα αιτήματα με το μήνυμα Γειά σου Κόσμε! στη θύρα 8080 Το GKE δέχεται εικόνες Docker ως μορφή ανάπτυξης εφαρμογής Πριν από την ανάπτυξη hello-app στο GKE, πρέπει να πακετάρεις ο πηγαίος κώδικας hello-app ως εικόνα Docker Για να δημιουργήσετε μια εικόνα Docker, χρειάζεστε πηγαίο κώδικα και ένα αρχείο Docker. Ένα Dockerfile περιέχει οδηγίες για τον τρόπο κατασκευής της εικόνας Κατεβάστε το hello-appsource code και Dockerfile εκτελώντας τις ακόλουθες εντολές: git clone httpsgithub.com/GoogleCloudPlatform/kubernetes-engine-samples cd kubernetes-engine-samples/hello-app Δημιουργήστε και προσθέστε ετικέτα στην εικόνα Docker για hello-app: docker build -τ REGION-docker.pkg.devPROJECT_ID}/hello-repo/hello-app:v1 Αυτή η εντολή δίνει εντολή στον Docker να δημιουργήσει την εικόνα χρησιμοποιώντας το Το Dockerfile στον τρέχοντα κατάλογο, αποθηκεύστε το στο τοπικό σας περιβάλλον και προσθέστε ετικέτα με ένα όνομα, όπως π.χ us-west1-docker.pkg.dev/my-project/hello-repo/hello-app:v1. Η εικόνα προωθείται στο Μητρώο τεχνουργημάτων στην επόμενη ενότητα - Ο Το PROJECT_IDvariable συσχετίζει την εικόνα του κοντέινερ με το hello-repository στο έργο σας στο Google Cloud - Ο us-west1-docker.pkg.devprefix αναφέρεται στο Μητρώο Artifact, τοπικό κεντρικό υπολογιστή για το αποθετήριό σας - Ο Εκτελέστε το εντολή docker images για να επαληθεύσετε ότι η κατασκευή ήταν επιτυχής: εικόνες αποβάθρας Παραγωγή: REPOSITORY TAG IMAGE ID CREATED ΜΕΓΕΘΟΣ us-west1-docker.pkg.dev/my-project/hello-repo/hello-app v1 25cfadb1bf28 πριν από 10 δευτερόλεπτα 54 MB ## Λειτουργία του κοντέινερ τοπικά (προαιρετικό) Δοκιμάστε την εικόνα του κοντέινερ χρησιμοποιώντας τον τοπικό σας κινητήρα Docker: docker run --rm -p 8080:8080 REGION-docker.pkg.devPROJECT_ID}/hello-repo/hello-app:v1 Εάν χρησιμοποιείτε το Cloud Shell, κάντε κλικ στο Κουμπί προεπισκόπησης Ιστού και μετά επιλέξτε το 8080 αριθμός θύρας. Το GKE ανοίγει τη διεύθυνση URL προεπισκόπησης στην υπηρεσία διακομιστή μεσολάβησης σε ένα νέο παράθυρο προγράμματος περιήγησης Διαφορετικά, ανοίξτε ένα νέο παράθυρο τερματικού (ή μια καρτέλα Cloud Shell) και εκτελέστε την ακόλουθη εντολή για να επαληθεύσετε ότι το κοντέινερ λειτουργεί και ανταποκρίνεται σε αιτήματα με "Hello, World μπούκλα httplocalhost:8080 Αφού δείτε μια επιτυχημένη απόκριση, μπορείτε να απενεργοποιήσετε το κοντέινερ πατώντας Ctrl+Cin στην καρτέλα όπου το τρέχει η εντολή docker ## Ωθώντας την εικόνα Docker στο Μητρώο Artifact Πρέπει να ανεβάσετε την εικόνα κοντέινερ σε ένα μητρώο, ώστε το σύμπλεγμα GKE να μπορεί να πραγματοποιήσει λήψη και εκτέλεση της εικόνας κοντέινερ. Σε αυτό το σεμινάριο, θα αποθηκεύσετε το κοντέινερ σας στο Μητρώο Artifact Διαμορφώστε το εργαλείο γραμμής εντολών Docker για έλεγχο ταυτότητας στο Μητρώο Artifact: gcloud auth configure-docker REGION-docker.pkg.dev Σπρώξτε την εικόνα Docker που μόλις δημιουργήσατε στο αποθετήριο: ώθηση λιμενεργατών REGION-docker.pkg.devPROJECT_ID}/hello-repo/hello-app:v1 ## Δημιουργία συμπλέγματος GKE Τώρα που η εικόνα Docker είναι αποθηκευμένη στο Μητρώο Artifact, δημιουργήστε ένα GKE σύμπλεγμα τρέχω γεια-εφαρμογή. Ένα σύμπλεγμα GKE αποτελείται από μια ομάδα παρουσιών εικονικής μηχανής υπολογιστικής μηχανής τρέχει το Kubernetes, την ενορχήστρωση συμπλέγματος ανοιχτού κώδικα σύστημα που εξουσιάζει το ΓΚΕ Cloud Shell Ρυθμίστε τη ζώνη ή την περιοχή του Compute Engine. Ανάλογα με τον τρόπο λειτουργίας που επιλέγετε να χρησιμοποιήσετε στο GKE, καθορίστε μια προεπιλεγμένη ζώνη ή περιοχή. Εάν χρησιμοποιείτε την τυπική λειτουργία, το σύμπλεγμα σας είναι ζωνικό (για αυτόν τον οδηγό), επομένως ορίστε την προεπιλεγμένη ζώνη υπολογισμού. Εάν χρησιμοποιείτε τη λειτουργία Αυτόματου πιλότου, το σύμπλεγμα σας είναι τοπικό, επομένως ορίστε την προεπιλεγμένη περιοχή υπολογισμού. Επιλέξτε μια ζώνη ή μια περιοχή που είναι πιο κοντά στο χώρο αποθήκευσης Μητρώου Artifact που δημιουργήσατε Standard cluster, όπως π.χ us-west1-a: gcloud config set compute/zone COMPUTE_ZONE Autopilotcluster, όπως us-west1: gcloud config set compute/region COMPUTE_REGION - Δημιουργήστε ένα σύμπλεγμα με όνομα hello-cluster: Standard cluster: Τα συμπλέγματα κοντέινερ gcloud δημιουργούν hello-cluster Σύμπλεγμα αυτόματου πιλότου: συμπλέγματα κοντέινερ gcloud δημιουργία-αυτόματο γεια-σύμπλεγμα Χρειάζονται λίγα λεπτά για να δημιουργηθεί το σύμπλεγμα GKE και να ελεγχθεί η υγεία σας - Αφού ολοκληρωθεί η εντολή, εκτελέστε την ακόλουθη εντολή για να δείτε τους τρεις κόμβους του συμπλέγματος: kubectl πάρει κόμβους Παραγωγή: ΟΝΟΜΑ ΚΑΤΑΣΤΑΣΗ ΡΟΛΟΙ ΗΛΙΚΙΑ ΕΚΔΟΣΗ gke-hello-cluster-default-pool-229c0700-cbtd Έτοιμο 92s v1.18.12-gke.1210 gke-hello-cluster-default-pool-229c0700-fc5j Ready 91s v1.18.12-gke.1210 gke-hello-cluster-default-pool-229c0700-n9l7 Ready 92s v1.18.12-gke.1210 Console Go to the Google Kubernetes Enginepage in the Google Cloud console Go to Google Kubernetes Engine Click Create Choose Standard or Autopilot mode and click Configure In the Namefield, enter the name hello-cluster Select a zone or region: Standardcluster: Under Location type, select Zonaland then select a Compute Engine zone from the Zonedrop-down list, such as us-west1-a Autopilotcluster: Select a Compute Engine region from the Regiondrop-down list, such as us-west1 - Click Create. This creates a GKE cluster Wait for the cluster to be created. When the cluster is ready, a green check mark appears next to the cluster name ## Deploying the sample app to GKE You are now ready to deploy the Docker image you built to your GKE cluster Kubernetes represents applications as Pods, which are scalable units holding one or more containers. The Pod is the smallest deployable unit in Kubernetes. Usually, you deploy Pods as a set of replicas that can be scaled and distributed together across your cluster. One way to deploy a set of replicas is through a Kubernetes Deployment In this section, you create a Kubernetes Deployment to run hello-app on your cluster. This Deployment has replicas (Pods). One Deployment Pod contains only one container: the hello-app Docker image You also create a HorizontalPodAutoscaler resource that scales the number of Pods from 3 to a number between 1 and 5, based on CPU load Cloud Shell Ensure that you are connected to your GKE cluster gcloud container clusters get-credentials hello-cluster --zone COMPUTE_ZONE Create a Kubernetes Deployment for your hello-appDocker image kubectl create deployment hello-app --image= REGION-docker.pkg.devPROJECT_ID}/hello-repo/hello-app:v1 Set the baseline number of Deployment replicas to 3 kubectl scale deployment hello-app --replicas=3 Create a HorizontalPodAutoscalerresource for your Deployment kubectl autoscale deployment hello-app --cpu-percent=80 --min=1 --max=5 To see the Pods created, run the following command: kubectl get pods Output: NAME READY STATUS RESTARTS AGE hello-app-784d7569bc-hgmpx 1/1 Running 0 10s hello-app-784d7569bc-jfkz5 1/1 Running 0 10s hello-app-784d7569bc-mnrrl 1/1 Running 0 15s Console Go to the Workloadspage in the Google Cloud console Click Deploy In the Specify containersection, select Existing container image In the Image pathfield, click Select In the Select container imagepane, select the hello-appimage you pushed to Artifact Registry and click Select In the Containersection, click Done, then click Continue In the Configurationsection, under Labels, enter appfor Keyand hello-appfor Value Under Configuration YAML, click View YAML. This opens a YAML configuration file representing the two Kubernetes API resources about to be deployed into your cluster: one Deployment, and one HorizontalPodAutoscalerfor that Deployment Click Close, then click Deploy When the Deployment Pods are ready, the Deployment detailspage opens Under Managed pods, note the three running Pods for the hello-appDeployment ## Exposing the sample app to the internet While Pods do have individually-assigned IP addresses, those IPs can only be reached from inside your cluster. Also, GKE Pods are designed to be ephemeral, starting or stopping based on scaling needs. And when a Pod crashes due to an error, GKE automatically redeploys that Pod, assigning a new Pod IP address each time What this means is that for any Deployment, the set of IP addresses corresponding to the active set of Pods is dynamic. We need a way to 1) group Pods together into one static hostname, and 2) expose a group of Pods outside the cluster, to the internet Kubernetes Services solve for both of these problems Services group Pods into one static IP address, reachable from any Pod inside the cluster GKE also assigns a DNS hostname to that static IP. For example, hello-app.default.svc.cluster.local The default Service type in GKE is called ClusterIP, where the Service gets an IP address reachable only from inside the cluster To expose a Kubernetes Service outside the cluster, create a Service of type LoadBalancer This type of Service spawns an External Load Balancer IP for a set of Pods, reachable through the internet In this section, you expose the hello-app Deployment to the internet using a Service of type LoadBalancer Cloud Shell Use the kubectl exposecommand to generate a Kubernetes Service for the hello-appdeployment: kubectl expose deployment hello-app --name=hello-app-service --type=LoadBalancer --port 80 --target-port 8080 Here, the --portflag specifies the port number configured on the Load Balancer, and the --target-portflag specifies the port number that the hello-appcontainer is listening on Run the following command to get the Service details for hello-app-service: kubectl get service Output: NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello-app-service 10.3.251.122 203.0.113.0 80:30877/TCP 10s Copy the EXTERNAL_IPaddress to the clipboard (for instance: 203.0.113.0) Console Go to the Workloadspage in the Google Cloud console Click hello-app From the Deployment details page, click Actions > Expose In the Exposedialog, set the Target portto 8080. This is the port the hello-appcontainer listens on From the Service typedrop-down list, select Load balancer Click Exposeto create a Kubernetes Service for hello-app When the Load Balancer is ready, the Service detailspage opens Scroll down to the External endpointsfield, and copy the IP address Now that the hello-app Pods are exposed to the internet through a Kubernetes Service, you can open a new browser tab, and navigate to the Service IP address you copied to the clipboard. A Hello, World! message appears, along with a Hostname field. The Hostname corresponds to one of the three hello-app Pods serving your HTTP request to your browser ## Deploying a new version of the sample app In this section, you upgrade hello-app to a new version by building and deploying a new Docker image to your GKE cluster GKE's rolling update feature lets you update your Deployments without downtime. During a rolling update, your GKE cluster incrementally replaces the existing hello-app Pods with Pods containing the Docker image for the new version During the update, your load balancer service routes traffic only into available Pods Return to Cloud Shell, where you have cloned the hello app source code and Dockerfile. Update the function hello()in the main.gofile to report the new version 2.0.0 Build and tag a new hello-appDocker image docker build -t REGION-docker.pkg.devPROJECT_ID}/hello-repo/hello-app:v2 Push the image to Artifact Registry docker push REGION-docker.pkg.devPROJECT_ID}/hello-repo/hello-app:v2 Now you're ready to update your hello-app Kubernetes Deployment to use a new Docker image Cloud Shell Apply a rolling update to the existing hello-appDeployment with an image update using the kubectl set imagecommand: kubectl set image deployment/hello-app hello-app= REGION-docker.pkg.devPROJECT_ID}/hello-repo/hello-app:v2 Watch the running Pods running the v1image stop, and new Pods running the v2image start watch kubectl get pods Output: NAME READY STATUS RESTARTS AGE hello-app-89dc45f48-5bzqp 1/1 Running 0 2m42s hello-app-89dc45f48-scm66 1/1 Running 0 2m40s In a separate tab, navigate again to the hello-app-serviceExternal IP. You should now see the Versionset to 2.0.0 Console Go to the Workloadspage in the Google Cloud console Click hello-app On the Deployment detailspage, click Actions > Rolling update In the Rolling updatedialog, set the Image of hello-appfield to REGION-docker.pkg.dev/ PROJECT_ID/hello-repo/hello-app:v2 Click Update On the Deployment detailspage, inspect the Active Revisionssection. You should now see two Revisions, 1 and 2. Revision 1 corresponds to the initial Deployment you created earlier. Revision 2 is the rolling update you just started After a few moments, refresh the page. Under Managed pods, all of the replicas of hello-appnow correspond to Revision 2 In a separate tab, navigate again to the Service IP address you copied. The Versionshould be 2.0.0 ## Clean up To avoid incurring charges to your Google Cloud account for the resources used in this tutorial, either delete the project that contains the resources, or keep the project and delete the individual resources Delete the Service:This deallocates the Cloud Load Balancer created for your Service: kubectl delete service hello-app-service Delete the cluster:This deletes the resources that make up the cluster, such as the compute instances, disks, and network resources: gcloud container clusters delete hello-cluster --zone COMPUTE_ZONE Delete your container images:This deletes the Docker images you pushed to Artifact Registry gcloud artifacts docker images delete REGION-docker.pkg.devPROJECT_ID}/hello-repo/hello-app:v1 \ --delete-tags --quiet gcloud artifacts docker images delete \ REGION-docker.pkg.devPROJECT_ID}/hello-repo/hello-app:v2 \ --delete-tags --quiet ## What's next Learn about Pricing for GKE and use the Pricing Calculator to estimate costs Read the Load Balancers tutorial, which demonstrates advanced load balancing configurations for web applications Configure a static IP and domain name for your application Explore other Kubernetes Engine tutorials Explore reference architectures, diagrams, tutorials, and best practices about Google Cloud. Take a look at our Cloud Architecture Center ## Try it for yourself If you're new to Google Cloud, create an account to evaluate how GKE performs in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.Try GKE free