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:
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.
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
- Örneğin, bu görselde bir Kubernetes kümesi oluşturma hakkında ayrıntılı bilgi verilmektedir.
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 veus-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ı).
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:
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'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