یک برنامه NET Core را در Google Kubernetes Engine مستقر و به روز کنید

1. بررسی اجمالی

Microsoft .NET Core یک نسخه منبع باز و کراس پلتفرم دات نت است که می تواند به صورت بومی در کانتینرها اجرا شود. NET Core در GitHub موجود است و توسط مایکروسافت و انجمن دات نت نگهداری می شود. این آزمایشگاه یک برنامه .NET Core را در Google Kubernetes Engine (GKE) مستقر می کند.

این آزمایشگاه از یک الگوی توسعه معمول پیروی می کند که در آن برنامه های کاربردی در یک محیط محلی توسعه دهندگان توسعه داده می شوند و سپس برای تولید مستقر می شوند. در بخش اول آزمایشگاه، یک مثال برنامه هسته دات نت با استفاده از یک کانتینر در حال اجرا در Cloud Shell تأیید می شود. پس از تأیید اعتبار، برنامه با استفاده از GKE در Kubernetes مستقر می شود. این آزمایشگاه شامل مراحل ایجاد یک خوشه GKE است.

در بخش دوم آزمایشگاه، یک تغییر جزئی در برنامه ایجاد می‌شود که نام میزبان محفظه‌ای را که نمونه برنامه را اجرا می‌کند نشان می‌دهد. سپس برنامه به روز شده در پوسته ابری تأیید می شود و استقرار برای استفاده از نسخه جدید به روز می شود. تصویر زیر توالی فعالیت ها در این آزمایشگاه را نشان می دهد:

نمودار توالی آزمایشی

هزینه ها

اگر این آزمایشگاه را دقیقاً همانطور که نوشته شده اجرا کنید، هزینه های عادی برای خدمات زیر اعمال می شود

2. راه اندازی و الزامات

پیش نیازها

برای تکمیل این آزمایشگاه، یک حساب 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

برای لیست کاملی از گزینه های پیکربندی برای 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

3. تست محلی و تایید عملکرد مورد نظر

این آزمایشگاه از تصاویر ظرف زیر از مخزن رسمی دات نت در داکر هاب استفاده می کند.

برای تأیید عملکرد، کانتینر را به صورت محلی اجرا کنید

در پوسته ابری، با اجرای دستور 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 زیر یک کانتینر جدید ایجاد می کند که پورت 80 را در معرض دید قرار می دهد و آن را روی پورت 8080 localhost نگاشت می کند. به یاد داشته باشید که 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

از آنجایی که این یک برنامه وب است، باید در یک مرورگر وب مشاهده و تأیید شود. بخش بعدی نحوه انجام این کار را در پوسته ابری با استفاده از پیش‌نمایش وب نشان می‌دهد.

4. دسترسی به خدمات از پوسته ابری با استفاده از "پیش نمایش وب"

Cloud Shell پیش‌نمایش وب را ارائه می‌کند، قابلیتی که استفاده از مرورگر را برای تعامل با فرآیندهای در حال اجرا در نمونه پوسته ابری ممکن می‌سازد.

برای مشاهده برنامه ها در Cloud Shell از "Web Preview" استفاده کنید

در Cloud Shell، روی دکمه پیش‌نمایش وب کلیک کنید و « پیش‌نمایش در پورت 8080 » را انتخاب کنید (یا هر پورتی که پیش‌نمایش وب برای استفاده تنظیم شده است).

پوسته ابری

یک پنجره مرورگر با آدرسی مانند زیر باز می شود:

https://8080-cs-754738286554-default.us-central1.cloudshell.dev/?authuser=0

برنامه نمونه دات نت را با استفاده از پیش نمایش وب مشاهده کنید

اکنون می‌توانید با شروع پیش‌نمایش وب و بارگیری URL ارائه‌شده، برنامه نمونه‌ای را که در مرحله آخر راه‌اندازی شده بود مشاهده کنید. باید چیزی شبیه این باشد:

اسکرین شات از برنامه .NET V1

5. مستقر در 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 برای بررسی منابعی که در بالا ایجاد شده اند استفاده کنیم. ابتدا، بیایید به منابع Deployment نگاه کنیم و تأیید کنیم که استقرار جدید وجود دارد.

$ 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 تعیین می شوند. به این ترتیب، به محض اینکه پادهای جدید از طریق عملیات kubectl scale deployment در بالا به استقرار اضافه شوند، پادهای حاصل بلافاصله برای درخواست‌هایی که توسط آن سرویس رسیدگی می‌شود، در دسترس هستند.

دستور زیر باید منبع Service را نشان دهد.

$ 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 های Pods که در بالا خروجی داده شد مقایسه کنید.

برنامه در حال اجرا را تأیید کنید

در این مرحله برنامه فعال و آماده برای درخواست های کاربر است. برای دسترسی به آن، از یک پروکسی استفاده کنید. دستور زیر یک پروکسی محلی ایجاد می کند که درخواست های پورت 8080 را می پذیرد و آنها را به خوشه kubernetes ارسال می کند.

$ kubectl proxy --port 8080
Starting to serve on 127.0.0.1:8080

اکنون از Web Preview در Cloud Shell برای دسترسی به برنامه وب استفاده کنید.

موارد زیر را به URL تولید شده توسط Web Preview اضافه کنید: /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. برنامه را تغییر دهید

در این بخش، برنامه برای نشان دادن میزبانی که نمونه روی آن اجرا می شود، تغییر می کند. این امر تأیید می‌کند که متعادل‌سازی بار کار می‌کند و پادهای موجود مطابق انتظار پاسخ می‌دهند.

کد منبع را دریافت کنید

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

مانند قبل، برنامه با استفاده از پیش نمایش وب قابل دسترسی است. این بار پارامتر Host باید قابل مشاهده باشد، همانطور که در اینجا نشان داده شده است:

پوسته ابری

یک برگه جدید در پوسته ابری باز کنید و docker ps را اجرا کنید تا ببینید که شناسه کانتینر با مقدار Host نشان داده شده در بالا مطابقت دارد.

$ 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 ID بالا، به این شکل خواهد بود

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 به روز شده و منبع Service بدون تغییر نشان داده می شود. Pods های به روز شده را می توان مانند قبل با دستور 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

اکنون از Web Preview در Cloud Shell برای دسترسی به برنامه وب استفاده کنید.

موارد زیر را به URL تولید شده توسط Web Preview اضافه کنید: /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 را چندین بار بازخوانی کنید و متوجه شوید که میزبان تغییر می کند زیرا درخواست ها در پادهای مختلف توسط سرویس بارگذاری می شوند. مقادیر Host را با لیست پادها از بالا مقایسه کنید تا ببینید همه پادها ترافیک دریافت می کنند.

نمونه ها را بزرگ کنید

مقیاس بندی برنامه ها در Kubernetes آسان است. دستور follow استقرار برنامه را تا 6 نمونه مقیاس می کند.

$ kubectl scale deployment dotnet-deployment --replicas 6
deployment.apps/dotnet-deployment scaled

Pods جدید و وضعیت فعلی آنها را می توان با این دستور مشاهده کرد

kubectl get pod -w

توجه داشته باشید که تازه کردن همان پنجره مرورگر نشان می دهد که اکنون ترافیک در تمام پادهای جدید متعادل است.

8. تبریک!

در این آزمایشگاه، یک برنامه وب نمونه هسته دات نت در یک محیط توسعه دهنده اعتبارسنجی شد و متعاقباً با استفاده از GKE در Kubernetes مستقر شد. سپس برنامه برای نمایش نام میزبان محفظه ای که در آن اجرا می شد، تغییر یافت. سپس استقرار Kubernetes به نسخه جدید به‌روزرسانی شد و برنامه برای نشان دادن نحوه توزیع بار در نمونه‌های اضافی، بزرگ‌تر شد.

برای کسب اطلاعات بیشتر در مورد دات نت و کوبرنتس، این آموزش ها را در نظر بگیرید. اینها بر اساس آنچه در این آزمایشگاه با معرفی مش سرویس Istio برای مسیریابی و الگوهای انعطاف‌پذیری پیچیده‌تر آموخته شده است.

9. پاکسازی کنید

برای جلوگیری از هزینه های ناخواسته، از دستورات زیر برای حذف خوشه و تصویر ظرفی که در این آزمایشگاه ایجاد شده است استفاده کنید.

gcloud container clusters delete dotnet-cluster --zone ${DEFAULT_ZONE}
gcloud container images delete gcr.io/${PROJECT_ID}/aspnetapp:alpine