1. Genel Bakış
Microsoft .NET Core, .NET'in açık kaynaklı ve platformlar arası bir sürümüdür ve container'larda yerel olarak çalışabilir. .NET Core, GitHub'da kullanılabilir ve Microsoft ile .NET topluluğu tarafından desteklenir. Bu laboratuvarda, container mimarisine alınmış bir .NET Core uygulaması Google Kubernetes Engine'e (GKE) dağıtılır.
Bu laboratuvarda, uygulamaların geliştiricinin yerel ortamında geliştirilip üretime dağıtıldığı tipik bir geliştirme modeli izlenir. Laboratuvarın ilk bölümünde, Cloud Shell'de çalışan bir kapsayıcı kullanılarak örnek bir .NET Core uygulaması doğrulanır. Doğrulandıktan sonra uygulama, GKE kullanılarak Kubernetes'e dağıtılır. Laboratuvarda GKE kümesi oluşturma adımları yer alır.
Laboratuvarın ikinci bölümünde, uygulama örneğini çalıştıran kapsayıcının ana makine adını gösteren uygulamada küçük bir değişiklik yapılır. Güncellenen uygulama daha sonra 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:

Maliyetler
Bu laboratuvarı tam olarak yazıldığı gibi çalıştırırsanız aşağıdaki hizmetler için normal maliyetler uygulanır.
2. Kurulum ve Gereksinimler
Ön koşullar
Bu laboratuvarı tamamlamak için Google Cloud hesabı ve projesi gerekir. Yeni proje oluşturma hakkında daha ayrıntılı talimatlar için bu Codelab'i inceleyin.
Bu laboratuvarda, Google Cloud Console üzerinden erişilebilen ve gcloud ile Docker gibi birçok faydalı araçla önceden yapılandırılmış olarak gelen Cloud Shell'de çalışan Docker kullanılmaktadır. Cloud Shell'e nasıl erişeceğiniz aşağıda açıklanmıştır. Sağ üstteki Cloud Shell simgesini tıklayarak konsol penceresinin alt bölmesinde Cloud Shell'i gösterin.

GKE kümesi için alternatif yapılandırma seçenekleri (isteğe bağlı)
Bu laboratuvar için bir Kubernetes kümesi gerekir. Bir sonraki bölümde, basit bir yapılandırmaya sahip bir GKE kümesi oluşturulur. 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 kullanılarak farklı makine türleri, bölgeler ve hatta GPU'lar (hızlandırıcılar) tanımlanabilir.
- Bu komutla makine türlerini listeleyin:
gcloud compute machine-types list - GPU'ları şu komutla listeleyin:
gcloud compute accelerator-types list - Aşağıdaki komutla işlem bölgelerini listeleyin:
gcloud compute zones list - Herhangi bir gcloud komutuyla ilgili yardım alma
gcloud container clusters --help- Örneğin, bu işlem Kubernetes kümesi oluşturma hakkında ayrıntılı bilgi verir.
gcloud container clusters create --help
- Örneğin, bu işlem Kubernetes kümesi oluşturma hakkında ayrıntılı bilgi verir.
GKE'deki 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şkenlerinin ayarlanması ve gcloud istemcisinin yapılandırılması 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 laboratuvarda .NET Core uygulaması Kubernetes'e dağıtıldığından bir küme oluşturulması 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, bölge başına eklenecek düğüm sayısıdır ve daha sonra ölçeklendirilebilir.--node-locations, virgülle ayrılmış bölgelerin listesidir. Bu durumda, yukarıdaki ortam değişkeninde tanımladığınız bölge veus-central1-bkullanılır.- NOT: Bu listede mükerrer giriş bulunamaz.
--workload-pool, GKE iş yüklerinin Google Cloud hizmetlerine erişebilmesi için iş yükü kimliğini oluşturur.
Küme oluşturulurken aşağıdakiler gösterilir:
Creating cluster dotnet-cluster in us-central1-b... Cluster is being deployed...⠼
kubectl'ı yapılandırma
kubectl CLI, Kubernetes kümesiyle etkileşim kurmanın birincil yoludur. Yeni oluşturulan kümede kullanılabilmesi için küme üzerinde kimlik doğrulama yapacak şekilde yapılandırılması gerekir. Bu işlem aşağıdaki komutla 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 etme ve istenen işlevselliği onaylama
Bu laboratuvarda, Docker Hub'daki resmi .NET deposundan aşağıdaki container görüntüleri kullanılmaktadır.
İşlevselliği doğrulamak için kapsayıcıyı yerel olarak çalıştırma
Cloud Shell'de aşağıdaki Docker komutunu çalıştırarak Docker'ın düzgün şekilde çalışıp çalışmadığını ve .NET kapsayıcısının beklendiği gibi çalışıp çalışmadığı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şlevselliğini onaylama
Örnek bir web uygulaması, Cloud Shell'de de doğrulanabilir. Aşağıdaki Docker run komutu, 80 bağlantı noktasını kullanıma sunan ve bunu localhost bağlantı noktası 8080'ye eşleyen yeni bir container oluşturur. Bu durumda 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ülenmesi ve doğrulanması gerekir. Sonraki bölümde, Web Önizleme'yi kullanarak Cloud Shell'de bu işlemin nasıl yapılacağı gösterilmektedir.
4. "Web önizlemesi"ni kullanarak Cloud Shell'den hizmetlere erişme
Cloud Shell, Web Önizleme özelliğini sunar. Bu özellik sayesinde, Cloud Shell örneğinde çalışan işlemlerle etkileşim kurmak için tarayıcı kullanabilirsiniz.
Cloud Shell'deki uygulamaları görüntülemek için "Web Önizlemesi"ni kullanma
Cloud Shell'de web önizlemesi düğmesini tıklayın ve "8080 bağlantı noktasında önizle"yi (veya Web Önizlemesi'nin kullanacağı bağlantı noktasını) seçin.

Bu işlemle, aşağıdaki gibi bir adrese sahip tarayıcı penceresi açılır:
https://8080-cs-754738286554-default.us-central1.cloudshell.dev/?authuser=0
Web önizlemesini kullanarak .NET örnek uygulamasını görüntüleme
Son adımda başlatılan örnek uygulama, artık Web Önizleme başlatılıp sağlanan URL yüklenerek görüntülenebilir. Şuna benzer bir görünümde olacaktır:

5. Kubernetes'e dağıtma
YAML dosyasını oluşturma ve uygulama
Bir sonraki adımda, iki Kubernetes kaynağını (bir dağıtım ve bir hizmet) açıklayan bir YAML dosyası gerekir. Cloud Shell'de dotnet-app.yaml adlı bir dosya oluşturun ve aşağıdaki içerikleri 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.
Elde edilen kaynakları keşfetme
Yukarıda oluşturulan kaynakları incelemek için kubectl KSA'yı kullanabiliriz. Öncelikle, dağıtım kaynaklarına göz atıp yeni dağıtımın mevcut olduğunu doğrulayalım.
$ kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
dotnet-deployment 3/3 3 3 80s
Ardından ReplicaSet'lere göz atın. Yukarıdaki dağıtım tarafından bir ReplicaSet oluşturulmalıdır.
$ kubectl get replicaset
NAME DESIRED CURRENT READY AGE
dotnet-deployment-5c9d4cc4b9 3 3 3 111s
Son olarak Kapsüller'e 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ığı 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 Service kaynağı bir yük dengeleyicidir. Uç noktalar, Pod'lerdeki etiketlere göre belirlenir. Bu sayede, yukarıdaki kubectl scale deployment işlemiyle dağıtıma yeni kapsüller eklendiği anda, ortaya çıkan kapsüller söz konusu hizmet tarafından işlenen istekler için hemen kullanılabilir.
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
...
Hizmet hakkında daha fazla bilgiyi aşağıdaki komutla 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. Bu, kümedeki herhangi bir kapsülün dotnet-service hizmet adını IP adresine çözümleyebileceği anlamına gelir. Hizmete gönderilen istekler, tüm örnekler (kapsüller) arasında yük dengelemesi yapılır. Yukarıdaki Endpoints değeri, şu anda bu hizmet için kullanılabilen Pod'ların IP'lerini gösterir. Bunları, yukarıda çıkışı verilen pod'ların IP'leriyle karşılaştırın.
Çalışan uygulamayı doğrulama
Bu noktada uygulama yayındadır ve kullanıcı isteklerine hazırdır. Bu siteye erişmek için proxy kullanın. Aşağıdaki komut, 8080 bağlantı noktasındaki istekleri kabul eden ve bunları Kubernetes kümesine ileten yerel bir proxy oluşturur.
$ kubectl proxy --port 8080
Starting to serve on 127.0.0.1:8080
Web uygulamasına erişmek için Cloud Shell'de web önizlemeyi kullanın.
Web önizleme tarafından oluşturulan URL'ye şunları ekleyin: /api/v1/namespaces/default/services/dotnet-service:8080/proxy/. Bu durumda sonuç aşağıdaki gibi 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 .NET Core uygulaması dağıttığınız için tebrik ederiz. Ardından uygulamada değişiklik yapıp yeniden dağıtacağız.
6. Uygulamayı değiştirme
Bu bölümde, uygulamanın örneğin üzerinde çalıştığı ana makineyi gösterecek şekilde değiştirilmesi sağlanır. Bu, yük dengelemenin çalıştığını ve kullanılabilir pod'lerin beklendiği gibi yanıt verdiğini doğrulamanızı sağlar.
Kaynak kodu 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 kapsayıcı resmi oluşturma ve yerel olarak test etme
Yeni kapsayıcı görüntüsünü güncellenmiş kodla oluşturun.
docker build --pull -t aspnetapp:alpine -f Dockerfile.alpine-x64 .
Yeni uygulamayı daha önce olduğu gibi 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
Uygulamaya, daha önce olduğu gibi web önizlemesi kullanılarak erişilebilir. Bu kez, burada gösterildiği gibi Host parametresi görünür olmalıdır:

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
Görüntüyü etiketleyip Kubernetes'te kullanılabilir hale getirmek için gönderin.
Kubernetes'in görüntüyü çekebilmesi için görüntünün etiketlenmesi ve aktarılması gerekir. Öncelikle kapsayıcı görüntülerini listeleyerek başlayın 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, bu görüntüyü etiketleyin ve Google Container Registry'ye aktarın. Yukarıdaki RESİM KİMLİĞİ kullanıldığında bu şöyle 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ğıtın
YAML dosyasını düzenleme
Dosyanın dotnet-app.yaml kaydedildiği dizine geri dönün. YAML dosyasında aşağıdaki satırı bulun
image: mcr.microsoft.com/dotnet/core/samples:aspnetapp
Bu, yukarıda oluşturulan ve gcr.io'ya gönderilen kapsayıcı görüntüsüne referans verecek şekilde değiştirilmelidir.
image: gcr.io/PROJECT_ID/aspnetapp:alpine
PROJECT_ID kullanmak için kodu değiştirmeyi unutmayın. İşlemi tamamladığınızda aşağıdaki gibi görünür.
image: gcr.io/myproject/aspnetapp:alpine
Güncellenen YAML dosyasını uygulama
$ kubectl apply -f dotnet-app.yaml
deployment.apps/dotnet-deployment configured
service/dotnet-service unchanged
Dağıtım kaynağının güncellendiğini, hizmet kaynağının ise değişmediğini fark edin. Güncellenen pod'lar, daha önce olduğu gibi kubectl get pod komutuyla görülebilir ancak bu kez -w komutunu ekleyeceğiz. Bu komut, tüm değişiklikleri gerçekleşirken izleyecektir.
$ 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 çıktı, periyodik güncellemeyi gerçekleşirken gösterir. Öncelikle yeni kapsayıcılar başlatılır ve çalışmaya başladıklarında eski kapsayıcılar sonlandırılır.
Çalışan uygulamayı doğrulama
Bu noktada uygulama güncellenir ve kullanıcı isteklerine hazır hâle gelir. Daha önce olduğu gibi, proxy kullanılarak erişilebilir.
$ kubectl proxy --port 8080
Starting to serve on 127.0.0.1:8080
Web uygulamasına erişmek için Cloud Shell'de web önizlemeyi kullanın.
Web önizleme tarafından oluşturulan URL'ye şunları ekleyin: /api/v1/namespaces/default/services/dotnet-service:8080/proxy/. Bu durumda sonuç aşağıdaki gibi görünür:
https://8080-cs-473655782854-default.us-central1.cloudshell.dev/api/v1/namespaces/default/services/dotnet-service:8080/proxy/
Kubernetes hizmetinin yükü dağıttığını onaylayın
Bu URL'yi birkaç kez yenileyin ve istekler Hizmet tarafından farklı pod'lar arasında yük dengelemesi yapıldıkça ana makinenin değiştiğini fark edin. Tüm kapsüllerin trafik aldığını görmek için ana makine değerlerini yukarıdaki kapsül listesiyle karşılaştırın.
Örneklerin ölçeğini artırma
Kubernetes'te uygulamaları ölçeklendirmek kolaydır. 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 pod'lar 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üller arasında dengelendiğini göreceksiniz.
8. Tebrikler!
Bu laboratuvarda, bir .NET Core örnek web uygulaması geliştirme ortamında doğrulandı ve ardından GKE kullanılarak Kubernetes'e dağıtıldı. Uygulama daha sonra, çalıştığı kapsayıcının ana makine adını gösterecek şekilde değiştirildi. Ardından Kubernetes dağıtımı yeni sürüme güncellendi ve yükün ek örnekler arasında nasıl dağıtıldığını göstermek için uygulamanın ölçeği artırıldı.
.NET ve Kubernetes hakkında daha fazla bilgi edinmek için aşağıdaki eğitimleri inceleyin. Bu laboratuvar, daha gelişmiş yönlendirme ve esneklik kalıpları için Istio hizmet ağını tanıtarak bu laboratuvarda öğrenilenleri temel alır.
9. Temizleme
İstenmeyen maliyetleri önlemek için bu laboratuvarda oluşturulan kümeyi ve kapsayıcı görüntüsünü silmek üzere aşağıdaki komutları kullanın.
gcloud container clusters delete dotnet-cluster --zone ${DEFAULT_ZONE}
gcloud container images delete gcr.io/${PROJECT_ID}/aspnetapp:alpine