Google Kubernetes Engine'de .NET Core uygulaması Dağıtma ve Güncelleme

1. Genel Bakış

Microsoft .NET Core, container'larda yerel olarak çalıştırılabilen açık kaynak ve platformlar arası bir .NET sürümüdür. .NET Core, GitHub'da kullanılabilir ve Microsoft ile .NET topluluğu tarafından yönetilir. Bu laboratuvar, Google Kubernetes Engine'e (GKE) container mimarisine alınmış bir .NET Core uygulamasını dağıtır.

Bu laboratuvarda, uygulamaların geliştiricilerin yerel ortamında geliştirilip üretime dağıtıldığı tipik bir geliştirme kalıbı açıklanmaktadır. Laboratuvarın ilk bölümünde, örnek bir .NET temel uygulaması Cloud Shell'de çalışan bir kapsayıcı kullanılarak doğrulanmıştır. Uygulama doğrulandıktan sonra GKE kullanılarak Kubernetes'te dağıtılır. Laboratuvar, GKE kümesi oluşturma adımlarını içerir.

Laboratuvarın ikinci bölümünde, uygulamada, ilgili uygulama örneğini çalıştıran kapsayıcının ana makine adını gösteren küçük bir değişiklik yapılacak. Daha sonra, güncellenen uygulama Cloud Shell'de doğrulanır ve dağıtım yeni sürümü kullanacak şekilde güncellenir. Aşağıdaki resimde, bu laboratuvardaki etkinliklerin sırası gösterilmektedir:

Demo dizi diyagramı

Maliyetler

Bu laboratuvarı tam olarak yazıldığı şekilde çalıştırırsanız aşağıdaki hizmetler için normal ücretler uygulanır

2. Kurulum ve Gereksinimler

Ön koşullar

Bu laboratuvarı tamamlamak için bir Google Cloud hesabı ve projesi gereklidir. Yeni proje oluşturmayla ilgili daha ayrıntılı talimatlar için bu Codelab'e bakın.

Bu laboratuvarda, Google Cloud Console'dan erişilebilen ve gcloud ve Docker gibi birçok faydalı araçla önceden yapılandırılmış olarak sunulan Cloud Shell'de çalışan Docker kullanımı ele alınmaktadır. Cloud Shell'e nasıl erişileceği aşağıda gösterilmiştir. Konsol penceresinin alt bölmesinde görünmesi için sağ üstteki Cloud Shell simgesini tıklayın.

Cloud Shell

GKE kümesi için alternatif yapılandırma seçenekleri (isteğe bağlı)

Bu laboratuvar için Kubernetes kümesi gerekir. Sonraki bölümde basit bir yapılandırmaya sahip bir GKE kümesi oluşturulmuştur. Bu bölümde, GKE kullanarak Kubernetes kümesi oluştururken kullanılabilecek alternatif yapılandırma seçenekleri sunan bazı gcloud komutları gösterilmektedir. Örneğin, aşağıdaki komutları kullanarak farklı makine türlerini, alt bölgeleri ve hatta GPU'ları (hızlandırıcılar) tanımlamak mümkündür.

  • Makine türlerini şu komutuyla listeleyin: gcloud compute machine-types list
  • Bu komutla GPU'ları listeleyin: gcloud compute accelerator-types list
  • İşlem alt bölgelerini şu komutuyla listeleyin: gcloud compute zones list
  • Herhangi bir gcloud komutuyla ilgili yardım alın gcloud container clusters --help
    • Örneğin, bu görselde bir Kubernetes kümesi oluşturma hakkında ayrıntılı bilgi verilmektedir. gcloud container clusters create --help

GKE'nin yapılandırma seçeneklerinin tam listesi için bu belgeye bakın.

Kubernetes kümesini oluşturmaya hazırlanma

Cloud Shell'de bazı ortam değişkenlerini ayarlamak ve gcloud istemcisini yapılandırmak gerekir. Bu işlem, aşağıdaki komutlarla gerçekleştirilir.

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 kümesi oluşturma

Bu laboratuvar, .NET Core uygulamasını Kubernetes üzerinde dağıttığından küme oluşturmanız gerekir. GKE'yi kullanarak Google Cloud'da yeni bir Kubernetes kümesi oluşturmak için aşağıdaki komutu kullanın.

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, alt bölge başına eklenecek düğüm sayısıdır ve daha sonra ölçeklendirilebilir
  • --node-locations, alt bölgelerin virgülle ayrılmış bir listesidir. Bu durumda, yukarıdaki ortam değişkeninde tanımladığınız alt bölge ve us-central1-b kullanılır.
    • NOT: Bu liste yinelenen öğeler içeremez
  • --workload-pool, GKE iş yüklerinin Google Cloud hizmetlerine erişebilmesi için iş yükü kimliği oluşturur

Küme oluştururken aşağıdakiler gösterilir

Creating cluster dotnet-cluster in us-central1-b... Cluster is being deployed...⠼

kubectl'i yapılandırma

kubectl KSA, Kubernetes kümesiyle etkileşimde bulunmanın birincil yoludur. Yeni oluşturulan yeni kümeyle kullanabilmeniz için kümeye karşı kimlik doğrulaması yapacak şekilde yapılandırılması gerekir. Bu işlem, komutun uygulanmasıyla yapılır.

$ gcloud container clusters get-credentials dotnet-cluster --zone ${DEFAULT_ZONE}
Fetching cluster endpoint and auth data.
kubeconfig entry generated for dotnet-cluster.

Artık kümeyle etkileşim kurmak için kubectl kullanılabilir.

$ 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. Yerel olarak test edin ve istenen işlevi onaylayın

Bu laboratuvarda, Docker hub'ındaki resmi .NET deposundan alınan aşağıdaki container görüntüleri kullanılmaktadır.

İşlevleri doğrulamak için kapsayıcıyı yerel olarak çalıştırın

Cloud Shell'de aşağıdaki Docker komutunu çalıştırarak Docker'ın düzgün şekilde çalıştığını ve .NET kapsayıcısının beklendiği gibi çalıştığını doğrulayın:

$ 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

Web uygulaması işlevini onaylayın

içindeki örnek bir web uygulaması, Cloud Shell'de de doğrulanabilir. Aşağıdaki Docker çalıştırma komutu, 80 bağlantı noktasını açığa çıkaran yeni bir container oluşturur ve bunu localhost bağlantı noktası 8080 ile eşler. Bu örnekte localhost öğesinin Cloud Shell'de olduğunu unutmayın.

$ 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

Bu bir web uygulaması olduğundan web tarayıcısında görüntülenip doğrulanması gerekir. Sonraki bölümde, Web Önizlemesi kullanılarak Cloud Shell'de bunun nasıl yapılacağı gösterilmektedir.

4. "Web Önizlemesi"ni kullanarak Cloud Shell'den hizmetlere erişme

Cloud Shell, Cloud Shell örneğinde çalışan işlemlerle etkileşim için tarayıcının kullanılmasını sağlayan Web Önizleme özelliğini sunar.

"Web Önizlemesi" seçeneğini kullanma Cloud Shell'de uygulamaları görüntülemek için

Cloud Shell'de web önizlemesi düğmesini tıklayın ve "8080 bağlantı noktasında önizle"yi seçin. (veya Web Önizlemesi'nin kullanılacak şekilde ayarlandığı bağlantı noktası).

Cloud Shell

Bu işlem, aşağıdaki gibi bir adresle bir tarayıcı penceresi açar:

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

Web Preview'u kullanarak .NET örnek uygulamasını görüntüleme

Son adımda başlatılan örnek uygulama, artık Web Önizlemesi başlatılıp sağlanan URL yüklenerek görüntülenebilir. Şuna benzer bir görünümde olacaktır:

.NET uygulaması V1&#39;in ekran görüntüsü

5. Kubernetes'e dağıtma

YAML dosyasını derleme ve uygulama

Sonraki adımda, bir dağıtım ve bir hizmet olmak üzere iki Kubernetes kaynağını açıklayan bir YAML dosyası gerekir. Cloud Shell'de dotnet-app.yaml adlı bir dosya oluşturun ve aşağıdaki içerikleri bu dosyaya ekleyin.

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

Şimdi bu dosyayı Kubernetes'e uygulamak için kubectl komutunu kullanın.

$ kubectl apply -f dotnet-app.yaml
deployment.apps/dotnet-deployment created
service/dotnet-service created

İstenen kaynakların oluşturulduğunu belirten mesajlara dikkat edin.

Ortaya çıkan kaynakları inceleyin

Yukarıda oluşturulan kaynakları incelemek için kubectl KSA'yı kullanabiliriz. Öncelikle Dağıtım kaynaklarına göz atalım ve yeni dağıtımın mevcut olduğunu onaylayalım.

$ kubectl get deployment
NAME                READY   UP-TO-DATE   AVAILABLE   AGE
dotnet-deployment   3/3     3            3           80s

Şimdi ReplicaSet'e bakalım. Yukarıdaki dağıtım tarafından oluşturulmuş bir ReplicaSet bulunmalıdır.

$ kubectl get replicaset
NAME                           DESIRED   CURRENT   READY   AGE
dotnet-deployment-5c9d4cc4b9   3         3         3       111s

Son olarak Kapsüllere göz atın. Dağıtım, üç örnek olması gerektiğini belirtiyordu. Aşağıdaki komut, üç örnek olduğunu göstermelidir. Bu örneklerin çalıştırıldığı düğümlerin gösterilmesi için -o wide seçeneği eklenir.

$ 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>

Hizmet kaynağını inceleme

Kubernetes'teki Hizmet kaynağı bir yük dengeleyicidir. Uç noktalar, kapsüllerdeki etiketlerle belirlenir. Böylece, yukarıdaki kubectl scale deployment işlemi aracılığıyla dağıtıma yeni kapsüller eklendiğinde elde edilen kapsüller, söz konusu hizmet tarafından işlenen istekler için hemen kullanılabilir hale gelir.

Aşağıdaki komut, Hizmet kaynağını göstermelidir.

$ kubectl get svc
NAME             TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)    AGE
dotnet-service   ClusterIP   10.20.9.124   <none>        8080/TCP   2m50s
...

Aşağıdaki komutla Hizmet hakkında daha fazla bilgi görebilirsiniz.

$ 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>

Hizmetin ClusterIP türünde olduğuna dikkat edin. Yani, küme içindeki tüm kapsüller Hizmet adını (dotnet-service) IP adresine çözümleyebilir. Hizmete gönderilen istekler, tüm örnekler (kapsüller) arasında yük dengelemesi yapılır. Yukarıdaki Endpoints değeri, bu hizmet için şu anda kullanılabilen Kapsüllerin IP'lerini gösterir. Bunları yukarıda oluşturulan kapsüllerin IP'leriyle karşılaştırın.

Çalışan uygulamayı doğrulama

Bu noktada uygulama devreye girer ve kullanıcı istekleri için hazır olur. Erişmek için bir proxy kullanın. Aşağıdaki komut, 8080 bağlantı noktasında istekleri kabul eden bir yerel proxy oluşturur ve bunları Kubernetes kümesine iletir.

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

Artık web uygulamasına erişmek için Cloud Shell'de Web Önizlemesi'ni kullanabilirsiniz.

Web Önizlemesi tarafından oluşturulan URL'ye şunu ekleyin: /api/v1/namespaces/default/services/dotnet-service:8080/proxy/. Sonuç şöyle görünür:

https://8080-cs-473655782854-default.us-central1.cloudshell.dev/api/v1/namespaces/default/services/dotnet-service:8080/proxy/

Google Kubernetes Engine'de bir .NET Core uygulaması dağıttığınız için tebrikler. Ardından, uygulamada değişiklik yapıp yeniden dağıtacağız.

6. Uygulamada değişiklik yapma

Bu bölümde uygulama, örneğin çalıştığı ana makineyi gösterecek şekilde değiştirilir. Bu sayede yük dengelemenin çalıştığını ve mevcut kapsüllerin beklendiği gibi yanıt verdiğini onaylayabilirsiniz.

Kaynak kodunu alma

git clone https://github.com/dotnet/dotnet-docker.git
cd dotnet-docker/samples/aspnetapp/

Uygulamayı ana makine adını içerecek şekilde güncelleyin

vi aspnetapp/Pages/Index.cshtml
    <tr>
        <td>Host</td>
        <td>@Environment.MachineName</td>
    </tr>

Yeni bir container görüntüsü derleyin ve yerel olarak test edin

Güncellenen kodla yeni container görüntüsünü oluşturun.

docker build --pull -t aspnetapp:alpine -f Dockerfile.alpine-x64 .

Daha önce olduğu gibi, yeni uygulamayı yerel olarak test edin

$ 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

Önceden olduğu gibi, uygulamaya Web Önizlemesi kullanılarak erişilebilir. Bu kez, Ana makine parametresi aşağıda gösterildiği gibi görünür olmalıdır:

Cloud Shell

Cloud Shell'de yeni bir sekme açın ve kapsayıcı kimliğinin yukarıda gösterilen Ana makine değeriyle eşleştiğini görmek için docker ps komutunu çalıştırın.

$ 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'te kullanılabilmesi için görüntüyü etiketleyip aktarın

Kubernetes'in görüntüyü çekebilmesi için görüntünün etiketlenmesi ve aktarılması gerekir. İlk olarak container görüntülerini listeleyin ve istediğiniz görüntüyü belirleyin.

$ docker image list
REPOSITORY                                         TAG                 IMAGE ID            CREATED             SIZE
aspnetapp                                          alpine              95b4267bb6d0        6 days ago          110MB

Ardından, ilgili görüntüyü etiketleyip Google Container Registry'ye aktarın. Yukarıdaki IMAGE kimliği kullanıldığında, bu kod aşağıdaki gibi görünür:

docker tag 95b4267bb6d0 gcr.io/${PROJECT_ID}/aspnetapp:alpine
docker push gcr.io/${PROJECT_ID}/aspnetapp:alpine

7. Güncellenen uygulamayı yeniden dağıtma

YAML dosyasını düzenleme

dotnet-app.yaml dosyasının kaydedildiği dizine geri dönün. YAML dosyasında aşağıdaki satırı bulun

        image: mcr.microsoft.com/dotnet/core/samples:aspnetapp

Bunun, oluşturulan ve yukarıdaki gcr.io'ya aktarılan container görüntüsüne referans verecek şekilde değiştirilmesi gerekir.

        image: gcr.io/PROJECT_ID/aspnetapp:alpine

PROJECT_ID öğenizi kullanmak için değişiklik yapmayı unutmayın. İşlemi tamamladığınızda aşağıdaki gibi görünecektir

        image: gcr.io/myproject/aspnetapp:alpine

Güncellenen YAML dosyasını uygulayın

$ kubectl apply -f dotnet-app.yaml
deployment.apps/dotnet-deployment configured
service/dotnet-service unchanged

Dağıtım kaynağının güncellenmiş olduğunu, hizmet kaynağının ise değişmediğini fark edeceksiniz. Güncellenen kapsüller, kubectl get pod komutuyla önceki gibi görülebilir ancak bu kez, tüm değişiklikleri gerçekleştikçe izleyecek olan -w öğesini ekleyeceğiz.

$ 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

Yukarıdaki çıkış, periyodik güncellemeyi gerçekleştiği sırada gösterir. Öncelikle yeni container'lar başlatılır ve çalışırken eski container'lar sonlandırılır.

Çalışan uygulamayı doğrulama

Bu noktada uygulama güncellenir ve kullanıcı istekleri için hazır olur. Daha önce olduğu gibi, proxy kullanılarak erişilebilir.

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

Artık web uygulamasına erişmek için Cloud Shell'de Web Önizlemesi'ni kullanabilirsiniz.

Web Önizlemesi tarafından oluşturulan URL'ye şunu ekleyin: /api/v1/namespaces/default/services/dotnet-service:8080/proxy/. Sonuç şöyle görünür:

https://8080-cs-473655782854-default.us-central1.cloudshell.dev/api/v1/namespaces/default/services/dotnet-service:8080/proxy/

Kubernetes Hizmeti'nin yük dağıttığını doğrulama

Bu URL'yi birkaç kez yenileyin ve istekler hizmet tarafından farklı kapsüllerde dengelendiğinden Ana Makinenin değiştiğine dikkat edin. Tüm kapsüllerin trafik aldığını görmek için Ana makine değerlerini yukarıdaki Kapsüllerin listesiyle karşılaştırın.

Örnekleri yukarı ölçeklendirme

Kubernetes'te uygulamaları kolayca ölçeklendirebilirsiniz. Aşağıdaki komut, dağıtımı, uygulamanın 6 örneğine kadar ölçeklendirir.

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

Yeni kapsüller ve mevcut durumları bu komutla görüntülenebilir

kubectl get pod -w

Aynı tarayıcı penceresini yenilediğinizde trafiğin artık tüm yeni kapsüllerde dengelendiğini göreceksiniz.

8. Tebrikler!

Bu laboratuvarda, .NET Core örnek web uygulaması bir geliştirici ortamında doğrulandı ve ardından GKE kullanılarak Kubernetes'e dağıtıldı. Daha sonra, uygulama, içinde çalıştırıldığı kapsayıcının ana makine adını gösterecek şekilde değiştirildi. Daha sonra Kubernetes dağıtımı yeni sürüme güncellendi ve uygulamanın ölçeği, yükün diğer örnekler arasında nasıl dağıtıldığını gösterecek şekilde ölçeklendirildi.

.NET ve Kubernetes hakkında daha fazla bilgi edinmek için bu eğiticileri kullanabilirsiniz. Bunlar, daha gelişmiş yönlendirme ve dayanıklılık kalıpları için Istio Service Mesh'i kullanıma sunarak bu laboratuvarda öğrenilenlerin üzerine inşa edilmiştir.

9. Temizleme

İstenmeyen maliyetleri önlemek için aşağıdaki komutları kullanarak bu laboratuvarda oluşturulan kümeyi ve kapsayıcı görüntüsünü silin.

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