۱. نمای کلی
Microsoft .NET Core نسخهای متنباز و چندسکویی از .NET است که میتواند بهطور بومی در محفظهها اجرا شود. .NET Core در GitHub دردسترس است و Microsoft و انجمن .NET آن را نگهداری میکنند. این آزمایشگاه برنامه .NET Core کانتینرسازیشده را در Google Kubernetes Engine (GKE) مستقر میکند.
این آزمایشگاه از یک الگوی توسعه معمول پیروی میکند که در آن برنامهها در محیط محلی توسعهدهندگان توسعه مییابند و سپس برای تولید مستقر میشوند. در بخش اول آزمایشگاه، یک برنامه نمونه .NET core بااستفاده از محفظهای که در Cloud Shell اجرا میشود اعتبارسنجی میشود. پساز اعتبارسنجی، برنامه بااستفاده از GKE در Kubernetes مستقر میشود. این آزمایشگاه شامل مراحل ایجاد خوشه GKE است.
در بخش دوم آزمایشگاه، تغییر کوچکی در برنامه ایجاد میشود که نام میزبان محفظهای را که آن نمونه برنامه را اجرا میکند نشان میدهد. سپس برنامه بهروزشده در پوسته ابری اعتبارسنجی میشود و استقرار برای استفاده از نسخه جدید بهروز میشود. تصویر زیر توالی فعالیتها را در این آزمایشگاه نشان میدهد:

هزینهها
اگر این آزمایشگاه را دقیقاً همانطور که نوشته شده است اجرا کنید، هزینههای معمول برای سرویسهای زیر اعمال خواهد شد
۲. راهاندازی و الزامات
پیشنیازها
برای تکمیل این آزمایشی، حساب و پروژه Google Cloud لازم است. برای دستورالعملهای دقیقتر درباره نحوه ایجاد پروژه جدید، به این Codelab مراجعه کنید.
این آزمایشگاه از Docker درحال اجرا در Cloud Shell استفاده میکند که ازطریق Google Cloud Console دردسترس است و با ابزارهای مفید بسیاری، مانند gcloud و Docker، ازپیش پیکربندی شده است. نحوه دسترسی به پوسته ابری در زیر نشان داده شده است. روی نماد Cloud Shell در بالا سمت چپ کلیک کنید تا در قاب پایین پنجره کنسول نشان داده شود.

گزینههای پیکربندی جایگزین برای خوشه GKE (اختیاری)
این آزمایشگاه به خوشه 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
ازآنجاییکه این آزمایشگاه برنامه .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فهرست جداشده با کاما از مناطق است. در این حالت، از منطقهای که در متغیر محیطی بالا شناسایی میکنید وus-central1-bاستفاده میشود- توجه: این فهرست نمیتواند حاوی موارد تکراری باشد
-
--workload-poolهویت بار کاری را ایجاد میکند تا بارهای کاری GKE بتوانند به سرویسهای Google Cloud دسترسی پیدا کنند
درحین ساختن خوشه، موارد زیر نمایش داده میشود
Creating cluster dotnet-cluster in us-central1-b... Cluster is being deployed...⠼
پیکربندی kubectl
kubectl CLI روش اصلی تعامل با خوشه 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
۳. آزمایش محلی و تأیید عملکرد مطلوب
این آزمایشگاه از تصاویر محتوی زیر از مخزن رسمی .NET در Docker hub استفاده میکند.
اجرای محفظه بهصورت محلی برای تأیید عملکرد
در پوسته ابری، با اجرای فرمان Docker زیر، درستیسنجی کنید که Docker بهدرستی راهاندازی شده و درحال اجرا است و محفظه .NET طبق انتظار کار میکند:
$ 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
تأیید عملکرد برنامه وب
یک برنامه وب نمونه را میتوان در پوسته ابری نیز اعتبارسنجی کرد. فرمان Docker run زیر محفظه جدیدی ایجاد میکند که درگاه 80 را نمایان میکند و آن را به درگاه localhost 8080 نگاشت میکند. بهخاطر داشته باشید که localhost در این مورد در پوسته ابری است.
$ 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 بااستفاده از «پیشنمایش وب» نشان میدهد.
۴. دسترسی به سرویسها از پوسته ابری بااستفاده از «پیشنمایش وب»
Cloud Shell پیشنمایش وب را ارائه میدهد، ویژگیای که امکان استفاده از مرورگر را برای تعامل با فرایندهای درحال اجرا در نمونه Cloud Shell فراهم میکند.
از «پیشنمایش وب» برای مشاهده برنامهها در Cloud Shell استفاده کنید
در Cloud Shell، روی دکمه پیشنمایش وب کلیک کنید و «پیشنمایش در درگاه ۸۰۸۰» (یا هر درگاهی که «پیشنمایش وب» برای استفاده تنظیم شده است) را انتخاب کنید.

با این کار، پنجره مرورگری با نشانیای شبیه به این باز میشود:
https://8080-cs-754738286554-default.us-central1.cloudshell.dev/
مشاهده برنامه نمونه .NET بااستفاده از «پیشنمایش وب»
برنامه نمونهای که در مرحله آخر شروع شد اکنون با شروع «پیشنمایش وب» و بار کردن نشانی وب ارائهشده قابلمشاهده است. باید چیزی شبیه به این باشد:

۵. مستقر کردن در Kubernetes
ساختن فایل YAML و اعمال کردن
مرحله بعدی به فایل YAML نیاز دارد که دو منبع Kubernetes، یعنی Deployment و Service را توصیف کند. فایلی با نام dotnet-app.yaml در پوسته ابری ایجاد کنید و محتوای زیر را به آن اضافه کنید.
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
به پیامهایی که نشان میدهند منابع موردنظر ایجاد شدهاند توجه کنید.
کاوش منابع حاصل
میتوانیم از kubectl CLI برای بررسی منابعی که در بالا ایجاد شدهاند استفاده کنیم. ابتدا، بیایید به منابع «استقرار» نگاه کنیم و مطمئن شویم که استقرار جدید آنجا است.
$ 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 آن تبدیل کند. درخواستهای ارسالشده به سرویس در همه نمونهها (Pod) توازن بار خواهند داشت. مقدار Endpoints در بالا IPهای Pods را که درحالحاضر برای این سرویس دردسترس است نشان میدهد. اینها را با IPهای Pods که در بالا برونداد شدهاند مقایسه کنید.
درستیسنجی برنامه درحال اجرا
در این مرحله، برنامه فعال و آماده درخواستهای کاربر است. برای دسترسی به آن، از پراکسی استفاده کنید. فرمان زیر یک پراکسی محلی ایجاد میکند که درخواستها را در درگاه 8080 میپذیرد و آنها را به خوشه kubernetes منتقل میکند.
$ kubectl proxy --port 8080
Starting to serve on 127.0.0.1:8080
اکنون از «پیشنمایش وب» در Cloud Shell برای دسترسی به برنامه وب استفاده کنید.
موارد زیر را به نشانی وب تولیدشده توسط «پیشنمایش وب» اضافه کنید: /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 مستقر کردید. سپس تغییری در برنامه ایجاد میکنیم و آن را دوباره مستقر میکنیم.
۶. اصلاح برنامه
در این بخش، برنامه اصلاح میشود تا میزبانی را که نمونه در آن اجرا میشود نشان دهد. این کار امکان تأیید عملکرد صحیح توازن بار و پاسخدهی Podهای دردسترس طبق انتظار را فراهم میکند.
دریافت کد منبع
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 ارسال کنید. بااستفاده از شناسه تصویر بالا، که به این شکل خواهد بود
docker tag 95b4267bb6d0 gcr.io/${PROJECT_ID}/aspnetapp:alpine
docker push gcr.io/${PROJECT_ID}/aspnetapp:alpine
۷. برنامه بهروزشده را دوباره مستقر کنید
ویرایش فایل 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
توجه کنید که منبع «پیادهسازی» بهروزرسانیشده و منبع «سرویس» بدون تغییر نشان داده میشود. 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
خروجی بالا بهروزرسانی تدریجی را درحین انجام نشان میدهد. ابتدا، محفظههای جدید راهاندازی میشوند و وقتی درحال اجرا باشند، محفظههای قدیمی خاتمه مییابند.
درستیسنجی برنامه درحال اجرا
در این مرحله، برنامه بهروز شده و برای درخواستهای کاربر آماده است. مثل قبل، بااستفاده از پراکسی میتوان به آن دسترسی داشت.
$ kubectl proxy --port 8080
Starting to serve on 127.0.0.1:8080
اکنون از «پیشنمایش وب» در Cloud Shell برای دسترسی به برنامه وب استفاده کنید.
موارد زیر را به نشانی وب تولیدشده توسط «پیشنمایش وب» اضافه کنید: /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» بار را توزیع میکند
این نشانی وب را چند بار بازآوری کنید و توجه داشته باشید که با توزیع بار درخواستها در Podهای مختلف توسط «سرویس»، «میزبان» تغییر میکند. مقادیر «میزبان» را با فهرست Pods در بالا مقایسه کنید تا ببینید همه Pods ترافیک دریافت میکنند.
افزایش مقیاس نمونهها
مقیاسبندی برنامهها در Kubernetes آسان است. فرمان زیر استقرار را تا ۶ نمونه از برنامه مقیاسبندی میکند.
$ kubectl scale deployment dotnet-deployment --replicas 6
deployment.apps/dotnet-deployment scaled
با این فرمان میتوان Pods جدید و وضعیت فعلی آنها را مشاهده کرد
kubectl get pod -w
توجه داشته باشید که بازآوری همان پنجره مرورگر نشان میدهد که ترافیک اکنون در همه Podهای جدید متعادل شده است.
۸. تبریک!
در این آزمایشگاه، یک برنامه وب نمونه .NET Core در محیط توسعهدهنده اعتبارسنجی شد و سپس بااستفاده از GKE در Kubernetes مستقر شد. سپس برنامه اصلاح شد تا نام میزبان محفظهای را که در آن اجرا میشد نمایش دهد. سپس استقرار Kubernetes به نسخه جدید بهروزرسانی شد و برنامه مقیاسبندی شد تا نشان دهد چگونه بار در نمونههای اضافی توزیع میشود.
برای کسب اطلاعات بیشتر درباره NET .و Kubernetes، این آموزشهای گامبهگام را درنظر بگیرید. این موارد براساس آنچه در این آزمایشگاه آموخته شده است، با معرفی Istio Service Mesh برای الگوهای مسیریابی و انعطافپذیری پیچیدهتر ساخته شدهاند.
۹. مرتبسازی
برای جلوگیری از هزینههای ناخواسته، از فرمانهای زیر برای حذف خوشه و تصویر محفظه ایجادشده در این آزمایشگاه استفاده کنید.
gcloud container clusters delete dotnet-cluster --zone ${DEFAULT_ZONE}
gcloud container images delete gcr.io/${PROJECT_ID}/aspnetapp:alpine