1. مقدمة
يصعب تشغيل المواقع الإلكترونية والتطبيقات.
تحدث مشاكل عندما لا يفترض أن تحدث، وتتعطّل الخوادم، وتتسبّب زيادة الطلب في استخدام المزيد من الموارد، ويصبح إجراء تغييرات بدون توقّف عن العمل أمرًا معقّدًا ومجهدًا.
تخيَّل أداة يمكن أن تساعدك في تنفيذ كل ذلك وتتيح لك حتى أتمتة العملية. مع GKE، لا يمكن تحقيق كل ذلك فحسب، بل يمكن تحقيقه بسهولة أيضًا. في هذا الدرس التطبيقي حول الترميز، ستتولّى دور مطوّر يدير موقعًا إلكترونيًا للتجارة الإلكترونية تابعًا لشركة وهمية باسم Fancy Store. بسبب المشاكل المتعلّقة بتوسيع النطاق والانقطاعات، تم تكليفك بنشر تطبيقك على GKE.
تم ترتيب التمارين لتعكس تجربة مطوّر السحابة الإلكترونية الشائعة:
- أنشئ مجموعة GKE.
- أنشئ حاوية Docker.
- نشر الحاوية على GKE
- عرض الحاوية من خلال خدمة
- توسيع نطاق الحاوية إلى عدة نُسخ متطابقة
- تعديل الموقع الإلكتروني
- طرح إصدار جديد بدون أي توقّف عن العمل
مخطّط البنية

أهداف الدورة التعليمية
- كيفية إنشاء مجموعة GKE
- كيفية إنشاء صورة Docker
- كيفية نشر صور Docker على Kubernetes
- كيفية توسيع نطاق تطبيق على Kubernetes
- كيفية إجراء عملية تعديل متواصل على Kubernetes
المتطلبات الأساسية
- حساب Google لديه إذن وصول إداري لإنشاء مشاريع أو مشروع لديه دور مالك المشروع
- فهم أساسي لـ Docker وKubernetes (إذا لم يكن لديك فهم أساسي، يُرجى مراجعة Docker وKubernetes الآن)
2. إعداد البيئة
إعداد بيئة الاختبار الذاتي
إذا لم يكن لديك حساب على Google، عليك إنشاء حساب. سجِّل الدخول إلى Google Cloud Console وأنشِئ مشروعًا جديدًا.


تذكَّر أنّ رقم تعريف المشروع هو اسم فريد في جميع مشاريع Google Cloud (الاسم أعلاه مستخدَم حاليًا ولن يكون متاحًا لك، نأسف لذلك). سيُشار إليه باسم PROJECT_ID لاحقًا.
بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام موارد Google Cloud. يمكن لمستخدمي Google Cloud الجدد الاستفادة من فترة تجريبية مجانية بقيمة 300 دولار أمريكي. إذا لم تكن مستخدمًا جديدًا، لا داعي للقلق لأنّ تكلفة الجلسة التدريبية لن تتجاوز بضعة دولارات. ومع ذلك، قد يكلفك الدرس التطبيقي حول الترميز المزيد من المال إذا استخدمت المزيد من الموارد أو تركتها قيد التشغيل (راجِع قسم "إخلاء مساحة" في النهاية). لمزيد من المعلومات، اطّلِع على الأسعار.
Cloud Shell
على الرغم من إمكانية تشغيل Google Cloud وGKE عن بُعد باستخدام الكمبيوتر المحمول، ستستخدم Cloud Shell، وهي بيئة سطر أوامر تعمل في السحابة الإلكترونية، لإكمال الدرس التطبيقي حول الترميز.
يتم تحميل هذا الجهاز الظاهري المستند إلى Debian بجميع أدوات التطوير التي تحتاج إليها. توفّر هذه الخدمة دليلًا منزليًا دائمًا بسعة 5 غيغابايت وتعمل في Google Cloud، ما يؤدي إلى تحسين أداء الشبكة والمصادقة بشكل كبير. يعني ذلك أنّ كل ما تحتاج إليه لهذا الدرس التطبيقي حول الترميز هو متصفّح (نعم، يمكن استخدامه على جهاز Chromebook).
- لتفعيل Cloud Shell من Cloud Console، ما عليك سوى النقر على تفعيل Cloud Shell
(يستغرق توفير البيئة والاتصال بها بضع لحظات فقط).
بعد الاتصال بـ Cloud Shell، من المفترض أن يظهر لك أنّه تم إثبات هويتك وأنّ المشروع تم ضبطه على PROJECT_ID.
gcloud auth list
ناتج الأمر
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
ناتج الأمر
[core] project = <PROJECT_ID>
إذا لم يتم ضبط المشروع لسبب ما، ما عليك سوى تنفيذ الأمر التالي:
gcloud config set project <PROJECT_ID>
هل تبحث عن PROJECT_ID؟ يمكنك الاطّلاع على المعرّف الذي استخدمته في خطوات الإعداد أو البحث عنه في لوحة بيانات Cloud Console:
يضبط Cloud Shell أيضًا بعض متغيرات البيئة تلقائيًا، ما قد يكون مفيدًا عند تنفيذ الأوامر المستقبلية.
echo $GOOGLE_CLOUD_PROJECT
ناتج الأمر
<PROJECT_ID>
- أخيرًا، اضبط المنطقة التلقائية وإعدادات المشروع.
gcloud config set compute/zone us-central1-f
يمكنك اختيار مجموعة متنوعة من المناطق المختلفة. لمزيد من المعلومات، يُرجى الاطّلاع على الأقاليم والمناطق.
3- إنشاء مجموعة GKE
بعد إعداد بيئة المطوّرين، تحتاج إلى مجموعة GKE لنشر موقعك الإلكتروني. قبل إنشاء مجموعة، عليك التأكّد من تفعيل واجهات برمجة التطبيقات المناسبة. نفِّذ الأمر التالي لتفعيل واجهة برمجة التطبيقات الخاصة بالحاويات:
gcloud services enable container.googleapis.com
يمكنك الآن إنشاء مجموعتك. اتّبِع الخطوات التالية لإنشاء مجموعة باسم fancy-cluster تتضمّن 3 عُقد:
gcloud container clusters create fancy-cluster --num-nodes 3
قد يستغرق إنشاء المجموعة عدة دقائق. بعد ذلك، شغِّل الأمر التالي واطّلِع على مثيلات الأجهزة الافتراضية الثلاث الخاصة بعُقد العاملة في المجموعة:
gcloud compute instances list
إخراج:
NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS gke-fancy-cluster-default-pool-ad92506d-1ng3 us-east4-a n1-standard-1 10.150.0.7 XX.XX.XX.XX RUNNING gke-fancy-cluster-default-pool-ad92506d-4fvq us-east4-a n1-standard-1 10.150.0.5 XX.XX.XX.XX RUNNING gke-fancy-cluster-default-pool-ad92506d-4zs3 us-east4-a n1-standard-1 10.150.0.6 XX.XX.XX.XX RUNNING
يمكنك أيضًا عرض مجموعتك والمعلومات ذات الصلة في Cloud Console. انقر على زر القائمة في أعلى يمين الصفحة، وانتقِل للأسفل إلى Kubernetes Engine، ثم انقر على "المجموعات". من المفترض أن يظهر اسم مجموعتك على النحو التالي: fancy-cluster.


تهانينا! لقد أنشأت مجموعتك الأولى.
4. إنشاء نسخة طبق الأصل من مستودع الرمز المصدر
بما أنّ هذا الموقع الإلكتروني حالي، ما عليك سوى استنساخ المصدر من المستودع لكي تتمكّن من التركيز على إنشاء صور Docker ونشرها على GKE.
نفِّذ الأوامر التالية لاستنساخ مستودع المصدر إلى مثيل Cloud Shell وتغييره إلى الدليل المناسب. ستثبّت أيضًا تبعيات Node.js لتتمكّن من اختبار تطبيقك قبل نشره.
cd ~ git clone https://github.com/googlecodelabs/monolith-to-microservices.git cd ~/monolith-to-microservices ./setup.sh
يؤدي ذلك إلى استنساخ المستودع وتغيير الدليل وتثبيت التبعيات اللازمة لتشغيل تطبيقك محليًا. قد يستغرق تنفيذ هذا النص البرمجي بضع دقائق.
يجب إجراء العناية الواجبة واختبار تطبيقك. نفِّذ الأمر التالي لبدء تشغيل خادم الويب:
cd ~/monolith-to-microservices/monolith npm start
إخراج:
Monolith listening on port 8080!
يمكنك معاينة تطبيقك من خلال النقر على رمز المعاينة على الويب في قائمة Cloud Shell واختيار "معاينة على المنفذ 8080".

من المفترض أن يؤدي ذلك إلى فتح نافذة جديدة يمكنك فيها رؤية متجرك على Fancy وهو يعمل.

يمكنك إغلاق هذه النافذة بعد الاطّلاع على الموقع الإلكتروني. اضغط على Control+C (في نظام التشغيل Windows أو Mac) في نافذة الوحدة الطرفية لإيقاف عملية خادم الويب.
5- إنشاء حاوية Docker باستخدام Cloud Build
بعد أن أصبحت ملفات المصدر جاهزة، حان الوقت لإنشاء حاوية Docker لتطبيقك.
في العادة، عليك اتّخاذ خطوتين تتضمّنان إنشاء حاوية Docker ونقلها إلى سجلّ لتخزين الصورة التي يستردّها GKE. ومع ذلك، يمكنك تسهيل الأمر باستخدام Cloud Build لإنشاء حاوية Docker ووضع الصورة في Container Registry باستخدام أمر واحد. (للاطّلاع على العملية اليدوية لإنشاء ملف Docker وإرساله، يُرجى الاطّلاع على البدء السريع في Container Registry).
تضغط Cloud Build الملفات من الدليل وتنقلها إلى حزمة Cloud Storage. بعد ذلك، تأخذ عملية التصميم الملفات من الحزمة وتستخدم Dockerfile لتشغيل عملية إنشاء Docker. بما أنّك حدّدت العلامة --tag مع المضيف على أنّه gcr.io لصورة Docker، سيتم نشر صورة Docker الناتجة إلى Container Registry.
أولاً، عليك تفعيل Cloud Build API من خلال تنفيذ الأمر التالي:
gcloud services enable cloudbuild.googleapis.com
بعد تفعيل واجهة برمجة التطبيقات، نفِّذ الأمر التالي في Cloud Shell لبدء عملية الإنشاء:
cd ~/monolith-to-microservices/monolith
gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 .
تستغرق هذه العملية بضع دقائق، ولكن بعد اكتمالها، يمكنك الاطّلاع على الناتج التالي في المحطة الطرفية:
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ID CREATE_TIME DURATION SOURCE IMAGES STATUS 1ae295d9-63cb-482c-959b-bc52e9644d53 2019-08-29T01:56:35+00:00 33S gs://<PROJECT_ID>_cloudbuild/source/1567043793.94-abfd382011724422bf49af1558b894aa.tgz gcr.io/<PROJECT_ID>/monolith:1.0.0 SUCCESS
لعرض سجلّ عمليات الإنشاء أو مشاهدة العملية في الوقت الفعلي، يمكنك الانتقال إلى Cloud Console. انقر على زر القائمة في أعلى يمين الصفحة، وانتقِل للأسفل إلى Ci/CD، ثم انقر على Cloud Build، ثم انقر على "السجلّ". ستظهر لك قائمة بالإصدارات السابقة، ولكن من المفترض أن يظهر الإصدار الذي أنشأته فقط.

إذا نقرت على "رقم تعريف الإصدار"، يمكنك الاطّلاع على جميع تفاصيل هذا الإصدار، بما في ذلك ناتج السجلّ.
في صفحة تفاصيل الإصدار، يمكنك الاطّلاع على صورة الحاوية التي تم إنشاؤها من خلال النقر على "اسم الصورة" في قسم معلومات الإصدار.

6. نشر الحاوية على GKE
بعد أن أضفت موقعك الإلكتروني إلى حاوية وأرسلتها إلى Container Registry، يمكنك نشرها على Kubernetes.
لنشر التطبيقات وإدارتها على مجموعة GKE، عليك التواصل مع نظام إدارة المجموعات في Kubernetes. يمكنك عادةً إجراء ذلك باستخدام أداة سطر الأوامر kubectl.
تمثّل Kubernetes التطبيقات على شكل حِزم، وهي وحدات تمثّل حاوية (أو مجموعة من الحاويات المرتبطة بإحكام). Pod هي أصغر وحدة قابلة للنشر في Kubernetes. في هذه الحالة، لا يحتوي كل Pod إلا على حاوية التطبيق المتكامل.
لنشر تطبيقك، عليك إنشاء عملية نشر. تتولّى عملية النشر إدارة نُسخ متعددة من تطبيقك، تُعرف باسم النُسخ المتماثلة، وتجدولها ليتم تشغيلها على العُقد الفردية في مجموعتك. في هذه الحالة، لن يتم تشغيل سوى وحدة Pod واحدة من تطبيقك. تضمن عمليات النشر ذلك من خلال إنشاء ReplicaSet. تكون مجموعة النسخ المتماثلة مسؤولة عن التأكّد من أنّ عدد النسخ المتماثلة المحدّد يعمل دائمًا.
يتسبّب الأمر kubectl create deployment في أن ينشئ Kubernetes عملية نشر باسم monolith على مجموعتك مع نسخة طبق الأصل 1.
نفِّذ الأمر التالي لنشر تطبيقك:
kubectl create deployment monolith --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0
التحقّق من عملية النشر
للتحقّق من إنشاء عملية النشر بنجاح، نفِّذ الأمر التالي (قد يستغرق ظهور حالة Pod على أنّها "قيد التشغيل" بضع لحظات):
kubectl get all
إخراج:
NAME READY STATUS RESTARTS AGE pod/monolith-7d8bc7bf68-htm7z 1/1 Running 0 6m21s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.27.240.1 <none> 443/TCP 24h NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE deployment.apps/monolith 1 1 1 1 20m NAME DESIRED CURRENT READY AGE replicaset.apps/monolith-7d8bc7bf68 1 1 1 20m
يعرض لك هذا الناتج عدة عناصر. يمكنك الاطّلاع على عملية النشر الحالية، وReplicaSet مع عدد Pod المطلوب وهو واحد، وPod الذي يتم تشغيله. يبدو أنّك أنشأت كل شيء بنجاح.
للاطّلاع على الموارد بشكل فردي، يمكنك تنفيذ الأوامر التالية:
# Show pods kubectl get pods # Show deployments kubectl get deployments # Show replica sets kubectl get rs #You can also combine them kubectl get pods,deployments
للاستفادة من جميع مزايا Kubernetes، يمكنك محاكاة عطل في الخادم وحذف وحدة Pod ومعرفة ما سيحدث.
انسخ اسم الحزمة من الأمر السابق ونفِّذ الأمر التالي لحذفها:
kubectl delete pod/<POD_NAME>
إذا كنت سريعًا بما يكفي، يمكنك تنفيذ الأمر السابق لرؤية كل شيء مرة أخرى، ويجب أن ترى وحدتَي Pod، إحداهما في طور الإنهاء والأخرى في طور الإنشاء أو التشغيل:
kubectl get all
إخراج:
NAME READY STATUS RESTARTS AGE pod/monolith-7d8bc7bf68-2bxts 1/1 Running 0 4s pod/monolith-7d8bc7bf68-htm7z 1/1 Terminating 0 9m35s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.27.240.1 <none> 443/TCP 24h NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE deployment.apps/monolith 1 1 1 1 24m NAME DESIRED CURRENT READY AGE replicaset.apps/monolith-7d8bc7bf68 1 1 1 24m
ولماذا حدث ذلك؟ لاحظت ReplicaSet أنّ الوحدة بصدد الإنهاء، لذا شغّلت وحدة جديدة للحفاظ على عدد النسخ المتماثلة المطلوب. في وقت لاحق، ستتعرّف على كيفية التوسّع لضمان تشغيل عدة مثيلات، حتى لا يواجه المستخدمون أي وقت تعطل في حال توقّف أحدها.
7. عرض عملية نشر GKE
لقد نشرت تطبيقك على GKE، ولكن ليس لديك طريقة للوصول إليه من خارج المجموعة. بشكلٍ تلقائي، لا يمكن الوصول إلى الحاويات التي تشغّلها على GKE من الإنترنت لأنّها لا تتضمّن عناوين IP خارجية. يجب أن تعرض تطبيقك بشكل واضح لعدد الزيارات من الإنترنت من خلال مورد Service. توفّر الخدمة إمكانية الربط بالشبكة وعنوان IP لوحدات Pod في تطبيقك. ينشئ GKE عنوان IP خارجيًا وجهاز موازنة حمل (يخضع للفوترة) لتطبيقك.
نفِّذ الأمر التالي لإتاحة موقعك الإلكتروني على الإنترنت:
kubectl expose deployment monolith --type=LoadBalancer --port 80 --target-port 8080
إخراج:
service/monolith exposed
الوصول إلى الخدمة
يخصّص GKE عنوان IP خارجيًا لمورد الخدمة، وليس لعملية النشر. إذا أردت العثور على عنوان IP خارجي وفّره GKE لتطبيقك، يمكنك فحص الخدمة باستخدام الأمر kubectl get service:
kubectl get service
إخراج:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE monolith 10.3.251.122 203.0.113.0 80:30877/TCP 3d
بعد تحديد عنوان IP الخارجي لتطبيقك، انسَخه. انتقِل إلى عنوان URL هذا (مثل http://203.0.113.0) باستخدام المتصفّح للتحقّق من إمكانية الوصول إلى تطبيقك.

من المفترض أن يظهر لك الموقع الإلكتروني نفسه الذي اختبرته سابقًا. تهانينا! يعمل موقعك الإلكتروني بالكامل على Kubernetes.
8. توسيع نطاق نشر GKE
بعد أن أصبح لديك مثيل قيد التشغيل لتطبيقك في GKE وتم عرضه على الإنترنت، أصبح موقعك الإلكتروني رائجًا للغاية. تحتاج إلى طريقة لتوسيع نطاق تطبيقك إلى مثيلات متعددة حتى تتمكّن من التعامل مع عدد الزيارات. تعرَّف على كيفية توسيع نطاق تطبيقك إلى ما يصل إلى ثلاث نُسخ طبق الأصل.
نفِّذ الأمر التالي لتوسيع نطاق عملية النشر إلى ثلاث نُسخ طبق الأصل:
kubectl scale deployment monolith --replicas=3
إخراج:
deployment.apps/monolith scaled
التحقّق من عملية النشر الموسّعة
للتحقّق من أنّه تم توسيع نطاق عملية النشر بنجاح، شغِّل الأمر التالي:
kubectl get all
إخراج:
NAME READY STATUS RESTARTS AGE pod/monolith-7d8bc7bf68-2bxts 1/1 Running 0 36m pod/monolith-7d8bc7bf68-7ds7q 1/1 Running 0 45s pod/monolith-7d8bc7bf68-c5kxk 1/1 Running 0 45s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.27.240.1 <none> 443/TCP 25h service/monolith LoadBalancer 10.27.253.64 XX.XX.XX.XX 80:32050/TCP 6m7s NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE deployment.apps/monolith 3 3 3 3 61m NAME DESIRED CURRENT READY AGE replicaset.apps/monolith-7d8bc7bf68 3 3 3 61m
من المفترض أن تظهر لك ثلاث حالات لتطبيق Pod قيد التشغيل. يُرجى العِلم أيضًا أنّ عملية النشر وReplicaSet تتضمّنان الآن عددًا مطلوبًا يبلغ ثلاثة.
9. إجراء تغييرات على الموقع الإلكتروني
طلب منك فريق التسويق تغيير الصفحة الرئيسية لموقعك الإلكتروني. ويرون أنّه يجب أن يكون أكثر إفادةً من خلال توضيح طبيعة شركتك والمنتجات التي تبيعها. في هذا القسم، ستضيف بعض النصوص إلى الصفحة الرئيسية لإرضاء فريق التسويق. يبدو أنّ أحد المطوّرين قد أجرى التغييرات باستخدام اسم الملف index.js.new. يمكنك نسخ الملف إلى index.js وسيظهر التغيير الذي أجريته. اتّبِع التعليمات أدناه لإجراء التغييرات المناسبة.
نفِّذ الأوامر التالية، وانسخ الملف المعدَّل إلى اسم الملف الصحيح، واطبع محتواه للتحقّق من التغييرات:
cd ~/monolith-to-microservices/react-app/src/pages/Home mv index.js.new index.js cat ~/monolith-to-microservices/react-app/src/pages/Home/index.js
يجب أن تبدو التعليمة البرمجية الناتجة على النحو التالي:
/*
Copyright 2019 Google LLC
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import React from "react";
import { makeStyles } from "@material-ui/core/styles";
import Paper from "@material-ui/core/Paper";
import Typography from "@material-ui/core/Typography";
const useStyles = makeStyles(theme => ({
root: {
flexGrow: 1
},
paper: {
width: "800px",
margin: "0 auto",
padding: theme.spacing(3, 2)
}
}));
export default function Home() {
const classes = useStyles();
return (
<div className={classes.root}>
<Paper className={classes.paper}>
<Typography variant="h5">
Fancy Fashion & Style Online
</Typography>
<br />
<Typography variant="body1">
Tired of mainstream fashion ideas, popular trends and societal norms?
This line of lifestyle products will help you catch up with the Fancy trend and express your personal style.
Start shopping Fancy items now!
</Typography>
</Paper>
</div>
);
}
لقد عدّلت مكوّنات React، ولكن عليك إنشاء تطبيق React لإنشاء الملفات الثابتة. نفِّذ الأمر التالي لإنشاء تطبيق React ونسخه إلى دليل monolith العام:
cd ~/monolith-to-microservices/react-app npm run build:monolith
بعد تعديل الرمز، عليك إعادة إنشاء حاوية Docker ونشرها في Container Registry. يمكنك استخدام الأمر نفسه كما في السابق، ولكن هذه المرة، ستعدّل تصنيف الإصدار.
نفِّذ الأمر التالي لتفعيل إصدار جديد من Cloud Build يتضمّن إصدارًا معدَّلاً من الصورة هو 2.0.0:
cd ~/monolith-to-microservices/monolith
#Feel free to test your application
npm start
gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 .
اضغط على Control+C (في نظام التشغيل Windows أو Mac) في نافذة الوحدة الطرفية لإيقاف عملية خادم الويب.
في القسم التالي، ستستخدم هذه الصورة لتعديل تطبيقك بدون أي توقّف عن العمل.
10. تعديل الموقع الإلكتروني بدون توقّف
اكتملت التغييرات، وفريق التسويق راضٍ عن التعديلات التي أجريتها. حان الوقت لتعديل الموقع الإلكتروني بدون مقاطعة المستخدمين. اتّبِع التعليمات أدناه لتعديل موقعك الإلكتروني.
تضمن التحديثات المتجدّدة في GKE بقاء تطبيقك محدّثًا ومتاحًا حتى عندما يستبدل النظام مثيلات صورة الحاوية القديمة بالصورة الجديدة على جميع النُسخ المتماثلة النشطة.
من سطر الأوامر، يمكنك إخبار Kubernetes بأنّك تريد تعديل صورة عملية النشر إلى إصدار جديد باستخدام الأمر التالي:
kubectl set image deployment/monolith monolith=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0
إخراج:
deployment.apps/monolith image updated
التحقّق من عملية النشر
يمكنك التحقّق من صحة تحديث عملية النشر عن طريق تنفيذ الأمر التالي:
kubectl get pods
إخراج:
NAME READY STATUS RESTARTS AGE monolith-584fbc994b-4hj68 1/1 Terminating 0 60m monolith-584fbc994b-fpwdw 1/1 Running 0 60m monolith-584fbc994b-xsk8s 1/1 Terminating 0 60m monolith-75f4cf58d5-24cq8 1/1 Running 0 3s monolith-75f4cf58d5-rfj8r 1/1 Running 0 5s monolith-75f4cf58d5-xm44v 0/1 ContainerCreating 0 1s
تظهر ثلاث مجموعات جديدة قيد الإنشاء ويتم إيقاف مجموعاتك القديمة. يمكنك معرفة الأعمار الجديدة والقديمة من خلال الأرقام. في النهاية، ستظهر لك ثلاث مجموعات Pod فقط، وهي المجموعات الثلاث المعدَّلة.
للتحقّق من التغييرات، انتقِل إلى عنوان IP الخارجي لموازن التحميل مرة أخرى ولاحظ أنّه تم تعديل تطبيقك.
نفِّذ الأمر التالي لإدراج الخدمات وعرض عنوان IP إذا نسيته:
kubectl get svc
من المفترض أن يعرض موقعك الإلكتروني النص الذي أضفته إلى مكوّن الصفحة الرئيسية.

11. تَنظيم
حذف مستودع Git
cd ~ rm -rf monolith-to-microservices
حذف صور Container Registry
ملاحظة: إذا أنشأت إصدارات أخرى، يمكنك استخدام بناء الجملة نفسه لحذف تلك الصور أيضًا. يفترض هذا الدرس التطبيقي العملي أنّه لديك علامتان فقط.
# Delete the container image for version 1.0.0 of our monolith
gcloud container images delete gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --quiet
# Delete the container image for version 2.0.0 of our monolith
gcloud container images delete gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 --quiet
حذف عناصر Cloud Build من Cloud Storage
ملاحظة: إذا كنت قد استخدمت Cloud Build في إنشاء عناصر أخرى غير هذا الدرس التطبيقي حول الترميز، عليك حذف المصدر يدويًا من حزمة Cloud Storage gs://<PROJECT_ID>_cloudbuild/source.
# The following command will take all source archives from all builds and delete them from cloud storage
# Run this command to print all sources:
# gcloud builds list | awk 'NR > 1 {print $4}'
gcloud builds list | awk 'NR > 1 {print $4}' | while read line; do gsutil rm $line; done
حذف خدمة GKE
kubectl delete service monolith kubectl delete deployment monolith
حذف مجموعة GKE
gcloud container clusters delete fancy-cluster
ملاحظة: قد يستغرق تنفيذ هذا الأمر بعض الوقت.
12. تهانينا!
لقد نشرت موقعك الإلكتروني ووسّعت نطاقه وعدّلته على GKE. أصبحت لديك الآن خبرة في Docker وKubernetes.