1. نظرة عامة
ASP.NET Core هو إطار عمل جديد مفتوح المصدر ومتعدد الأنظمة الأساسية لإنشاء تطبيقات حديثة مستندة إلى السحابة الإلكترونية ومتصلة بالإنترنت باستخدام لغة البرمجة C# .
Kubernetes هو مشروع مفتوح المصدر يمكن تنفيذه في العديد من البيئات المختلفة، من أجهزة الكمبيوتر المحمولة إلى المجموعات العنقودية متعددة العُقد عالية التوفّر، ومن السُحب الإلكترونية العامة إلى عمليات النشر داخل المؤسسات، بدءًا من الأجهزة الافتراضية وحتى أجهزة المعدن المجرّد.
في هذا التمرين المعملي، يمكنك نشر تطبيق ASP.NET Core بسيط على Kubernetes الذي يتم تشغيله على Kubernetes Engine. يعتمد هذا الدرس التطبيقي على الترميز إنشاء تطبيق ASP.NET Core وإطلاقه من خلال درس تطبيقي حول الترميز في Google Cloud Shell. قد تحتاج إلى إجراء هذا التمرين أولاً قبل الانتقال إلى هذا التمرين.
يتمثّل الهدف من هذا الدرس التطبيقي في تحويل الرمز (تطبيق Hello World ASP.NET Core هنا) إلى تطبيق منسوخ يتم تشغيله على Kubernetes. ما عليك سوى تحويل الرمز البرمجي الذي طوّرته على جهازك إلى صورة حاوية Docker، ثم تشغيل تلك الصورة على Google Kubernetes Engine.
في ما يلي مخطّط بياني للأجزاء المختلفة المستخدمة في هذا الدرس التطبيقي حول الترميز لمساعدتك على فهم كيفية توافق القطع معًا. استخدِمه كمرجع أثناء تقدّمك في الدرس التطبيقي حول الترميز. يجب أن يكون كل شيء منطقيًا بحلول الوقت الذي تصل فيه إلى النهاية (ولكن لا تتردد في تجاهل هذا في الوقت الحالي).
لأغراض هذا الدرس التطبيقي، يتيح لك استخدام بيئة مُدارة، مثل Kubernetes Engine (إصدار مستضاف من Google من Kubernetes يعمل على Compute Engine) التركيز بشكل أكبر على تجربة Kubernetes بدلاً من إعداد البنية الأساسية الأساسية.
إذا كان يهمّك تشغيل Kubernetes على جهازك المحلي، مثل الكمبيوتر المحمول الخاص بالتطوير، ننصحك باستخدام Minikube. يوفر هذا إعدادًا بسيطًا لمجموعة kubernetes ذات عقدة واحدة لأغراض التطوير والاختبار. يمكنك استخدام Minikube للاطّلاع على هذا الدرس التطبيقي حول الترميز.
ما ستتعرَّف عليه
- كيفية تجميع تطبيق ASP.NET Core بسيط كحاوية Docker.
- كيفية إنشاء مجموعة Kubernetes على Google Kubernetes Engine (GKE)
- كيفية نشر تطبيق ASP.NET Core على مجموعة متسلسلة.
- كيفية السماح بدخول الزيارات الخارجية إلى اللوحة.
- كيفية توسيع نطاق خدمتك وطرح ترقية
- كيفية تشغيل لوحة بيانات Kubernetes الرسومية
المتطلبات
كيف ستستخدم هذا البرنامج التعليمي؟
ما هو تقييمك لتجربتك مع Google Cloud Platform؟
2. الإعداد والمتطلبات
إعداد بيئة ذاتية
- سجِّل الدخول إلى Google Cloud Console وأنشئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.
- اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة أحرف لا تستخدمها Google APIs. ويمكنك تعديله في أي وقت.
- يجب أن يكون رقم تعريف المشروع فريدًا في جميع مشاريع Google Cloud وغير قابل للتغيير (لا يمكن تغييره بعد ضبطه). تنشئ Cloud Console سلسلة فريدة تلقائيًا. فعادةً لا تهتم بما هو. في معظم الدروس التطبيقية حول الترميز، يجب الإشارة إلى رقم تعريف المشروع (يتم تحديده عادةً على أنّه
PROJECT_ID
). وإذا لم يعجبك المعرّف الذي تم إنشاؤه، يمكنك إنشاء رقم تعريف عشوائي آخر. ويمكنك بدلاً من ذلك تجربة طلبك الخاص ومعرفة ما إذا كان متوفّرًا. ولا يمكن تغييره بعد هذه الخطوة وسيبقى طوال مدة المشروع. - لمعلوماتك، هناك قيمة ثالثة، وهي رقم المشروع الذي تستخدمه بعض واجهات برمجة التطبيقات. اطّلِع على مزيد من المعلومات حول هذه القيم الثلاث في المستندات.
- بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام الموارد/واجهات برمجة التطبيقات في Cloud. إنّ تنفيذ هذا الدرس التطبيقي حول الترميز لن يكون مكلفًا أو مكلفًا على الإطلاق. لإيقاف تشغيل الموارد حتى لا تتحمل الفوترة بعد هذا البرنامج التعليمي، يمكنك حذف الموارد التي أنشأتها أو حذف المشروع بالكامل. يكون مستخدمو Google Cloud الجدد مؤهَّلون للانضمام إلى برنامج فترة تجريبية مجانية بقيمة 300 دولار أمريكي.
بدء Cloud Shell
مع أنّه يمكن إدارة Google Cloud عن بُعد من الكمبيوتر المحمول، ستستخدم في هذا الدرس التطبيقي Google Cloud Shell، وهي بيئة سطر أوامر يتم تشغيلها في السحابة الإلكترونية.
تفعيل Cloud Shell
- من Cloud Console، انقر على تفعيل Cloud Shell .
إذا لم يسبق لك بدء تشغيل Cloud Shell، ستظهر لك شاشة وسيطة (الجزء السفلي غير المرئي من الصفحة) تصف ماهيتها. إذا كان الأمر كذلك، فانقر على متابعة (ولن تراه مرة أخرى مطلقًا). إليك ما تبدو عليه هذه الشاشة التي تُستخدم لمرة واحدة:
من المفترَض أن تستغرق عملية إدارة الحسابات والاتصال بخدمة Cloud Shell بضع دقائق فقط.
يتم تحميل هذا الجهاز الافتراضي مع جميع أدوات التطوير التي تحتاجها. وتوفّر هذه الشبكة دليلاً رئيسيًا دائمًا بسعة 5 غيغابايت ويتم تشغيله في Google Cloud، ما يحسّن بشكل كبير من أداء الشبكة والمصادقة. يمكنك تنفيذ معظم عملك، إن لم يكن كلّه، في هذا الدرس التطبيقي حول الترميز باستخدام متصفّح أو جهاز Chromebook.
بعد الربط بخدمة Cloud Shell، من المفترض أن ترى أنّه قد تمت مصادقتك وأنّ المشروع معيّن سبق أن تم ضبطه على رقم تعريف مشروعك.
- شغِّل الأمر التالي في Cloud Shell لتأكيد مصادقتك:
gcloud auth list
مخرجات الأمر
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- شغّل الأمر التالي في Cloud Shell للتأكد من معرفة الأمر gcloud بمشروعك:
gcloud config list project
مخرجات الأمر
[core] project = <PROJECT_ID>
إذا لم يكن كذلك، يمكنك تعيينه من خلال هذا الأمر:
gcloud config set project <PROJECT_ID>
مخرجات الأمر
Updated property [core/project].
3- إنشاء تطبيق ASP.NET Core في Cloud Shell
في موجه Cloud Shell، يمكنك التحقق من تثبيت أداة سطر أوامر dotnet من قبل عن طريق التحقق من إصدارها. من المفترض أن يؤدي ذلك إلى طباعة إصدار أداة سطر أوامر dotnet المثبتة:
dotnet --version
بعد ذلك، قم بإنشاء تطبيق ويب ASP.NET Core جديد.
dotnet new mvc -o HelloWorldAspNetCore
سيؤدي هذا إلى إنشاء مشروع واستعادة تبعياته. من المفترض أن تظهر لك رسالة مشابهة لما يلي.
Restore completed in 11.44 sec for HelloWorldAspNetCore.csproj.
Restore succeeded.
4. تشغيل تطبيق ASP.NET Core
نحن جاهزون تقريبًا لتشغيل تطبيقنا. انتقِل إلى مجلد التطبيق.
cd HelloWorldAspNetCore
وأخيرًا، شغِّل التطبيق.
dotnet run --urls=http://localhost:8080
يبدأ التطبيق الاستماع عبر المنفذ 8080.
Hosting environment: Production
Content root path: /home/atameldev/HelloWorldAspNetCore
Now listening on: http://[::]:8080
Application started. Press Ctrl+C to shut down.
للتحقق من أن التطبيق يعمل، انقر على زر معاينة الويب في أعلى اليسار واختر "معاينة على المنفذ 8080".
ستظهر لك صفحة الويب الافتراضية ASP.NET Core:
بعد التحقق من أن التطبيق يعمل، اضغط على Ctrl+C لإيقاف التطبيق.
5- تجميع تطبيق ASP.NET Core كحاوية Docker
بعد ذلك، يمكنك إعداد تطبيقك لتشغيله كحاوية. الخطوة الأولى هي تحديد الحاوية ومحتوياتها.
في الدليل الأساسي للتطبيق، أنشِئ Dockerfile
لتحديد صورة Docker.
touch Dockerfile
يمكنك إضافة ما يلي إلى "Dockerfile
" باستخدام المحرِّر المفضّل لديك ("vim,
nano,emacs
" أو أداة تعديل الرموز في Cloud Shell).
# Use Microsoft's official build .NET image. # https://hub.docker.com/_/microsoft-dotnet-core-sdk/ FROM mcr.microsoft.com/dotnet/sdk:6.0-alpine AS build WORKDIR /app # Install production dependencies. # Copy csproj and restore as distinct layers. COPY *.csproj ./ RUN dotnet restore # Copy local code to the container image. COPY . ./ WORKDIR /app # Build a release artifact. RUN dotnet publish -c Release -o out # Use Microsoft's official runtime .NET image. # https://hub.docker.com/_/microsoft-dotnet-core-aspnet/ FROM mcr.microsoft.com/dotnet/aspnet:6.0-alpine-amd64 AS runtime WORKDIR /app COPY --from=build /app/out ./ # Make sure the app binds to port 8080 ENV ASPNETCORE_URLS http://*:8080 # Run the web service on container startup. ENTRYPOINT ["dotnet", "HelloWorldAspNetCore.dll"]
من بين الإعدادات المهمة المضمنة في ملف Dockerfile هو المنفذ الذي ينتظر التطبيق من خلاله استقبال حركة البيانات الواردة (8080). يتم تحقيق ذلك من خلال ضبط متغيّر البيئة ASPNETCORE_URLS
، الذي تستخدمه تطبيقات ASP.NET Core لتحديد المنفذ الذي يجب الاستماع إليه.
حفظ Dockerfile
الآن، لنقم بإنشاء الصورة:
docker build -t gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v1 .
بعد اكتمال هذا (سيستغرق تنزيل كل البيانات واستخراجها بعض الوقت)، يمكنك رؤية أنّه تم إنشاء الصورة وحفظها على الجهاز:
docker images REPOSITORY TAG gcr.io/yourproject-XXXX/hello-dotnet v1
اختبِر الصورة محليًا باستخدام الأمر التالي الذي سيشغِّل حاوية Docker محليًا على المنفذ 8080 من صورة الحاوية التي تمّ إنشاؤها حديثًا:
docker run -p 8080:8080 gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v1
ومرة أخرى، استفد من ميزة معاينة الويب في CloudShell :
ستظهر لك صفحة الويب التلقائية الخاصة بـ ASP.NET Core في علامة تبويب جديدة.
بعد التأكّد من أنّ التطبيق يعمل بشكل جيد محليًا في حاوية Docker، يمكنك إيقاف الحاوية قيد التشغيل بحلول Ctrl-> C
.
والآن بعد أن أصبحت الصورة تعمل على النحو المطلوب، يمكنك إرسالها إلى Google Container Registry، وهو مستودع خاص لصور Docker يمكن الوصول إليها من كل مشروع على Google Cloud (ولكن أيضًا من خارج Google Cloud Platform) :
docker push gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v1
وإذا سارت الأمور على ما يرام وبعد فترة وجيزة، من المفترض أن تتمكن من الاطّلاع على صورة الحاوية مُدرجة في القسم Container Registry. في هذه المرحلة، لديك الآن صورة Docker على مستوى المشروع يمكن لـ Kubernetes الوصول إليها وتنسيقها كما سيصلك بعد بضع دقائق.
إذا كنت مهتمًا، يمكنك الاطّلاع على صور الحاويات أثناء تخزينها في Google Cloud Storage من خلال اتّباع هذا الرابط: https://console.cloud.google.com/storage/browser/ (يجب أن يكون الرابط الكامل الناتج بهذا النموذج: https://console.cloud.google.com/project/PROJECT_ID/storage/browser/).
6- إنشاء مجموعة Kubernetes
حسنًا، أنت الآن جاهز لإنشاء مجموعة GKE، ولكن قبل ذلك، انتقِل إلى قسم Google Kubernetes Engine في وحدة تحكّم الويب وانتظر حتى تتمّ تهيئة النظام (من المفترض أن تستغرق بضع ثوانٍ فقط).
تتكوّن المجموعة العنقودية من خادم واجهة برمجة تطبيقات رئيسي في Kubernetes تديره Google ومجموعة من عُقد العوامل. عُقد العامل هي أجهزة افتراضية في Compute Engine.
لنستخدم واجهة سطر الأوامر gcloud
من جلسة CloudShell لإنشاء مجموعة. اضبط منطقتك على مكان قريب منك ( قائمة المناطق). سيستغرق إكمال هذه الخطوة بضع دقائق:
gcloud container clusters create hello-dotnet-cluster --cluster-version=latest --num-nodes 4 --zone europe-west1-b
في النهاية، ينبغي أن ترى المجموعة التي تم إنشاؤها.
Creating cluster hello-dotnet-cluster...done. Created [https://container.googleapis.com/v1/projects/dotnet-atamel/zones/europe-west1-b/clusters/hello-dotnet-cluster]. kubeconfig entry generated for hello-dotnet-cluster. NAME ZONE MASTER_VERSION hello-dotnet-cluster europe-west1-b 1.10.7-gke.6
من المفترض أن تكون لديك الآن مجموعة Kubernetes كاملة الأداء وتستند إلى Google Kubernetes Engine:
حان الوقت الآن لنشر تطبيقك المُحوَّل في مجموعة Kubernetes. من الآن فصاعدًا، ستستخدم سطر الأوامر kubectl
(الذي تم إعداده بالفعل في بيئة Cloud Shell). يتطلّب باقي هذا الدرس التطبيقي حول الترميز أن يكون إصدار البرنامج وإصدار الخادم kubernetes هو 1.2 أو إصدار أحدث. وسيعرض لك kubectl version
الإصدار الحالي من الأمر.
7. إنشاء عملية نشر
مجموعة kubernetes هي مجموعة من الحاويات يتم ربطها معًا لأغراض الإدارة وإنشاء الشبكات. يمكن أن تحتوي على حاوية واحدة أو عدة حاوية. وهنا ستستخدم ببساطة حاوية واحدة تم إنشاؤها باستخدام صورة ASP.NET Core والمخزنة في سجل الحاوية الخاصة. وسيعرض المحتوى على المنفذ 8080.
أنشِئ ملف hello-dotnet.yaml
باستخدام المحرِّر المفضّل لديك (vim, nano,emacs
أو محرِّر الرموز في Cloud Shell) وحدِّد طريقة نشر Kubernetes للمجموعة، وذلك باتّباع الخطوات التالية:
apiVersion: apps/v1 kind: Deployment metadata: labels: run: hello-dotnet name: hello-dotnet namespace: default spec: replicas: 1 selector: matchLabels: run: hello-dotnet template: metadata: labels: run: hello-dotnet spec: containers: - name: hello-dotnet image: gcr.io/YOUR-PROJECT-ID/hello-dotnet:v1 imagePullPolicy: IfNotPresent ports: - containerPort: 8080
النشر إلى مساحة الاسم التلقائية باستخدام kubectl
:
kubectl apply -f hello-dotnet.yaml
deployment.apps/hello-dotnet created
كما ترى، أنشأت كائن نشر. تُعَدّ عمليات النشر الطريقة المقترَحة لإنشاء مجموعات الإعلانات المتسلسلة وتوسيع نطاقها. هنا، تدير عملية نشر جديدة نسخة طبق الأصل واحدة من المجموعة التي تعرض صورة hello-dotnet:v1
.
لعرض عملية النشر التي أنشأتها للتو، ما عليك سوى تشغيل:
kubectl get deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE hello-dotnet 1 1 1 1 37s
لعرض المجموعة التي تم إنشاؤها من خلال عملية النشر، شغِّل الأمر التالي:
kubectl get pods
NAME READY STATUS RESTARTS AGE hello-dotnet-714049816-ztzrb 1/1 Running 0 57s
حان الوقت الآن للتعامل مع بعض أوامر kubectl
المثيرة للاهتمام (لن يؤدي أي منها إلى تغيير حالة المجموعة، وتتوفر المستندات الكاملة هنا):
kubectl get pods kubectl cluster-info kubectl config view kubectl get events kubectl logs <pod-name>
في هذه المرحلة، من المفترض أن تكون حاويتك قيد التشغيل تحت إدارة Kubernetes، ولكن لا يزال عليك جعلها متاحةً للجميع.
8. السماح بالزيارات الخارجية
لا يمكن الوصول إلى المجموعة تلقائيًا إلا من خلال عنوان IP الداخلي في المجموعة. لإتاحة الوصول إلى حاوية hello-dotnet
من خارج شبكة kubernetes الافتراضية، عليك عرض مجموعة الإعلانات المتسلسلة باعتبارها خدمة kubernetes.
من Cloud Shell، يمكنك عرض اللوحة على الإنترنت المتاح للجميع باستخدام الأمر kubectl expose
بالإضافة إلى علامة --type="LoadBalancer"
. هذه العلامة مطلوبة لإنشاء عنوان IP يمكن الوصول إليه خارجيًا :
kubectl expose deployment hello-dotnet --type="LoadBalancer" --port=8080
تحدّد العلامة المستخدَمة في هذا الأمر أنّك ستستخدم جهاز موازنة الحمل الذي توفّره البنية الأساسية الأساسية (في هذه الحالة جهاز موازنة الحمل في Compute Engine). يُرجى العِلم أنّك تعرض عملية النشر، وليس المجموعة مباشرةً. سيؤدي هذا إلى تحميل الخدمة الناتجة لموازنة حركة البيانات عبر جميع اللوحات التي تتم إدارتها من خلال عملية النشر (في هذه الحالة مجموعة واحدة فقط، ولكنك ستضيف المزيد من النسخ المكررة لاحقًا).
تنشئ مشرف Kubernetes جهاز موازنة الحمل وقواعد إعادة التوجيه ذات الصلة في Compute Engine ومجموعات الأهداف وقواعد جدار الحماية لإتاحة الوصول الكامل إلى الخدمة من خارج Google Cloud Platform.
للعثور على عنوان IP للخدمة المتاح للجميع، ما عليك سوى طلب من kubectl
إدراج جميع خدمات المجموعة:
kubectl get services
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello-dotnet 10.3.253.62 104.155.20.69 8080/TCP 1m kubernetes 10.3.240.1 <none> 443/TCP 5m
يُرجى ملاحظة أنّ هناك عنوانَي IP مُدرَجَين لخدمتك، وهما منفذ العرض 8080
. أحدهما هو عنوان IP الداخلي الذي لا يظهر إلا داخل شبكتك الافتراضية على السحابة الإلكترونية، والآخر عنوان IP الخارجي المتوازن بالحمولة. في هذا المثال، عنوان IP الخارجي هو 104.155.20.69
.
من المفترض أن يكون بإمكانك الآن الوصول إلى الخدمة من خلال توجيه المتصفح إلى هذا العنوان: http://<EXTERNAL_IP>
:8080
لقد حصلتَ الآن على العديد من الميزات من خلال الانتقال إلى الحاويات وKubernetes، ولن تحتاج إلى تحديد المضيف الذي تريد تحميل مهام العمل عليه، ويمكنك أيضًا الاستفادة من مراقبة الخدمة وإعادة تشغيلها. لنرَ ما يمكنك الاستفادة منه أيضًا من بنية Kubernetes الجديدة.
9. توسيع نطاق الخدمة
إحدى الميزات الفعّالة التي يقدّمها Kubernetes هي مدى سهولة توسيع نطاق تطبيقك. لنفترض أنك احتجت فجأة إلى سعة أكبر لتطبيقك، يمكنك ببساطة الطلب من وحدة التحكم في النسخ المماثل أن تدير عددًا جديدًا من النسخ المكررة للمجموعة المطابقة:
kubectl scale deployment hello-dotnet --replicas=4
kubectl get deployment NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE hello-dotnet 4 4 4 3 16m
kubectl get pods NAME READY STATUS RESTARTS AGE hello-dotnet-714049816-g4azy 1/1 Running 0 1m hello-dotnet-714049816-rk0u6 1/1 Running 0 1m hello-dotnet-714049816-sh812 1/1 Running 0 1m hello-dotnet-714049816-ztzrb 1/1 Running 0 16m
اتّبِع النهج الإعلاني هنا، بدلاً من بدء مثيلات جديدة أو إيقافها، عليك الإفصاح عن عدد النُسخ الافتراضية التي يجب عرضها في جميع الأوقات. يحرص أيضًا مديرو تسويق Kubernetes على التأكّد من أنّ الواقع يتطابق مع ما طلبته ويتخذ الإجراءات اللازمة إذا لزم الأمر.
في ما يلي مخطّط يلخّص حالة مجموعة Kubernetes:
ويمكنك أيضًا خفض حجم خدمتك بسهولة كبيرة. في ما يلي كيفية تقليل عدد المجموعات من 4 مجموعات إلى مجموعتَين.
kubectl scale deployment hello-dotnet --replicas=2
kubectl get pods
NAME READY STATUS RESTARTS AGE hello-dotnet-714049816-g4azy 1/1 Running 0 1m hello-dotnet-714049816-rk0u6 1/1 Running 0 1m
10. اختبار المرونة
يراقب Kubernetes (أو ReplicaSet بشكل أكثر تحديدًا) مجموعات الإعلانات المتسلسلة، وإذا حدث خطأ في مجموعة الإعلانات المتسلسلة وتوقّفت عن العمل، يتم إنشاء مجموعة جديدة على الفور. لنختبر هذه الميزة ونرى كيف تعمل.
يجب أولاً الحصول على قائمة اللوحات:
kubectl get pods
NAME READY STATUS RESTARTS AGE hello-dotnet-714049816-g4azy 1/1 Running 0 1m hello-dotnet-714049816-rk0u6 1/1 Running 0 1m
احذف إحدى المجموعات من خلال إدخال اسم المجموعة:
kubectl delete pod hello-dotnet-714049816-g4azy
إذا راجعت قائمة اللوحات مرة أخرى، سترى مجموعة جديدة يتم إنشاؤها وتعمل مجددًا في الحال:
kubectl get pods
NAME READY STATUS RESTARTS AGE hello-dotnet-714049816-abczy 1/1 ContainerCreating 0 1m hello-dotnet-714049816-rk0u6 1/1 Running 0 1m
11. طرح ترقية لخدمتك
في مرحلة ما، سيتطلب التطبيق الذي نشرته في قناة الإصدار العلني إصلاح أخطاء أو ميزات إضافية. لنرى كيف تبدو هذه العملية.
أولاً، لنبدأ بتعديل التطبيق. افتح أداة تعديل الرموز من Cloud Shell.
يمكنك الانتقال إلى Index.cshtml
ضمن HelloWorldAspNetCore > Views > Home
وتعديل إحدى رسائل لوحة العرض الدوّارة.
ابحث عن السطر التالي:
Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core
وقم بتغييره إلى هذا:
Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core on Google Cloud
احفظ التغييرات ثم ارجع إلى Cloud Shell. داخل HelloWorldAspNetCore,
إنشاء صورة Docker:
docker build -t gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v2 .
ونشره إلى Container Registry:
docker push gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v2
أنت الآن جاهز لتطبيق Kubernetes لتحديث وحدة التحكّم في النسخ المتماثل بسلاسة إلى الإصدار الجديد من التطبيق. لتغيير تصنيف الصورة لحاوية قيد التشغيل، عليك تعديل hello-dotnet deployment
الحالية وتغيير الصورة من gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v1
إلى gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v2
.
ولإجراء ذلك، عليك استخدام الأمر kubectl edit
. سيؤدي ذلك إلى فتح محرِّر نصوص يعرض إعداد yaml للنشر بالكامل. ليس من الضروري فهم إعدادات yaml بالكامل في الوقت الحالي، وبدلاً من ذلك، عليك أن تفهم أنّه من خلال تعديل الحقل spec.template.spec.containers.image
في الإعدادات، ستُعلِم عملية النشر بتعديل مجموعات الإعلانات المتسلسلة من أجل استخدام الصورة الجديدة.
kubectl edit deployment hello-dotnet
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: "1"
creationTimestamp: 2017-01-06T10:05:28Z
generation: 3
labels:
run: hello-dotnet
name: hello-dotnet
namespace: default
resourceVersion: "151017"
selfLink: /apis/extensions/v1beta1/namespaces/default/deployments/hello-dotnet
uid: 981fe302-f1e9-11e5-9a78-42010af00005
spec:
replicas: 4
selector:
matchLabels:
run: hello-dotnet
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
run: hello-dotnet
spec:
containers:
- image: gcr.io/PROJECT_ID/hello-dotnet:v1 # Update this line
imagePullPolicy: IfNotPresent
name: hello-dotnet
ports:
- containerPort: 8080
protocol: TCP
resources: {}
terminationMessagePath: /dev/termination-log
dnsPolicy: ClusterFirst
restartPolicy: Always
securityContext: {}
terminationGracePeriodSeconds: 30
بعد إجراء التغيير، احفظ الملف وأغلقه (يستخدم هذا المفتاح vi، لذا اضغط على "Esc" ثم اكتب :wq
واضغط على المفتاح "Enter").
deployment "hello-dotnet" edited
سيؤدي ذلك إلى تعديل عملية النشر بالصورة الجديدة، ما يؤدي إلى إنشاء لوحات جديدة مع الصورة الجديدة وحذف المجموعات القديمة.
kubectl get deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
hello-dotnet 4 5 4 3 1h
أثناء حدوث ذلك، من المفترض ألا يرى مستخدمو الخدمات أي انقطاع. بعد فترة وجيزة سيبدأ في الوصول إلى الإصدار الجديد من تطبيقك.
يمكنك العثور على المزيد من التفاصيل حول طرح التعديلات في مستندات Kubernetes.
من خلال ميزات النشر والتوسيع والتحديث هذه، نأمل أنّك توافق على أنّه بعد إعداد البيئة (مجموعة GKE/Kubernetes هنا)، سيساعدك Kubernetes في التركيز على تطبيقك بدلاً من إدارة البنية الأساسية.
12. Cloud Build
كنّا حتى الآن ننشئ حاويات باستخدام أوامر Docker عادية (إصدار Dock ...)، ثم نقلنا الصورة يدويًا إلى Container Registry في Google Cloud Platform. من الممكن أيضًا تأجيل كلتا الخطوتين إلى Cloud Build من جانب الخادم، والذي يمكنه إنشاء صورة الحاوية وإرسالها بدون الحاجة إلى تثبيت Docker على الجهاز.
أولاً، فعِّل Cloud Build API في مدير واجهة برمجة التطبيقات >. "المكتبة". ابحث عن Cloud Build، وانقر على Cloud Build API:
انقر على تفعيل واجهة برمجة التطبيقات إذا لم تكن مفعَّلة. في النهاية، يُفترض أن ترى واجهة برمجة التطبيقات مفعّلة على النحو التالي:
بعد تفعيل Cloud Build API، يمكنك تشغيل الأمر التالي لإنشاء صورتك وإرسالها كلّها من خدمة Container Builder:
$ gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v3
يتم تخزين الصورة تلقائيًا في Container Registry.
13. تشغيل لوحة بيانات Kubernetes الرسومية
في الإصدارات الأخيرة من Kubernetes، تم تقديم واجهة مستخدم تصويرية (لوحة بيانات). تسمح لك واجهة المستخدم هذه بالبدء بسرعة، كما تمكِّن بعض الوظائف المتوفرة في واجهة سطر الأوامر كوسيلة أكثر سهولة وقابلية للاكتشاف للتفاعل مع النظام.
لضبط إمكانية الوصول إلى لوحة بيانات مجموعة Kubernetes، اكتب هذه الأوامر من نافذة Cloud Shell :
gcloud container clusters get-credentials hello-dotnet-cluster \ --zone europe-west1-b --project ${GOOGLE_CLOUD_PROJECT}
kubectl proxy --port 8081
ثم يمكنك استخدام ميزة معاينة Cloud Shell مرة أخرى للانتقال إلى المنفذ 8081:
من المفترض أن ينقلك هذا إلى نقطة نهاية واجهة برمجة التطبيقات. قد تتلقى رسالة "غير مصرّح بها" ولكن لا داعي للقلق. للوصول إلى لوحة البيانات، يجب إزالة "?authuser=3" واستبدِله بـ "/ui
".
استفِد من لوحة البيانات الرسومية لـ Kubernetes واستخدمها لنشر التطبيقات المحوّلة إلى حاويات بالإضافة إلى مراقبة المجموعات وإدارتها.
وبدلاً من ذلك، يمكنك الوصول إلى لوحة البيانات من جهاز تطوير أو جهاز محلي باستخدام الإرشادات المماثلة المتوفرة عند الضغط على "ربط" من وحدة تحكم الويب. للمجموعة التي تريد مراقبتها.
بعد الانتهاء من لوحة البيانات، يمكنك النقر على Control + C لإيقاف الخادم الوكيل. يمكنك الاطّلاع على المزيد من المعلومات حول لوحة بيانات Kubernetes من خلال جولة في لوحة البيانات.
14. التسجيل
يمكنك استخدام الأمر kubectl logs
لاسترداد سجلات حاوية يتم تشغيلها داخل Kubernetes. عند استخدام Google Kubernetes Engine لتشغيل مجموعات Kubernetes المُدارة، تتم إعادة توجيه جميع السجلات تلقائيًا وتخزينها في Google Cloud Logging. يمكنك الاطّلاع على جميع مخرجات السجلّات من اللوحات من خلال الانتقال إلى Stackdriver ← Logging ← Logs من خلال وحدة التحكّم في Google Cloud، وذلك باتّباع الخطوات التالية:
بعد الدخول إلى وحدة التحكّم في التسجيل، يمكنك الانتقال إلى حاوية GKE للاطّلاع على كل السجلّات المجمَّعة من STDOUT:
من هنا، يمكنك اختياريًا تصدير السجلّات إلى Google BigQuery لإجراء المزيد من تحليل السجلات، أو إعداد تنبيه مستند إلى السجلّ. لن نفعل ذلك أثناء التمرين المعملي اليوم.
15. تهانينا!
بهذه الطريقة، نختتم هذا الدرس التطبيقي البسيط حول بدء استخدام الترميز باستخدام ASP.NET Core وKubernetes. لم نتعرّف بعد الآن على هذه التكنولوجيا، لذا ننصحك باستكشاف المزيد من خلال لوحاتك الخاصة، ووحدات تحكّم النسخ المتماثل، والخدمات الخاصة بك، وكذلك التحقّق من اختبارات الحياة (الفحوصات الصحية) واستخدام واجهة برمجة تطبيقات Kubernetes مباشرةً.
تَنظيم
هذا كل شيء! حان الوقت لتنظيف الموارد المستخدمة (لتوفير التكلفة والتكيف مع السحابة الإلكترونية).
حذف عملية النشر (التي تحذف أيضًا المجموعات قيد التشغيل) والخدمة (التي تؤدي أيضًا إلى حذف جهاز موازنة الحمل الخارجي):
أولاً، احذف الخدمة والنشر، ما يؤدي أيضًا إلى حذف جهاز موازنة الحمل الخارجي:
kubectl delete service,deployment hello-dotnet
service "hello-dotnet" deleted deployment "hello-dotnet" deleted
بعد ذلك، احذف المجموعة:
gcloud container clusters delete hello-dotnet-cluster --zone=europe-west1-b
The following clusters will be deleted. - [hello-dotnet-cluster] in [europe-west1-b] Do you want to continue (Y/n)? Y Deleting cluster hello-dotnet-cluster...done. Deleted [https://container.googleapis.com/v1/projects/<PROJECT_ID>/zones/europe-west1-b/clusters/hello-dotnet-cluster].
يؤدي ذلك إلى حذف جميع مثيلات Google Compute Engine التي تشغّل المجموعة.
أخيرًا، احذف حزمة تخزين سجلّ Docker التي تستضيف صورك:
gsutil ls
gs://artifacts.<PROJECT_ID>.appspot.com/
gsutil rm -r gs://artifacts.${GOOGLE_CLOUD_PROJECT}.appspot.com/ Removing gs://artifacts.<PROJECT_ID>.appspot.com/...
Removing gs://artifacts.<PROJECT_ID>.appspot.com/...
وبالطبع، يمكنك أيضًا حذف المشروع بأكمله، ولكنك ستفقد أي إعدادات فوترة أجريتها (يلزم إيقاف فوترة المشروع أولاً). بالإضافة إلى ذلك، لن يؤدي حذف المشروع إلى إيقاف جميع الفوترة إلا بعد انتهاء دورة الفوترة الحالية.
النقاط التي تناولناها
- كيفية تجميع تطبيق ASP.NET Core بسيط كحاوية Docker.
- كيفية إنشاء مجموعة Kubernetes على Google Kubernetes Engine
- كيفية نشر تطبيق ASP.NET Core على مجموعة متسلسلة.
- كيفية السماح بدخول الزيارات الخارجية إلى اللوحة.
- كيفية توسيع نطاق خدمتك وطرح ترقية
- كيفية تشغيل لوحة بيانات Kubernetes الرسومية
الخطوات التالية
- يمكنك الاطّلاع على مزيد من المعلومات حول منصّة Kubernetes ( http://kubernetes.io/).
- مزيد من المعلومات حول Windows على Google Cloud Platform.
- مزيد من المعلومات حول .NET على Google Cloud Platform
- تعرَّف على المزيد من المعلومات عن SQL Server على Google Cloud Platform.
- مزيد من المعلومات حول أدوات السحابة الإلكترونية في Visual Studio
- تعرَّف على مزيد من المعلومات حول أدوات السحابة الإلكترونية لـ PowerShell.
الترخيص
هذا العمل مرخّص بموجب رخصة المشاع الإبداعي 2.0 مع نسب العمل إلى مؤلف عام.