1. Tổng quan
.NET Core của Microsoft là một phiên bản đa nền tảng và nguồn mở của .NET, có thể chạy tự nhiên trong vùng chứa. .NET Core có trên GitHub và do Microsoft cùng cộng đồng .NET duy trì. Phòng thí nghiệm này triển khai một ứng dụng .NET Core được đóng gói vào Google Kubernetes Engine (GKE).
Bài thực hành này tuân theo một mô hình phát triển điển hình, trong đó các ứng dụng được phát triển trong môi trường cục bộ của nhà phát triển rồi sau đó được triển khai vào môi trường thực tế. Trong phần đầu tiên của bài thực hành, một ứng dụng .NET Core mẫu sẽ được xác thực bằng cách sử dụng một vùng chứa đang chạy trong Cloud Shell. Sau khi được xác thực, ứng dụng sẽ được triển khai trên Kubernetes bằng GKE. Bài thực hành này bao gồm các bước để tạo một cụm GKE.
Trong phần thứ hai của lớp học lập trình, chúng ta sẽ thực hiện một thay đổi nhỏ đối với ứng dụng để hiển thị tên máy chủ của vùng chứa đang chạy phiên bản ứng dụng đó. Sau đó, ứng dụng đã cập nhật sẽ được xác thực trong Cloud Shell và bản triển khai sẽ được cập nhật để sử dụng phiên bản mới. Hình minh hoạ sau đây cho thấy trình tự các hoạt động trong lớp học lập trình này:

Chi phí
Nếu bạn chạy bài thực hành này đúng như hướng dẫn, thì chi phí thông thường cho các dịch vụ sau sẽ được áp dụng
2. Thiết lập và yêu cầu
Điều kiện tiên quyết
Để hoàn thành bài tập thực hành này, bạn cần có một tài khoản và dự án trên Google Cloud. Để biết hướng dẫn chi tiết hơn về cách tạo dự án mới, hãy tham khảo Lớp học lập trình này.
Phòng thí nghiệm này sử dụng Docker chạy trong Cloud Shell. Bạn có thể truy cập vào Cloud Shell thông qua Google Cloud Console và Cloud Shell đã được định cấu hình sẵn với nhiều công cụ hữu ích, chẳng hạn như gcloud và Docker. Cách truy cập vào Cloud Shell được trình bày dưới đây. Nhấp vào biểu tượng Cloud Shell ở trên cùng bên phải để hiển thị biểu tượng này trong ngăn dưới cùng của cửa sổ bảng điều khiển.

Các lựa chọn cấu hình thay thế cho cụm GKE (không bắt buộc)
Bài thực hành này cần có một cụm Kubernetes. Trong phần tiếp theo, một cụm GKE có cấu hình đơn giản sẽ được tạo. Phần này trình bày một số lệnh gcloud cung cấp các lựa chọn cấu hình thay thế để sử dụng khi xây dựng cụm Kubernetes bằng GKE. Ví dụ: bằng cách sử dụng các lệnh bên dưới, bạn có thể xác định các loại máy, vùng và thậm chí cả GPU (bộ tăng tốc) khác nhau.
- Liệt kê các loại máy bằng lệnh
gcloud compute machine-types listnày - Liệt kê các GPU bằng lệnh
gcloud compute accelerator-types listnày - Liệt kê các vùng điện toán bằng lệnh
gcloud compute zones listnày - Nhận trợ giúp về mọi lệnh gcloud
gcloud container clusters --help- Ví dụ: video này cung cấp thông tin chi tiết về cách tạo một cụm Kubernetes
gcloud container clusters create --help
- Ví dụ: video này cung cấp thông tin chi tiết về cách tạo một cụm Kubernetes
Để xem danh sách đầy đủ các lựa chọn cấu hình cho GKE, hãy xem tài liệu này
Chuẩn bị tạo cụm Kubernetes
Trong Cloud Shell, bạn cần đặt một số biến môi trường và định cấu hình ứng dụng gcloud. Bạn có thể thực hiện việc này bằng các lệnh sau.
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}
Tạo cụm GKE
Vì phòng thí nghiệm này triển khai ứng dụng .NET Core trên Kubernetes, nên bạn cần tạo một cụm. Sử dụng lệnh sau để tạo một cụm Kubernetes mới trong Google Cloud bằng 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-nodeslà số nút cần thêm vào mỗi vùng và có thể điều chỉnh sau--node-locationslà danh sách các vùng được phân tách bằng dấu phẩy. Trong trường hợp này, vùng mà bạn xác định trong biến môi trường ở trên vàus-central1-bsẽ được sử dụng- LƯU Ý: Danh sách này không được chứa các mục trùng lặp
--workload-poolthiết lập Workload Identity để các tải công việc GKE có thể truy cập vào các dịch vụ của Google Cloud
Trong khi cụm đang xây dựng, thông tin sau sẽ xuất hiện
Creating cluster dotnet-cluster in us-central1-b... Cluster is being deployed...⠼
Định cấu hình kubectl
kubectl CLI là cách chính để tương tác với cụm Kubernetes. Để sử dụng kubectl với cụm mới vừa tạo, bạn cần định cấu hình kubectl để xác thực với cụm đó. Bạn có thể thực hiện việc này bằng lệnh sau.
$ gcloud container clusters get-credentials dotnet-cluster --zone ${DEFAULT_ZONE}
Fetching cluster endpoint and auth data.
kubeconfig entry generated for dotnet-cluster.
Giờ đây, bạn có thể sử dụng kubectl để tương tác với cụm.
$ 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. Kiểm thử cục bộ và xác nhận chức năng mong muốn
Phòng thí nghiệm này sử dụng các hình ảnh vùng chứa sau đây từ kho lưu trữ .NET chính thức trên Docker Hub.
Chạy vùng chứa trên máy để xác minh chức năng
Trong Cloud Shell, hãy xác minh rằng Docker đang hoạt động đúng cách và vùng chứa .NET hoạt động như mong đợi bằng cách chạy lệnh Docker sau:
$ 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
Xác nhận chức năng của ứng dụng web
Bạn cũng có thể xác thực một ứng dụng web mẫu trong Cloud Shell. Lệnh chạy Docker bên dưới sẽ tạo một vùng chứa mới hiển thị cổng 80 và liên kết cổng đó với cổng localhost 8080. Hãy nhớ rằng localhost trong trường hợp này nằm trong Cloud Shell.
$ 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
Vì đây là một ứng dụng web nên bạn cần xem và xác thực ứng dụng này trong trình duyệt web. Phần tiếp theo sẽ hướng dẫn cách thực hiện việc đó trong Cloud Shell bằng tính năng Xem trước trên web.
4. Truy cập vào các dịch vụ từ Cloud Shell bằng tính năng "Xem trước trên web"
Cloud Shell cung cấp Bản xem trước trên web, một tính năng cho phép sử dụng trình duyệt để tương tác với các quy trình đang chạy trong phiên bản Cloud Shell.
Sử dụng "Xem trước trên web" để xem các ứng dụng trong Cloud Shell
Trong Cloud Shell, hãy nhấp vào nút xem trước trên web rồi chọn "Xem trước trên cổng 8080" (hoặc bất kỳ cổng nào mà tính năng Xem trước trên web được đặt để sử dụng).

Thao tác này sẽ mở một cửa sổ trình duyệt có địa chỉ như sau:
https://8080-cs-754738286554-default.us-central1.cloudshell.dev/
Xem ứng dụng mẫu .NET bằng tính năng Xem trước trên web
Giờ đây, bạn có thể xem ứng dụng mẫu đã khởi động ở bước trước bằng cách khởi động tính năng Xem trước trên web và tải URL được cung cấp. Đoạn mã sẽ trông giống như sau:

5. Triển khai lên Kubernetes
Tạo tệp YAML và áp dụng
Bước tiếp theo yêu cầu một tệp YAML mô tả hai tài nguyên Kubernetes, một Deployment và một Service. Tạo một tệp có tên là dotnet-app.yaml trong Cloud Shell rồi thêm nội dung sau vào tệp đó.
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
Bây giờ, hãy dùng kubectl để áp dụng tệp này cho kubernetes.
$ kubectl apply -f dotnet-app.yaml
deployment.apps/dotnet-deployment created
service/dotnet-service created
Hãy lưu ý các thông báo cho biết tài nguyên mong muốn đã được tạo.
Khám phá các tài nguyên thu được
Chúng ta có thể sử dụng CLI kubectl để kiểm tra các tài nguyên đã được tạo ở trên. Trước tiên, hãy xem tài nguyên Triển khai và xác nhận rằng quá trình triển khai mới đã có ở đó.
$ kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
dotnet-deployment 3/3 3 3 80s
Tiếp theo, hãy xem ReplicaSets. Sẽ có một ReplicaSet được tạo bằng quá trình triển khai ở trên.
$ kubectl get replicaset
NAME DESIRED CURRENT READY AGE
dotnet-deployment-5c9d4cc4b9 3 3 3 111s
Cuối cùng, hãy xem Pods. Deployment cho biết cần có 3 thực thể. Lệnh dưới đây sẽ cho thấy có 3 thực thể. Tuỳ chọn -o wide được thêm vào để hiển thị các nút nơi các thực thể đó đang chạy.
$ 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>
Xem tài nguyên Dịch vụ
Tài nguyên Dịch vụ trong Kubernetes là một trình cân bằng tải. Các điểm cuối được xác định bằng nhãn trên Pod. Bằng cách này, ngay khi các Pod mới được thêm vào quá trình triển khai thông qua thao tác kubectl scale deployment ở trên, các Pod kết quả sẽ ngay lập tức sẵn sàng cho các yêu cầu do Dịch vụ đó xử lý.
Lệnh sau đây sẽ hiển thị tài nguyên Dịch vụ.
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
dotnet-service ClusterIP 10.20.9.124 <none> 8080/TCP 2m50s
...
Bạn có thể xem thêm thông tin chi tiết về Dịch vụ bằng lệnh sau.
$ 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>
Lưu ý rằng Dịch vụ thuộc loại ClusterIP. Điều này có nghĩa là bất kỳ Pod nào trong cụm đều có thể phân giải tên Dịch vụ, dotnet-service thành địa chỉ IP của dịch vụ đó. Các yêu cầu được gửi đến dịch vụ sẽ được cân bằng tải trên tất cả các thực thể (Pod). Giá trị Endpoints ở trên cho biết IP của các Pod hiện có cho dịch vụ này. So sánh các IP này với IP của Pod được xuất ở trên.
Xác minh ứng dụng đang chạy
Tại thời điểm này, ứng dụng đã hoạt động và sẵn sàng cho các yêu cầu của người dùng. Để truy cập, hãy sử dụng proxy. Lệnh sau đây tạo một proxy cục bộ chấp nhận các yêu cầu trên cổng 8080 và chuyển các yêu cầu đó đến cụm Kubernetes.
$ kubectl proxy --port 8080
Starting to serve on 127.0.0.1:8080
Bây giờ, hãy sử dụng tính năng Xem trước trên web trong Cloud Shell để truy cập vào ứng dụng web.
Thêm nội dung sau vào URL do Bản xem trước web tạo: /api/v1/namespaces/default/services/dotnet-service:8080/proxy/. Kết quả sẽ có dạng như sau:
https://8080-cs-473655782854-default.us-central1.cloudshell.dev/api/v1/namespaces/default/services/dotnet-service:8080/proxy/
Chúc mừng bạn đã triển khai thành công một ứng dụng .NET Core trên Google Kubernetes Engine. Tiếp theo, chúng ta sẽ thực hiện thay đổi đối với ứng dụng và triển khai lại.
6. Sửa đổi ứng dụng
Trong phần này, ứng dụng sẽ được sửa đổi để hiển thị máy chủ lưu trữ mà thực thể đang chạy. Việc này sẽ giúp bạn xác nhận rằng tính năng cân bằng tải đang hoạt động và các Pod hiện có đang phản hồi như mong đợi.
Lấy mã nguồn
git clone https://github.com/dotnet/dotnet-docker.git
cd dotnet-docker/samples/aspnetapp/
Cập nhật ứng dụng để thêm tên máy chủ lưu trữ
vi aspnetapp/Pages/Index.cshtml
<tr>
<td>Host</td>
<td>@Environment.MachineName</td>
</tr>
Tạo một hình ảnh vùng chứa mới và kiểm thử cục bộ
Tạo hình ảnh vùng chứa mới bằng mã đã cập nhật.
docker build --pull -t aspnetapp:alpine -f Dockerfile.alpine-x64 .
Như trước, hãy kiểm thử ứng dụng mới trên máy cục bộ
$ 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
Như trước đây, bạn có thể truy cập vào ứng dụng bằng tính năng Xem trước trên web. Lần này, tham số Host sẽ xuất hiện như minh hoạ dưới đây:

Mở một thẻ mới trong Cloud Shell và chạy docker ps để xem mã nhận dạng vùng chứa có khớp với giá trị Máy chủ lưu trữ hiển thị ở trên hay không.
$ 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ắn thẻ và đẩy hình ảnh để Kubernetes có thể sử dụng
Hình ảnh cần được gắn thẻ và đẩy để Kubernetes có thể lấy hình ảnh đó. Bắt đầu bằng cách liệt kê các hình ảnh vùng chứa và xác định hình ảnh mong muốn.
$ docker image list
REPOSITORY TAG IMAGE ID CREATED SIZE
aspnetapp alpine 95b4267bb6d0 6 days ago 110MB
Tiếp theo, hãy gắn thẻ hình ảnh đó và đẩy hình ảnh đó vào Google Container Registry. Khi sử dụng mã nhận dạng hình ảnh ở trên, mã sẽ có dạng như sau
docker tag 95b4267bb6d0 gcr.io/${PROJECT_ID}/aspnetapp:alpine
docker push gcr.io/${PROJECT_ID}/aspnetapp:alpine
7. Triển khai lại ứng dụng đã cập nhật
Chỉnh sửa tệp YAML
Quay lại thư mục lưu tệp dotnet-app.yaml. Tìm dòng sau trong tệp YAML
image: mcr.microsoft.com/dotnet/core/samples:aspnetapp
Bạn cần thay đổi giá trị này để tham chiếu đến hình ảnh vùng chứa đã được tạo và đẩy vào gcr.io ở trên.
image: gcr.io/PROJECT_ID/aspnetapp:alpine
Đừng quên sửa đổi để sử dụng PROJECT_ID của bạn. Khi bạn hoàn tất, tệp sẽ có dạng như sau
image: gcr.io/myproject/aspnetapp:alpine
Áp dụng tệp YAML đã cập nhật
$ kubectl apply -f dotnet-app.yaml
deployment.apps/dotnet-deployment configured
service/dotnet-service unchanged
Lưu ý rằng tài nguyên Triển khai cho thấy trạng thái đã cập nhật và tài nguyên Dịch vụ cho thấy trạng thái không thay đổi. Bạn có thể xem các Pod đã cập nhật như trước bằng lệnh kubectl get pod, nhưng lần này, chúng ta sẽ thêm -w để theo dõi tất cả thay đổi khi chúng xảy ra.
$ 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
Kết quả ở trên cho thấy bản cập nhật cuốn chiếu khi nó diễn ra. Đầu tiên, các vùng chứa mới được khởi động và khi chúng đang chạy, các vùng chứa cũ sẽ bị chấm dứt.
Xác minh ứng dụng đang chạy
Tại thời điểm này, ứng dụng đã được cập nhật và sẵn sàng cho các yêu cầu của người dùng. Như trước đây, bạn có thể truy cập vào trang web này bằng proxy.
$ kubectl proxy --port 8080
Starting to serve on 127.0.0.1:8080
Bây giờ, hãy sử dụng tính năng Xem trước trên web trong Cloud Shell để truy cập vào ứng dụng web.
Thêm nội dung sau vào URL do Bản xem trước web tạo: /api/v1/namespaces/default/services/dotnet-service:8080/proxy/. Kết quả sẽ có dạng như sau:
https://8080-cs-473655782854-default.us-central1.cloudshell.dev/api/v1/namespaces/default/services/dotnet-service:8080/proxy/
Xác nhận rằng Kubernetes Service đang phân phối tải
Làm mới URL này vài lần và nhận thấy rằng Máy chủ lưu trữ thay đổi khi các yêu cầu được cân bằng tải trên các Nhóm khác nhau theo Dịch vụ. So sánh các giá trị Máy chủ với danh sách Pod ở trên để thấy rằng tất cả Pod đều đang nhận lưu lượng truy cập.
Tăng số lượng thực thể
Việc mở rộng quy mô ứng dụng trong Kubernetes rất dễ dàng. Lệnh sau đây sẽ tăng quy mô triển khai lên 6 phiên bản của ứng dụng.
$ kubectl scale deployment dotnet-deployment --replicas 6
deployment.apps/dotnet-deployment scaled
Bạn có thể xem các Pod mới và trạng thái hiện tại của chúng bằng lệnh này
kubectl get pod -w
Hãy lưu ý rằng khi làm mới cùng một cửa sổ trình duyệt, bạn sẽ thấy lưu lượng truy cập hiện đang được cân bằng trên tất cả các Pod mới.
8. Xin chúc mừng!
Trong lớp học này, một ứng dụng web mẫu .NET Core đã được xác thực trong môi trường phát triển và sau đó được triển khai cho Kubernetes bằng GKE. Sau đó, ứng dụng được sửa đổi để hiển thị tên máy chủ của vùng chứa mà ứng dụng đang chạy. Sau đó, bản triển khai Kubernetes được cập nhật lên phiên bản mới và ứng dụng được mở rộng quy mô để minh hoạ cách phân phối tải trên các thực thể bổ sung.
Để tìm hiểu thêm về .NET và Kubernetes, hãy tham khảo các hướng dẫn sau. Các bài học này được xây dựng dựa trên những gì đã học được trong lớp học lập trình này bằng cách giới thiệu Istio Service Mesh để có các mẫu định tuyến và khả năng phục hồi tinh vi hơn.
9. Dọn dẹp
Để tránh phát sinh chi phí ngoài ý muốn, hãy dùng các lệnh sau để xoá cụm và hình ảnh vùng chứa đã được tạo trong phòng thí nghiệm này.
gcloud container clusters delete dotnet-cluster --zone ${DEFAULT_ZONE}
gcloud container images delete gcr.io/${PROJECT_ID}/aspnetapp:alpine