1. مقدمة
من الصعب تشغيل مواقع الويب والتطبيقات.
تسوء الأمور عندما لا ينبغي ذلك، وتتعطل الخوادم، وتتسبب زيادة الطلب، في استخدام المزيد من الموارد، كما أن إجراء التغييرات دون توقف العمل أمر معقد ومجهد.
تخيل أداة يمكن أن تساعدك في القيام بكل ذلك وتسمح لك حتى بأتمتته! مع GKE، لا يمكن تنفيذ كل ذلك فحسب، بل أصبح سهلاً. في هذا الدرس التطبيقي حول الترميز، ستلعب دور مطوّر برامج يدير موقع تجارة إلكترونية لشركة تخيلية اسمها "متجر رائع". بسبب المشاكل المتعلّقة بالتوسعة وحالات انقطاع الخدمة، تم تكليفك بنشر تطبيقك على 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، وهو بيئة سطر أوامر تعمل على السحابة الإلكترونية، وذلك في الدرس التطبيقي حول الترميز.
هذا الجهاز الافتراضي المستند إلى نظام دبيان محمل بكل أدوات التطوير التي ستحتاج إليها. وتوفّر هذه الشبكة دليلاً رئيسيًا دائمًا بسعة 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
قد يستغرق إنشاء المجموعة عدّة دقائق. بعد ذلك، شغِّل الأمر التالي واطّلِع على مثيلات الأجهزة الافتراضية (VM) الثلاث في المجموعة:
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 وانقر على Clusters. من المفترض أن تظهر لك المجموعة باسم 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.
من المفترض أن يؤدي ذلك إلى فتح نافذة جديدة يمكنك من خلالها الاطّلاع على "متجرك الرائع" أثناء تشغيله.
يمكنك إغلاق هذه النافذة بعد الاطّلاع على الموقع الإلكتروني. اضغط على Control+C
(Windows أو Mac) في النافذة الطرفية لإيقاف عملية خادم الويب.
5- إنشاء حاوية Docker باستخدام Cloud Build
الآن وقد أصبحت ملفات المصدر جاهزة للاستخدام، حان الوقت لإنشاء تطبيق Dockerize!
في العادة، سيكون عليك اتّباع نهج من خطوتَين يستلزم إنشاء حاوية Docker وإرسالها إلى سجلّ لتخزين الصورة التي يسحبها GKE من محرّك بحث GKE. مع ذلك، يمكنك تسهيل المهام اليومية باستخدام Cloud Build لإنشاء حاوية Docker ووضع الصورة في Container Registry باستخدام أمر واحد. (لعرض العملية اليدوية لإنشاء ملف Docker وإرساله، يُرجى الاطّلاع على Quickstart for 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 (إنشاء السحابة الإلكترونية)، وأخيرًا انقر على History (السجلّ). وهناك، يمكنك الاطّلاع على قائمة بالإصدارات السابقة، ولكن يُفترض أن يكون هناك الإصدار الذي أنشأته.
وعند النقر على "معرّف الإصدار"، يمكنك الاطّلاع على جميع التفاصيل لهذا الإصدار، بما في ذلك ناتج السجلّ.
في صفحة تفاصيل الإصدار، يمكنك الاطّلاع على صورة الحاوية التي تمّ إنشاؤها عن طريق النقر على اسم الصورة في قسم معلومات الإصدار.
6- نشر الحاوية إلى GKE
الآن بعد أن نقلت الحاوية إلى Container Registry، يمكنك نشرها على Kubernetes.
لنشر التطبيقات وإدارتها على مجموعة GKE، يجب الاتصال بنظام إدارة المجموعات في Kubernetes. يمكنك إجراء ذلك عادةً باستخدام أداة سطر الأوامر kubectl.
يُمثِّل Kubernetes التطبيقات على أنّها Pods، وهي وحدات تمثّل حاوية (أو مجموعة من الحاويات المزدوجة بإحكام). وهي أصغر وحدة قابلة للنشر في Kubernetes. في هذا المثال، تحتوي كل مجموعة على حاويتك الأحادية فقط.
لنشر تطبيقك، عليك إنشاء عملية نشر. تدير عملية النشر نسخًا متعددة من تطبيقك - تسمى النسخ المتماثلة - وتجدولها للتشغيل على العُقد الفردية في المجموعة. في هذه الحالة، سيتم تشغيل مجموعة واحدة فقط من تطبيقك في عملية النشر. تضمن عمليات النشر ذلك عن طريق إنشاء ReplicaSet. المجموعة ReplicaSet مسؤولة عن التأكد من أن عدد النسخ المتماثلة المحددة قيد التشغيل دائمًا.
يؤدّي الأمر kubectl create deployment
إلى إنشاء Kubernetes لعملية نشر باسم نص واحد على مجموعتك مع نسخة مطابقة 1.
شغّل الأمر التالي لنشر التطبيق:
kubectl create deployment monolith --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0
التأكّد من النشر
للتحقّق من إنشاء عملية النشر بنجاح، شغِّل الأمر التالي (قد يستغرق الأمر بضع لحظات لتصبح حالة المجموعة "قيد التشغيل"):
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، مع عدد الكبائن المطلوب واحدة؛ واللوحة التي تعمل يبدو أنك أنشأت كل شيء بنجاح!
لعرض الموارد بشكل فردي، يمكنك تشغيل الأوامر التالية:
# 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>
إذا كنت سريعًا بالقدر الكافي، يمكنك تشغيل الأمر السابق ليظهر لك كل ذلك مرة أخرى، ومن المفترض أن ترى لوحتين، أحدهما ينتهي بالنهاية والآخر ينشئ أو قيد التشغيل:
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 خارجية. يجب أن تعرض تطبيقك صراحةً للزيارات الواردة من الإنترنت من خلال أحد موارد الخدمة. توفّر "الخدمة" إمكانية استخدام الشبكات ودعم عنوان IP للوحات تطبيقك. ينشئ 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 ونسخه إلى الدليل العام المتوافق:
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
سترى ثلاث مجموعات جديدة يتم إنشاؤها ويتم إيقاف لوحاتك القديمة القديمة. يمكنك تحديد الأعمار الجديدة والقديمة. بعد ذلك، ستظهر لك ثلاث مجموعات فقط مرة أخرى، وهي ستكون المجموعات الثلاث المعدّلة.
للتحقّق من التغييرات التي أجريتها، انتقِل إلى عنوان 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.