Tutorial ini menunjukkan kepada anda cara untuk membungkus aplikasi web dalam imej bekas Docker dan menjalankan imej bekas itu pada kelompok Google Kubernetes Engine (GKE). Kemudian, anda menggunakan aplikasi web sebagai set replika seimbang beban yang boleh berskala mengikut keperluan pengguna anda ## Objektif - Pakej contoh aplikasi web ke dalam imej Docker - Muat naik imej Docker ke Pendaftaran Artifak - Buat gugusan GKE - Sebarkan aplikasi sampel ke kluster - Urus penskalaan automatik untuk penempatan - Dedahkan aplikasi sampel kepada internet - Pasang versi baharu apl sampel ## Kos Tutorial ini menggunakan komponen Google Cloud yang boleh dibilkan berikut: Untuk menjana anggaran kos berdasarkan unjuran penggunaan anda, gunakan kalkulator harga Apabila anda menyelesaikan tutorial ini, anda boleh mengelakkan pengebilan berterusan dengan memadamkan sumber yang anda buat. Untuk maklumat lanjut, lihat Membersihkan ## Sebelum anda mulaAmbil langkah berikut untuk mendayakan API Enjin Kubernetes: - Log masuk ke akaun Google Cloud anda. Jika anda baru menggunakan Google Cloud, buat akaun untuk menilai prestasi produk kami dalam senario dunia sebenar. Pelanggan baharu juga mendapat kredit percuma $300 untuk menjalankan, menguji dan menggunakan beban kerja - Dalam konsol Google Cloud, pada halaman pemilih projek, pilih atau buat projek Google Cloud - Pastikan pengebilan didayakan untuk projek Awan anda. Ketahui cara menyemak sama ada pengebilan didayakan pada projek - Dayakan Pendaftaran Artifak dan API Enjin Kubernetes Google - Dalam konsol Google Cloud, pada halaman pemilih projek, pilih atau buat projek Google Cloud - Pastikan pengebilan didayakan untuk projek Awan anda. Ketahui cara menyemak sama ada pengebilan didayakan pada projek - Dayakan Pendaftaran Artifak dan API Enjin Kubernetes Google Pilihan A: Gunakan Cloud Shell Anda boleh mengikuti tutorial ini menggunakan Cloud Shell, yang datang diprapasang dengan gcloud, buruh pelabuhan, dan alat baris arahan kubectl digunakan dalam tutorial ini. Jika anda menggunakan Cloud Shell, anda tidak perlu memasangnya alat baris arahan pada stesen kerja anda Untuk menggunakan Cloud Shell: - Pergi ke konsol Google Cloud Klik pada Aktifkan Cloud Shell butang di bahagian atas tetingkap konsol Google Cloud Sesi Cloud Shell dibuka di dalam bingkai baharu di bahagian bawah konsol Google Cloud dan memaparkan gesaan baris arahan Pilihan B: Gunakan alat baris arahan secara setempat Jika anda lebih suka mengikuti tutorial ini pada stesen kerja anda, ikuti langkah ini untuk memasang alatan yang diperlukan Pasang Google Cloud CLI Menggunakan CLI gcloud, pasang alat baris perintah Kubernetes kubectlis digunakan untuk berkomunikasi dengan Kubernetes, iaitu sistem orkestrasi kluster bagi kluster GKE: komponen gcloud memasang kubectl Pasang Docker Community Edition (CE) pada stesen kerja anda. Anda menggunakan ini untuk membina imej bekas untuk aplikasi Pasang alat kawalan sumber Git untuk mengambil contoh aplikasi daripada GitHub ## Buat repositori Dalam tutorial ini, anda menyimpan imej dalam Pendaftaran Artifak dan gunakannya daripada pendaftaran. Pendaftaran Artifak ialah pendaftaran kontena yang disyorkan Google Cloud. Untuk permulaan pantas ini, anda akan membuat repositori bernama hello-repo Menetapkan PROJECT_IDpembolehubah persekitaran kepada ID projek Google Cloud anda ( ). Anda akan menggunakan pembolehubah persekitaran ini apabila anda membina imej bekas dan menolaknya ke repositori anda PROJECT_ID eksport PROJECT_ID= PROJECT_ID Sahkan bahawa PROJECT_IDenvironment variable mempunyai nilai yang betul: echo $PROJECT_ID Tetapkan ID projek anda untuk Google Cloud CLI: projek set konfigurasi gcloud $PROJECT_ID Pengeluaran: Harta yang dikemas kini [teras/projek] Cipta hello-repository dengan arahan berikut: repositori artifak gcloud mencipta hello-repo \ --repository-format=docker \ --location= REGION\ --description="Repositori Docker"Gantikan dengan rantau a untuk repositori, seperti WILAYAH kami-barat1. Untuk melihat senarai lokasi yang tersedia, jalankan arahan: senarai lokasi artifak gcloud ## Membina imej bekas Dalam tutorial ini, anda menggunakan web sampel permohonan dipanggil hello-app, pelayan web yang ditulis dalam Go yang membalas semua permintaan dengan mesej Hai dunia! pada port 8080 GKE menerima imej Docker sebagai format penggunaan aplikasi Sebelum digunakan hello-app kepada GKE, anda mesti pakej yang kod sumber hello-app sebagai imej Docker Untuk membina imej Docker, anda memerlukan kod sumber dan fail Docker. Fail Docker mengandungi arahan tentang cara imej dibina Muat turun kod hello-appsource dan Dockerfile dengan menjalankan arahan berikut: klon git httpsgithub.com/GoogleCloudPlatform/kubernetes-engine-samples cd kubernetes-engine-samples/hello-app Bina dan tandai imej Docker untuk hello-app: binaan buruh pelabuhan -t REGION-docker.pkg.devPROJECT_ID}/hello-repo/hello-app:v1 Perintah ini mengarahkan Docker untuk membina imej menggunakan Dockerfile dalam direktori semasa, simpannya ke persekitaran setempat anda dan tandainya dengan nama, seperti us-west1-docker.pkg.dev/my-project/hello-repo/hello-app:v1. Imej ditolak ke Pendaftaran Artifak di bahagian seterusnya - Yang PROJECT_IDpembolehubah mengaitkan imej bekas dengan hello-repository dalam projek Google Cloud anda - Yang us-west1-docker.pkg.devprefix merujuk kepada Pendaftaran Artifak, hos wilayah untuk repositori anda - Yang Jalankan arahan images docker untuk mengesahkan bahawa binaan itu berjaya: imej buruh pelabuhan Pengeluaran: ID IMEJ TEG REPOSITORI DIBUAT SAIZ us-west1-docker.pkg.dev/my-project/hello-repo/hello-app v1 25cfadb1bf28 10 saat lalu 54 MB ## Menjalankan bekas anda secara setempat (pilihan) Uji imej bekas anda menggunakan enjin Docker tempatan anda: larian buruh pelabuhan --rm -p 8080:8080 REGION-docker.pkg.devPROJECT_ID}/hello-repo/hello-app:v1 Jika anda menggunakan Cloud Shell, klik butang Butang Pratonton Web dan kemudian pilih Nombor port 8080. GKE membuka URL pratonton pada perkhidmatan proksinya dalam tetingkap penyemak imbas baharu Jika tidak, buka tetingkap terminal baharu (atau tab Cloud Shell) dan jalankan arahan berikut untuk mengesahkan bahawa bekas berfungsi dan membalas permintaan dengan "Hello, World curl httplocalhost:8080 Selepas anda melihat respons yang berjaya, anda boleh menurunkan bekas dengan menekan Ctrl+Cin tab di mana arahan larian docker sedang berjalan ## Menolak imej Docker ke Pendaftaran Artifak Anda mesti memuat naik imej bekas ke pendaftaran supaya kluster GKE anda boleh memuat turun dan menjalankan imej bekas. Dalam tutorial ini, anda akan menyimpan bekas anda dalam Pendaftaran Artifak Konfigurasikan alat baris arahan Docker untuk mengesahkan ke Pendaftaran Artifak: gcloud auth configure-docker REGION-docker.pkg.dev Tolak imej Docker yang baru anda bina ke repositori: tolak buruh pelabuhan REGION-docker.pkg.devPROJECT_ID}/hello-repo/hello-app:v1 ## Mencipta gugusan GKE Sekarang bahawa imej Docker disimpan dalam Pendaftaran Artifak, buat GKE kelompok untuk berlari hello-app. Kluster GKE terdiri daripada kumpulan contoh VM Compute Engine menjalankan Kubernetes, orkestrasi kluster sumber terbuka sistem yang menguasai GKE Cloud Shell Tetapkan zon atau rantau Enjin Kira anda. Bergantung pada mod operasi yang anda pilih untuk digunakan dalam GKE, tentukan zon atau rantau lalai. Jika anda menggunakan mod Standard, kluster anda adalah zon (untuk tutorial ini), jadi tetapkan zon pengiraan lalai anda. Jika anda menggunakan mod Autopilot, kluster anda adalah serantau, jadi tetapkan rantau pengiraan lalai anda. Pilih zon atau wilayah yang paling hampir dengan repositori Pendaftaran Artifak yang anda buat Standardcluster, seperti us-west1-a: gcloud config set compute/zone Kluster Autopilot COMPUTE_ZONE, seperti kami-barat1: gcloud config set compute/region COMPUTE_REGION - Buat gugusan bernama hello-cluster: Kluster Standard: kluster kontena gcloud mencipta kluster helo Autopilotcluster: kluster kontena gcloud create-auto hello-cluster Ia mengambil masa beberapa minit untuk gugusan GKE anda dibuat dan diperiksa kesihatan - Selepas arahan selesai, jalankan arahan berikut untuk melihat tiga Nod kluster: kubectl mendapatkan nod Pengeluaran: NAMA STATUS PERANAN VERSI UMUR gke-hello-cluster-default-pool-229c0700-cbtd Sedia 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