1. סקירה כללית
Microsoft .NET Core היא גרסת קוד פתוח וגרסת .NET בקוד פתוח, שיכולה לפעול בקונטיינרים. .NET Core זמין ב-GitHub ומתוחזק על ידי Microsoft וקהילת .NET. בשיעור ה-Lab הזה תתבצע פריסה של אפליקציית .NET Core בקונטיינרים ב-Google Kubernetes Engine (GKE).
שיעור ה-Lab הזה פועל לפי דפוס פיתוח אופייני שבו אפליקציות פותחות בסביבה מקומית של המפתחים ולאחר מכן נפרסות בסביבת הייצור. בחלק הראשון של שיעור ה-Lab, אפליקציית ליבה לדוגמה של .NET מאומתת באמצעות קונטיינר שרץ ב-Cloud Shell. לאחר האימות, האפליקציה נפרסת ב-Kubernetes באמצעות GKE. שיעור ה-Lab כולל את השלבים ליצירת אשכול GKE.
בחלק השני של שיעור ה-Lab נעשה שינוי קל באפליקציה שמוצג בה שם המארח של מאגר התגים שמפעיל את המופע של האפליקציה. לאחר מכן, האפליקציה המעודכנת מאומתת ב-Cloud Shell, והפריסה מתעדכנת לשימוש בגרסה החדשה. באיור הבא מוצג רצף הפעילויות בשיעור ה-Lab הזה:
עלויות
אם תפעילו את שיעור ה-Lab הזה בדיוק כמו שהוא נכתב, יחולו העלויות הרגילות של השירותים הבאים
2. הגדרה ודרישות
דרישות מוקדמות
כדי להשלים את שיעור ה-Lab הזה, נדרשים חשבון ופרויקט ב-Google Cloud. הוראות מפורטות יותר ליצירת פרויקט חדש זמינות ב-Codelab הזה.
בשיעור ה-Lab הזה נשתמש ב-Docker שרץ ב-Cloud Shell, שזמינה דרך מסוף Google Cloud ומגיע עם הרבה כלים שימושיים, כמו gcloud ו-Docker. בהמשך מוסבר איך לגשת למעטפת ה-Cloud Shell. לוחצים על הסמל של Cloud Shell בפינה הימנית העליונה כדי להציג אותו בחלונית התחתונה של חלון המסוף.
אפשרויות הגדרה חלופיות לאשכול GKE (אופציונלי)
בשיעור ה-Lab הזה נדרש אשכול Kubernetes. בקטע הבא נוצר אשכול GKE עם הגדרה פשוטה. בקטע הזה מוצגות כמה פקודות gcloud
שמספקות אפשרויות הגדרה חלופיות לשימוש במהלך פיתוח אשכול Kubernetes באמצעות GKE. לדוגמה, באמצעות הפקודות הבאות אפשר לזהות סוגים שונים של מכונות, אזורים ואפילו מעבדי GPU (מאיצים).
- הצגת רשימה של סוגי מכונות באמצעות הפקודה
gcloud compute machine-types list
- הצגת רשימה של מעבדי GPU באמצעות הפקודה
gcloud compute accelerator-types list
- הצגת רשימה של אזורי מחשוב באמצעות הפקודה
gcloud compute zones list
- קבלת עזרה לגבי כל פקודת gcloud
gcloud container clusters --help
- לדוגמה, זה נותן פרטים על יצירת אשכול kubernetes
gcloud container clusters create --help
- לדוגמה, זה נותן פרטים על יצירת אשכול kubernetes
במסמך הזה מופיעה רשימה מלאה של אפשרויות התצורה ל-GKE.
הכנה ליצירת אשכול ה-kubernetes
ב-Cloud Shell, צריך להגדיר כמה משתני סביבה ולהגדיר את הלקוח של gcloud. ניתן לעשות זאת באמצעות הפקודות הבאות.
export PROJECT_ID=YOUR_PROJECT_ID
export DEFAULT_ZONE=us-central1-c
gcloud config set project ${PROJECT_ID}
gcloud config set compute/zone ${DEFAULT_ZONE}
יצירת אשכול GKE
בשיעור ה-Lab הזה אפליקציית .NET Core ב-Kubernetes, ולכן עליכם ליצור אשכול. משתמשים בפקודה הבאה כדי ליצור אשכול חדש של Kubernetes ב-Google Cloud באמצעות GKE.
gcloud container clusters create dotnet-cluster \
--zone ${DEFAULT_ZONE} \
--num-nodes=1 \
--node-locations=${DEFAULT_ZONE},us-central1-b \
--enable-stackdriver-kubernetes \
--machine-type=n1-standard-1 \
--workload-pool=${PROJECT_ID}.svc.id.goog \
--enable-ip-alias
--num-nodes
הוא מספר הצמתים שצריך להוסיף לכל תחום, ואפשר לשנות את הגודל שלהם מאוחר יותר--node-locations
היא רשימת אזורים שמופרדת בפסיקים. במקרה הזה נעשה שימוש בתחום (zone) שמזהים במשתנה הסביבה שלמעלה, ובנוסף נעשה שימוש ב-us-central1-b
- הערה: הרשימה לא יכולה לכלול כפילויות
--workload-pool
יוצר זהות של עומסי עבודה כדי שעומסי עבודה ב-GKE יוכלו לגשת לשירותי Google Cloud
בזמן שהאשכול בונה את הנתונים הבאים מוצג
Creating cluster dotnet-cluster in us-central1-b... Cluster is being deployed...⠼
הגדרת kubectl
ה-CLI של kubectl
הוא הדרך העיקרית לאינטראקציה עם אשכול Kubernetes. כדי להשתמש בו עם האשכול החדש שנוצר עכשיו, צריך להגדיר אותו לביצוע אימות מול האשכול. הוא עושים זאת באמצעות הפקודה הבאה.
$ gcloud container clusters get-credentials dotnet-cluster --zone ${DEFAULT_ZONE}
Fetching cluster endpoint and auth data.
kubeconfig entry generated for dotnet-cluster.
עכשיו אמורה להיות אפשרות להשתמש ב-kubectl
כדי לבצע אינטראקציה עם האשכול.
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
gke-dotnet-cluster-default-pool-02c9dcb9-fgxj Ready <none> 2m15s v1.16.13-gke.401
gke-dotnet-cluster-default-pool-ed09d7b7-xdx9 Ready <none> 2m24s v1.16.13-gke.401
3. בדיקה מקומית ואישור הפונקציונליות הרצויה
בשיעור ה-Lab הזה נעשה שימוש בתמונות הקונטיינרים הבאות ממאגר .NET הרשמי ב-Docker Hub.
הפעלה של הקונטיינר באופן מקומי כדי לאמת את הפונקציונליות
ב-Cloud Shell, מוודאים ש-Docker פועל כראוי ושקונטיינר .NET פועל כצפוי על ידי הרצת הפקודה הבאה של Docker:
$ docker run --rm mcr.microsoft.com/dotnet/samples
Hello from .NET!
__________________
\
\
....
....'
....
..........
.............'..'..
................'..'.....
.......'..........'..'..'....
........'..........'..'..'.....
.'....'..'..........'..'.......'.
.'..................'... ......
. ......'......... .....
. ......
.. . .. ......
.... . .......
...... ....... ............
................ ......................
........................'................
......................'..'...... .......
.........................'..'..... .......
........ ..'.............'..'.... ..........
..'..'... ...............'....... ..........
...'...... ...... .......... ...... .......
........... ....... ........ ......
....... '...'.'. '.'.'.' ....
....... .....'.. ..'.....
.. .......... ..'........
............ ..............
............. '..............
...........'.. .'.'............
............... .'.'.............
.............'.. ..'..'...........
............... .'..............
......... ..............
.....
Environment:
.NET 5.0.1-servicing.20575.16
Linux 5.4.58-07649-ge120df5deade #1 SMP PREEMPT Wed Aug 26 04:56:33 PDT 2020
אישור הפונקציונליות של אפליקציית האינטרנט
אפשר לתקף גם אפליקציית אינטרנט לדוגמה ב-Cloud Shell. פקודת ההרצה של Docker שבהמשך יוצרת קונטיינר חדש שחושף את היציאה 80
וממפה אותו ליציאה localhost
8080
. חשוב לזכור ש-localhost
במקרה הזה נמצא ב-Cloud Shell.
$ docker run -it --rm -p 8080:80 --name aspnetcore_sample mcr.microsoft.com/dotnet/samples:aspnetapp
warn: Microsoft.AspNetCore.DataProtection.Repositories.FileSystemXmlRepository[60]
Storing keys in a directory '/root/.aspnet/DataProtection-Keys' that may not be persisted outside of the container. Protected data will be unavailable when container is destroyed.
warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]
No XML encryptor configured. Key {64a3ed06-35f7-4d95-9554-8efd38f8b5d3} may be persisted to storage in unencrypted form.
info: Microsoft.Hosting.Lifetime[0]
Now listening on: http://[::]:80
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Production
info: Microsoft.Hosting.Lifetime[0]
Content root path: /app
מדובר באפליקציית אינטרנט, לכן צריך להציג ולאמת אותה בדפדפן אינטרנט. בקטע הבא נסביר איך לעשות את זה ב-Cloud Shell באמצעות Web Preview.
4. גישה לשירותים מהמעטפת של הענן באמצעות Web Preview
Cloud Shell כוללת את Web Preview, תכונה שמאפשרת להשתמש בדפדפן כדי לקיים אינטראקציה עם תהליכים שרצים במכונה של Cloud Shell.
שימוש ב'תצוגה מקדימה של אתר' צפייה באפליקציות ב-Cloud Shell
ב-Cloud Shell, לוחצים על לחצן התצוגה המקדימה לאינטרנט ובוחרים באפשרות Preview on Port 8080 (תצוגה מקדימה ביציאה 8080). (או כל הגדרה אחרת של יציאת האינטרנט בתצוגה המקדימה).
פעולה זו תפתח חלון דפדפן עם כתובת כזו:
https://8080-cs-754738286554-default.us-central1.cloudshell.dev/?authuser=0
הצגת אפליקציה לדוגמה של .NET באמצעות Web Preview
כדי להציג את האפליקציה לדוגמה שהופעלה בשלב האחרון, צריך להפעיל את התצוגה המקדימה של האתר ולטעון את כתובת ה-URL שסופקה. הוא אמור להיראות כך:
5. פריסה ב-Kubernetes
יוצרים את קובץ ה-YAML ומחילים
בשלב הבא נדרש קובץ YAML שמתאר שני משאבים ב-Kubernetes: Deployment (פריסה) ו-Service (שירות). יוצרים קובץ בשם dotnet-app.yaml
ב-Cloud Shell ומוסיפים אליו את התוכן הבא.
apiVersion: apps/v1
kind: Deployment
metadata:
name: dotnet-deployment
labels:
app: dotnetapp
spec:
replicas: 3
selector:
matchLabels:
app: dotnetapp
template:
metadata:
labels:
app: dotnetapp
spec:
containers:
- name: dotnet
image: mcr.microsoft.com/dotnet/samples:aspnetapp
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: dotnet-service
spec:
selector:
app: dotnetapp
ports:
- protocol: TCP
port: 8080
targetPort: 80
עכשיו צריך להשתמש ב-kubectl
כדי להחיל את הקובץ הזה על kubernetes.
$ kubectl apply -f dotnet-app.yaml
deployment.apps/dotnet-deployment created
service/dotnet-service created
שימו לב להודעות שמציינות את המשאבים הרצויים שנוצרו.
לחקור את המשאבים שנוצרו
אפשר להשתמש ב- CLI kubectl
כדי לבחון את המשאבים שנוצרו למעלה. קודם כל, נבחן את משאבי הפריסה ונוודא שהפריסה החדשה קיימת.
$ kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
dotnet-deployment 3/3 3 3 80s
לאחר מכן, הסתכלו ב-ReplicaSets. אמורה להיות ReplicaSet שנוצרה על ידי הפריסה שלמעלה.
$ kubectl get replicaset
NAME DESIRED CURRENT READY AGE
dotnet-deployment-5c9d4cc4b9 3 3 3 111s
לסיום, מומלץ לעיין בPods. הפריסה ציינה שאמורה להיות שלושה מופעים. הפקודה הבאה אמורה להראות שיש שלושה מופעים. האפשרות -o wide
מתווספת כך שהצמתים שבהם המכונות האלה פועלות יוצגו.
$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
dotnet-deployment-5c9d4cc4b9-cspqd 1/1 Running 0 2m25s 10.16.0.8 gke-dotnet-cluster-default-pool-ed09d7b7-xdx9 <none> <none>
dotnet-deployment-5c9d4cc4b9-httw6 1/1 Running 0 2m25s 10.16.1.7 gke-dotnet-cluster-default-pool-02c9dcb9-fgxj <none> <none>
dotnet-deployment-5c9d4cc4b9-vvdln 1/1 Running 0 2m25s 10.16.0.7 gke-dotnet-cluster-default-pool-ed09d7b7-xdx9 <none> <none>
בדיקת המשאב של השירות
משאב שירות ב-Kubernetes הוא מאזן עומסים. נקודות הקצה נקבעות לפי תוויות ב-Pods. כך, מיד לאחר הוספת קבוצות Pod חדשים לפריסה באמצעות הפעולה kubectl scale deployment
שצוינה למעלה, קבוצות ה-Pod שייווצרו יהיו זמינות באופן מיידי לבקשות שמטופלות על ידי השירות הזה.
הפקודה הבאה אמורה להציג את משאב השירות.
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
dotnet-service ClusterIP 10.20.9.124 <none> 8080/TCP 2m50s
...
אפשר לראות פרטים נוספים על השירות באמצעות הפקודה הבאה.
$ kubectl describe svc dotnet-service
Name: dotnet-service
Namespace: default
Labels: <none>
Annotations: <none>
Selector: app=dotnetapp
Type: ClusterIP
IP: 10.20.9.124
Port: <unset> 8080/TCP
TargetPort: 80/TCP
Endpoints: 10.16.0.7:80,10.16.0.8:80,10.16.1.7:80
Session Affinity: None
Events: <none>
חשוב לשים לב שהשירות מסוג ClusterIP
. המשמעות היא שכל Pod באשכול יכול להתאים את שם השירות, dotnet-service
לכתובת ה-IP שלו. בקשות שיישלחו לשירות יאאזנו עומסים בכל המופעים (Pods). הערך Endpoints
שלמעלה מציג את כתובות ה-IP של ה-Pods שזמינות כרגע לשירות הזה. ניתן להשוות את כתובות ה-IP האלה לכתובות ה-IP של ה-Pods שהתקבלו בפלט שלמעלה.
יש לאמת את האפליקציה שפועלת
בשלב הזה האפליקציה פעילה ומוכנה לבקשות משתמשים. כדי לגשת אליהם, יש להשתמש בשרת proxy. הפקודה הבאה יוצרת שרת proxy מקומי שמקבל בקשות ביציאה 8080
ומעביר אותן לאשכול kubernetes.
$ kubectl proxy --port 8080
Starting to serve on 127.0.0.1:8080
עכשיו אפשר להשתמש ב-Web Preview ב-Cloud Shell כדי לגשת לאפליקציית האינטרנט.
צריך להוסיף את הטקסט הבא לכתובת ה-URL שנוצרה על ידי התצוגה המקדימה של האתר: /api/v1/namespaces/default/services/dotnet-service:8080/proxy/
. זה ייראה בערך כך:
https://8080-cs-473655782854-default.us-central1.cloudshell.dev/api/v1/namespaces/default/services/dotnet-service:8080/proxy/
ברכות על פריסת אפליקציית .NET Core ב-Google Kubernetes Engine. בשלב הבא נבצע שינוי באפליקציה ונפרס מחדש.
6. שינוי האפליקציה
בקטע הזה האפליקציה תשתנה כך שהיא תציג את המארח שבו פועלת המכונה. כך תהיה אפשרות לוודא שאיזון העומסים פועל ושה-Pods הזמינים מגיבים כמצופה.
קבלת קוד המקור
git clone https://github.com/dotnet/dotnet-docker.git
cd dotnet-docker/samples/aspnetapp/
צריך לעדכן את האפליקציה כך שתכלול את שם המארח
vi aspnetapp/Pages/Index.cshtml
<tr>
<td>Host</td>
<td>@Environment.MachineName</td>
</tr>
פיתוח קובץ אימג' חדש של קונטיינר ובדיקה מקומית
יוצרים את קובץ האימג' החדש של הקונטיינר עם הקוד המעודכן.
docker build --pull -t aspnetapp:alpine -f Dockerfile.alpine-x64 .
כמו קודם, מומלץ לבדוק את האפליקציה החדשה באופן מקומי
$ docker run --rm -it -p 8080:80 aspnetapp:alpine
warn: Microsoft.AspNetCore.DataProtection.Repositories.FileSystemXmlRepository[60]
Storing keys in a directory '/root/.aspnet/DataProtection-Keys' that may not be persisted outside of the container. Protected data will be unavailable when container is destroyed.
warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]
No XML encryptor configured. Key {f71feb13-8eae-4552-b4f2-654435fff7f8} may be persisted to storage in unencrypted form.
info: Microsoft.Hosting.Lifetime[0]
Now listening on: http://[::]:80
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Production
info: Microsoft.Hosting.Lifetime[0]
Content root path: /app
כמו תמיד, אפשר לגשת לאפליקציה באמצעות התכונה 'תצוגה מקדימה של האתר'. הפעם פרמטר המארח אמור להיות גלוי, כפי שמוצג כאן:
פותחים כרטיסייה חדשה ב-Cloud Shell ומריצים את docker ps
כדי לראות שמזהה הקונטיינר תואם לערך המארח שמוצג למעלה.
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ab85ce11aecd aspnetapp:alpine "./aspnetapp" 2 minutes ago Up 2 minutes 0.0.0.0:8080->80/tcp relaxed_northcutt
יש לתייג ולדחוף את התמונה כך שהיא תהיה זמינה ל-Kubernetes
צריך לתייג את התמונה ולדחוף אותה כדי לאפשר ל-Kubernetes לשלוף אותה. מתחילים ברישום של תמונות הקונטיינר ומזהים את התמונה הרצויה.
$ docker image list
REPOSITORY TAG IMAGE ID CREATED SIZE
aspnetapp alpine 95b4267bb6d0 6 days ago 110MB
לאחר מכן, מתייגים את התמונה ומעבירים אותה בדחיפה אל Google Container Registry. בעזרת מזהה ה-IMAGE שלמעלה, הוא ייראה כך
docker tag 95b4267bb6d0 gcr.io/${PROJECT_ID}/aspnetapp:alpine
docker push gcr.io/${PROJECT_ID}/aspnetapp:alpine
7. פריסה מחדש של האפליקציה המעודכנת
עורכים את קובץ ה-YAML
חוזרים לספרייה שבה נשמר הקובץ dotnet-app.yaml
. מאתרים את השורה הבאה בקובץ ה-YAML
image: mcr.microsoft.com/dotnet/core/samples:aspnetapp
צריך לשנות את ההגדרה הזו כך שהיא תפנה לתמונת הקונטיינר שנוצרה והועברה ב-gcr.io למעלה.
image: gcr.io/PROJECT_ID/aspnetapp:alpine
לא לשכוח לשנות אותו כדי שישתמש ב-PROJECT_ID
. בסיום, הוא אמור להיראות כך
image: gcr.io/myproject/aspnetapp:alpine
מחילים את קובץ ה-YAML המעודכן.
$ kubectl apply -f dotnet-app.yaml
deployment.apps/dotnet-deployment configured
service/dotnet-service unchanged
שימו לב שמשאב Deployment (פריסה) מציג נתונים מעודכנים ומשאב השירות לא משתנה. אפשר לראות את קבוצות ה-Pod המעודכנים כמו קודם באמצעות הפקודה kubectl get pod
, אבל הפעם אנחנו נוסיף את -w
, כדי שיתבצע מעקב אחרי כל השינויים שיתרחשו.
$ kubectl get pod -w
NAME READY STATUS RESTARTS AGE
dotnet-deployment-5c9d4cc4b9-cspqd 1/1 Running 0 34m
dotnet-deployment-5c9d4cc4b9-httw6 1/1 Running 0 34m
dotnet-deployment-5c9d4cc4b9-vvdln 1/1 Running 0 34m
dotnet-deployment-85f6446977-tmbdq 0/1 ContainerCreating 0 4s
dotnet-deployment-85f6446977-tmbdq 1/1 Running 0 5s
dotnet-deployment-5c9d4cc4b9-vvdln 1/1 Terminating 0 34m
dotnet-deployment-85f6446977-lcc58 0/1 Pending 0 0s
dotnet-deployment-85f6446977-lcc58 0/1 Pending 0 0s
dotnet-deployment-85f6446977-lcc58 0/1 ContainerCreating 0 0s
dotnet-deployment-5c9d4cc4b9-vvdln 0/1 Terminating 0 34m
dotnet-deployment-85f6446977-lcc58 1/1 Running 0 6s
dotnet-deployment-5c9d4cc4b9-cspqd 1/1 Terminating 0 34m
dotnet-deployment-85f6446977-hw24v 0/1 Pending 0 0s
dotnet-deployment-85f6446977-hw24v 0/1 Pending 0 0s
dotnet-deployment-5c9d4cc4b9-cspqd 0/1 Terminating 0 34m
dotnet-deployment-5c9d4cc4b9-vvdln 0/1 Terminating 0 34m
dotnet-deployment-5c9d4cc4b9-vvdln 0/1 Terminating 0 34m
dotnet-deployment-85f6446977-hw24v 0/1 Pending 0 2s
dotnet-deployment-85f6446977-hw24v 0/1 ContainerCreating 0 2s
dotnet-deployment-5c9d4cc4b9-cspqd 0/1 Terminating 0 34m
dotnet-deployment-5c9d4cc4b9-cspqd 0/1 Terminating 0 34m
dotnet-deployment-85f6446977-hw24v 1/1 Running 0 3s
dotnet-deployment-5c9d4cc4b9-httw6 1/1 Terminating 0 34m
dotnet-deployment-5c9d4cc4b9-httw6 0/1 Terminating 0 34m
בפלט שלמעלה רואים את העדכון הדרגתי בזמן אמת. ראשית, מאגרי התגים החדשים מופעלים, וכשהם פועלים, הקונטיינרים הישנים נסגרים.
יש לאמת את האפליקציה שפועלת
בשלב הזה האפליקציה מעודכנת ומוכנה לבקשות משתמשים. כמו קודם, ניתן לגשת אליהם באמצעות שרת proxy.
$ kubectl proxy --port 8080
Starting to serve on 127.0.0.1:8080
עכשיו אפשר להשתמש ב-Web Preview ב-Cloud Shell כדי לגשת לאפליקציית האינטרנט.
צריך להוסיף את הטקסט הבא לכתובת ה-URL שנוצרה על ידי התצוגה המקדימה של האתר: /api/v1/namespaces/default/services/dotnet-service:8080/proxy/
. זה ייראה בערך כך:
https://8080-cs-473655782854-default.us-central1.cloudshell.dev/api/v1/namespaces/default/services/dotnet-service:8080/proxy/
אישור ששירות Kubernetes מפיץ את העומס
צריך לרענן את כתובת ה-URL הזו כמה פעמים, ולשים לב שהמארח משתנה כי הבקשות מאוזנות בין Pods שונים על ידי השירות. משווים את ערכי המארח לרשימת ה-Pods שלמעלה כדי לראות שכל ה-Pods מקבלים תנועה.
הרחבת מכונות
קל להתאים אפליקציות ב-Kubernetes. פקודת המעקב מתאימה את הפריסה ל-6 מופעים של האפליקציה לכל היותר.
$ kubectl scale deployment dotnet-deployment --replicas 6
deployment.apps/dotnet-deployment scaled
אפשר להציג את ה-Pods החדשים ואת המצב הנוכחי שלהם באמצעות הפקודה הזו.
kubectl get pod -w
שימו לב שרענון אותו חלון דפדפן מראה שהתנועה מאוזנת בכל קבוצות ה-Pod החדשים.
8. מעולה!
בשיעור ה-Lab הזה, אפליקציית אינטרנט לדוגמה של NET Core אומתה בסביבת פיתוח ולאחר מכן נפרסה ב-Kubernetes באמצעות GKE. לאחר מכן בוצע שינוי באפליקציה במטרה להציג את שם המארח של מאגר התגים שבו היא פעלה. הפריסה של Kubernetes עודכנה לגרסה החדשה והאפליקציה עברה התאמה כדי להדגים את אופן חלוקת העומס בין מכונות נוספות.
במדריכים הבאים יש מידע נוסף על .NET ו-Kubernetes. הן מתבססות על מה שנלמד בשיעור ה-Lab הזה על ידי הצגת Istio Service Mesh לתבניות ניתוב ועמידות מתוחכמות יותר.
9. הסרת המשאבים
כדי להשיג עלויות לא מכוונות, משתמשים בפקודות הבאות כדי למחוק את האשכול ואת קובץ האימג' של הקונטיינר שנוצרו בשיעור ה-Lab הזה.
gcloud container clusters delete dotnet-cluster --zone ${DEFAULT_ZONE}
gcloud container images delete gcr.io/${PROJECT_ID}/aspnetapp:alpine