يوضح لك هذا البرنامج التعليمي كيفية حزم تطبيق ويب في صورة حاوية Docker ، وتشغيل صورة الحاوية هذه على مجموعة Google Kubernetes Engine (GKE). بعد ذلك ، تقوم بنشر تطبيق الويب كمجموعة موازنة التحميل من النسخ المتماثلة التي يمكن أن تتناسب مع احتياجات المستخدمين لديك ## أهداف - حزم تطبيق ويب نموذجي في صورة Docker - قم بتحميل صورة Docker إلى Artifact Registry - إنشاء كتلة GKE - نشر التطبيق النموذجي على الكتلة - إدارة القياس التلقائي للنشر - عرض نموذج التطبيق على الإنترنت - نشر إصدار جديد من نموذج التطبيق ## التكاليف يستخدم هذا البرنامج التعليمي المكونات التالية القابلة للفوترة من Google Cloud: لإنشاء تقدير التكلفة بناءً على الاستخدام المتوقع ، استخدم حاسبة التسعير عند الانتهاء من هذا البرنامج التعليمي ، يمكنك تجنب الفوترة المستمرة عن طريق حذف الموارد التي قمت بإنشائها. لمزيد من المعلومات ، راجع التنظيف ## قبل أن تبدأ ، اتبع الخطوات التالية لتمكين Kubernetes Engine API: - تسجيل الدخول إلى حساب جوجل كلاود الخاص بك. إذا كنت مستخدمًا جديدًا لـ Google Cloud ، فأنشئ حسابًا لتقييم أداء منتجاتنا في سيناريوهات العالم الحقيقي. يحصل العملاء الجدد أيضًا على أرصدة مجانية بقيمة 300 دولار لتشغيل واختبار ونشر أحمال العمل - في وحدة تحكم Google Cloud ، في صفحة محدد المشروع ، حدد أو أنشئ مشروع Google Cloud - تأكد من تمكين الفوترة لمشروع Cloud الخاص بك. تعرف على كيفية التحقق من تمكين الفوترة في مشروع ما - قم بتمكين Artifact Registry و Google Kubernetes Engine APIs - في وحدة تحكم Google Cloud ، في صفحة محدد المشروع ، حدد أو أنشئ مشروع Google Cloud - تأكد من تمكين الفوترة لمشروع Cloud الخاص بك. تعرف على كيفية التحقق من تمكين الفوترة في مشروع ما - قم بتمكين Artifact Registry و Google Kubernetes Engine APIs الخيار أ: استخدام 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 Registry ونشرها من التسجيل. Artifact Registry هو سجل الحاوية الموصى به في جوجل كلاود. بالنسبة إلى هذا البدء السريع ، ستقوم بإنشاء مستودع باسم مرحبا ريبو تعيين PROJECT_ID متغير البيئة لمعرف مشروع Google Cloud ( ). ستستخدم متغير البيئة هذا عند إنشاء صورة الحاوية ودفعها إلى المستودع الخاص بك معرف المشروع تصدير PROJECT_ID = معرف المشروع تأكد من أن ملف PROJECT_ID متغير البيئة له القيمة الصحيحة: صدى $ PROJECT_ID عيّن معرّف مشروعك لـ Google Cloud CLI: تعيين تكوين gcloud المشروع $ PROJECT_ID انتاج: عقار محدث [أساسي / مشروع] قم بإنشاء ملف hello-reporepository بالأمر التالي: تنشئ مستودعات gcloud artifacts hello-repo \ --repository-format = docker \ --location = REGION \ --description = "مستودع Docker"يحل محل مع منطقة للمستودع ، مثل منطقة us-west1. لمشاهدة قائمة بالمواقع المتاحة ، قم بتشغيل الأمر: قائمة مواقع القطع الأثرية في gcloud ## بناء صورة الحاوية في هذا البرنامج التعليمي ، تقوم بنشر نموذج ويب تطبيق يسمى مرحبًا ، خادم ويب مكتوب في Go الذي يستجيب لجميع الطلبات بالرسالة مرحبا بالعالم! على المنفذ 8080 يقبل GKE صور Docker كتنسيق نشر التطبيق قبل النشر مرحبًا التطبيق لـ GKE ، يجب أن تقوم بحزمه ال hello-app source code كصورة Docker لإنشاء صورة Docker ، تحتاج إلى شفرة المصدر وملف Docker. يحتوي ملف Dockerfile على إرشادات حول كيفية إنشاء الصورة تحميل hello-appsource code و Dockerfile عن طريق تشغيل الأوامر التالية: git clone httpsgithub.com/GoogleCloudPlatform/kubernetes-engine-samples cd kubernetes-engine-sample / hello-app بناء ووضع علامة على صورة Docker لـ مرحبا التطبيق: بناء عامل ميناء -t REGION-docker.pkg.devPROJECT_ID} / hello-repo / hello-app: v1 يوجه هذا الأمر Docker لإنشاء الصورة باستخدام ملف Dockerfile في الدليل الحالي ، احفظه في بيئتك المحلية ، وقم بتمييزه باسم ، مثل us-west1-docker.pkg.dev/my-project/hello-repo/hello-app:v1. يتم دفع الصورة إلى Artifact Registry في القسم التالي - ال يقوم PROJECT_IDvariable بربط صورة الحاوية بامتداد hello-reporepository في مشروع Google Cloud الخاص بك - ال us-west1-docker.pkg.devprefix يشير إلى Artifact Registry ، المضيف الإقليمي لمستودعك - ال قم بتشغيل أمر docker images للتحقق من نجاح الإنشاء: صور عامل ميناء انتاج: معرف صورة المستودع بحجم us-west1-docker.pkg.dev/my-project/hello-repo/hello-app v1 25cfadb1bf28 منذ 10 ثوانٍ 54 ميغابايت ## تشغيل الحاوية محليًا (اختياري) اختبر صورة الحاوية الخاصة بك باستخدام محرك Docker المحلي الخاص بك: تشغيل عامل الإرساء --rm -p 8080: 8080 REGION-docker.pkg.devPROJECT_ID} / hello-repo / hello-app: v1 إذا كنت تستخدم Cloud Shell ، فانقر فوق زر معاينة الويب ثم حدد ملف رقم 8080port. يفتح GKE عنوان URL للمعاينة على خدمة الوكيل في نافذة متصفح جديدة بخلاف ذلك ، افتح نافذة طرفية جديدة (أو علامة تبويب Cloud Shell) وقم بتشغيل الأمر التالي للتحقق من أن الحاوية تعمل وتستجيب للطلبات باستخدام "Hello، World حليقة HTplocalhost: 8080 بعد أن ترى استجابة ناجحة ، يمكنك إزالة الحاوية بالضغط Ctrl + Cin علامة التبويب حيث يوجد ملف تشغيل أمر تشغيل عامل الإرساء ## دفع صورة Docker إلى Artifact Registry يجب تحميل صورة الحاوية إلى سجل حتى تتمكن مجموعة GKE من تنزيل صورة الحاوية وتشغيلها. في هذا البرنامج التعليمي ، سوف تقوم بتخزين الحاوية الخاصة بك في Artifact Registry قم بتكوين أداة سطر أوامر Docker للمصادقة على Artifact Registry: gcloud المصادقة تكوين عامل الإرساء REGION-docker.pkg.dev ادفع صورة Docker التي أنشأتها للتو إلى المستودع: دفع عامل ميناء REGION-docker.pkg.devPROJECT_ID} / hello-repo / hello-app: v1 ## إنشاء كتلة GKE الآن بعد أن تم تخزين صورة Docker في Artifact Registry ، أنشئ ملف GKE تَجَمَّع يهرب مرحبا التطبيق. تتكون مجموعة GKE من مجموعة مثيلات Compute Engine VM تشغيل Kubernetes ، تنسيق مجموعة البرامج مفتوحة المصدر النظام الذي يدير GKE شل السحابة قم بتعيين منطقة أو منطقة Compute Engine الخاصة بك. بناءً على وضع التشغيل الذي تختار استخدامه في GKE ، حدد منطقة أو منطقة افتراضية. إذا كنت تستخدم الوضع القياسي ، فإن مجموعتك تكون منطقة (لهذا البرنامج التعليمي) ، لذا قم بتعيين منطقة الحساب الافتراضية. إذا كنت تستخدم وضع الطيار الآلي ، فإن مجموعتك تكون إقليمية ، لذا قم بتعيين منطقة الحوسبة الافتراضية. اختر منطقة أو منطقة هي الأقرب لمستودع Artifact Registry الذي قمت بإنشائه مجموعة قياسية ، مثل us-west1-a: تعيين تكوين gcloud الحساب / المنطقة مجموعة الطيار الآلي COMPUTE_ZONE ، مثل us-west1: تعيين تكوين gcloud الحساب / المنطقة COMPUTE_REGION - قم بإنشاء كتلة تسمى مرحبا العنقودية: الكتلة القياسية: مجموعات حاويات gcloud تنشئ hello-clusters الطيار الآلي الكتلة: تقوم مجموعات حاوية gcloud بإنشاء مجموعة ترحيب تلقائية يستغرق إنشاء مجموعة GKE وفحص صحتها بضع دقائق - بعد اكتمال الأمر ، قم بتشغيل الأمر التالي لرؤية العقد الثلاثة للمجموعة: kubectl الحصول على العقد انتاج: NAME STATUS ROLES AGE VERSION 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