1. Tổng quan
ASP.NET Core là một khung nguồn mở và đa nền tảng mới dùng để xây dựng các ứng dụng hiện đại dựa trên đám mây và kết nối Internet bằng ngôn ngữ lập trình C#.
Kubernetes là một dự án nguồn mở có thể chạy trên nhiều môi trường, từ máy tính xách tay cho đến cụm nhiều nút có khả năng hoạt động cao, từ đám mây công cộng đến triển khai tại chỗ, từ máy ảo đến kim loại trần.
Trong phòng thí nghiệm này, bạn sẽ triển khai một ứng dụng ASP.NET Core đơn giản cho Kubernetes chạy trên Kubernetes Engine. Lớp học lập trình này dựa trên lớp học lập trình Xây dựng và khởi chạy ứng dụng ASP.NET Core trong Google Cloud Shell. Bạn có thể thực hiện phòng thí nghiệm đó trước trước khi thử phòng thí nghiệm này.
Mục tiêu của lớp học lập trình này là giúp bạn biến đoạn mã của mình (một ứng dụng Hello World ASP.NET Core đơn giản tại đây) thành một ứng dụng được sao chép trên Kubernetes. Bạn lấy mã đã phát triển trên máy, biến mã đó thành hình ảnh vùng chứa Docker, rồi chạy hình ảnh đó trên Google Kubernetes Engine.
Dưới đây là sơ đồ gồm các phần đang hoạt động trong lớp học lập trình này để giúp bạn hiểu cách các thành phần kết hợp với nhau. Hãy dùng nội dung này làm tài liệu tham khảo khi tham gia lớp học lập trình; mọi thông tin sẽ có ý nghĩa vào thời điểm cuối cùng (nhưng tạm thời hãy bỏ qua phần này).
Để phục vụ mục đích của lớp học lập trình này, việc sử dụng một môi trường được quản lý như Kubernetes Engine (phiên bản Kubernetes chạy trên Compute Engine do Google lưu trữ) cho phép bạn tập trung nhiều hơn vào việc trải nghiệm Kubernetes thay vì thiết lập cơ sở hạ tầng cơ bản.
Nếu muốn chạy Kubernetes trên máy cục bộ, chẳng hạn như máy tính xách tay phát triển, bạn nên cân nhắc sử dụng Minikube. Giải pháp này cung cấp cách thiết lập đơn giản cho một cụm kubernetes nút duy nhất cho mục đích phát triển và thử nghiệm. Bạn có thể dùng Minikube để tham gia lớp học lập trình này nếu muốn.
Kiến thức bạn sẽ học được
- Cách đóng gói một ứng dụng ASP.NET Core đơn giản dưới dạng vùng chứa Docker.
- Cách tạo cụm Kubernetes trên Google Kubernetes Engine (GKE).
- Cách triển khai ứng dụng ASP.NET Core cho một nhóm.
- Cách cho phép lưu lượng truy cập từ bên ngoài vào nhóm của bạn.
- Cách mở rộng quy mô dịch vụ và triển khai bản nâng cấp.
- Cách chạy trang tổng quan đồ hoạ của Kubernetes.
Bạn cần có
Bạn sẽ sử dụng hướng dẫn này như thế nào?
Bạn đánh giá thế nào về trải nghiệm sử dụng Google Cloud Platform?
2. Thiết lập và yêu cầu
Thiết lập môi trường theo tiến độ riêng
- Đăng nhập vào Google Cloud Console rồi tạo dự án mới hoặc sử dụng lại dự án hiện có. Nếu chưa có tài khoản Gmail hoặc Google Workspace, bạn phải tạo một tài khoản.
- Tên dự án là tên hiển thị của những người tham gia dự án này. Đây là một chuỗi ký tự không được API của Google sử dụng. Bạn có thể cập nhật thông tin này bất cứ lúc nào.
- Mã dự án phải là duy nhất trong tất cả các dự án Google Cloud và không thể thay đổi (bạn không thể thay đổi mã này sau khi đặt). Cloud Console sẽ tự động tạo một chuỗi duy nhất; thường bạn không quan tâm đến sản phẩm đó là gì. Trong hầu hết các lớp học lập trình, bạn sẽ cần tham chiếu đến Mã dự án (mã này thường được xác định là
PROJECT_ID
). Nếu không thích mã đã tạo, bạn có thể tạo một mã nhận dạng ngẫu nhiên khác. Ngoài ra, bạn có thể thử phương pháp của riêng mình và xem có được cung cấp hay không. Bạn không thể thay đổi thông tin này sau bước này và thông báo đó sẽ vẫn tồn tại trong thời gian của dự án. - Đối với thông tin của bạn, có giá trị thứ ba, Project Number (Số dự án) mà một số API sử dụng. Tìm hiểu thêm về cả ba giá trị này trong tài liệu này.
- Tiếp theo, bạn sẽ phải bật tính năng thanh toán trong Cloud Console để sử dụng API/tài nguyên trên đám mây. Việc chạy qua lớp học lập trình này sẽ không tốn nhiều chi phí. Để tắt các tài nguyên nhằm tránh bị tính phí ngoài hướng dẫn này, bạn có thể xoá các tài nguyên bạn đã tạo hoặc xoá toàn bộ dự án. Người dùng mới của Google Cloud đủ điều kiện tham gia chương trình Dùng thử miễn phí 300 USD.
Khởi động Cloud Shell
Mặc dù bạn có thể vận hành Google Cloud từ xa trên máy tính xách tay, nhưng trong lớp học lập trình này, bạn sẽ sử dụng Google Cloud Shell, một môi trường dòng lệnh chạy trong Đám mây.
Kích hoạt Cloud Shell
- Trong Cloud Console, hãy nhấp vào Kích hoạt Cloud Shell .
Nếu trước đây bạn chưa từng khởi động Cloud Shell, thì bạn sẽ thấy một màn hình trung gian (dưới màn hình đầu tiên) mô tả về ứng dụng này. Nếu trường hợp đó xảy ra, hãy nhấp vào Tiếp tục (và bạn sẽ không thấy thông báo đó nữa). Màn hình một lần đó sẽ có dạng như sau:
Quá trình cấp phép và kết nối với Cloud Shell chỉ mất vài phút.
Máy ảo này chứa tất cả các công cụ phát triển mà bạn cần. Dịch vụ này cung cấp thư mục gốc 5 GB ổn định và chạy trong Google Cloud, giúp nâng cao đáng kể hiệu suất và khả năng xác thực của mạng. Trong lớp học lập trình này, đa số mọi người đều có thể thực hiện chỉ bằng một trình duyệt hoặc Chromebook.
Sau khi kết nối với Cloud Shell, bạn sẽ thấy mình đã được xác thực và dự án đã được đặt thành mã dự án.
- Chạy lệnh sau trong Cloud Shell để xác nhận rằng bạn đã được xác thực:
gcloud auth list
Kết quả lệnh
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- Chạy lệnh sau trong Cloud Shell để xác nhận rằng lệnh gcloud biết về dự án của bạn:
gcloud config list project
Kết quả lệnh
[core] project = <PROJECT_ID>
Nếu chưa, bạn có thể thiết lập chế độ này bằng lệnh sau:
gcloud config set project <PROJECT_ID>
Kết quả lệnh
Updated property [core/project].
3. Tạo ứng dụng ASP.NET Core trong Cloud Shell
Trong dấu nhắc của Cloud Shell, bạn có thể kiểm tra phiên bản của công cụ dòng lệnh Dotnet đã được cài đặt. Thao tác này sẽ in phiên bản của công cụ dòng lệnh Dotnet đã cài đặt:
dotnet --version
Tiếp theo, hãy tạo ứng dụng web ASP.NET Core mới.
dotnet new mvc -o HelloWorldAspNetCore
Thao tác này sẽ tạo một dự án và khôi phục các phần phụ thuộc của dự án đó. Bạn sẽ thấy một thông báo tương tự như bên dưới.
Restore completed in 11.44 sec for HelloWorldAspNetCore.csproj.
Restore succeeded.
4. Chạy ứng dụng ASP.NET Core
Chúng ta gần như đã sẵn sàng chạy ứng dụng. Chuyển đến thư mục ứng dụng.
cd HelloWorldAspNetCore
Cuối cùng, hãy chạy ứng dụng.
dotnet run --urls=http://localhost:8080
Ứng dụng bắt đầu nghe trên cổng 8080.
Hosting environment: Production
Content root path: /home/atameldev/HelloWorldAspNetCore
Now listening on: http://[::]:8080
Application started. Press Ctrl+C to shut down.
Để xác minh rằng ứng dụng đang chạy, nhấp vào nút xem trước trên web ở trên cùng bên phải và chọn "Xem trước trên cổng 8080".
Bạn sẽ thấy trang web ASP.NET Core mặc định:
Sau khi bạn xác minh rằng ứng dụng đang chạy, hãy nhấn tổ hợp phím Ctrl+C để tắt ứng dụng.
5. Đóng gói ứng dụng ASP.NET Core dưới dạng vùng chứa Docker
Tiếp theo, hãy chuẩn bị để ứng dụng của bạn chạy dưới dạng vùng chứa. Bước đầu tiên là xác định vùng chứa và nội dung của vùng chứa đó.
Trong thư mục cơ sở của ứng dụng, hãy tạo một Dockerfile
để xác định hình ảnh Docker.
touch Dockerfile
Thêm nội dung sau đây vào Dockerfile
bằng trình chỉnh sửa bạn yêu thích (vim,
nano,emacs
hoặc trình soạn thảo mã của Cloud Shell).
# Use Microsoft's official build .NET image. # https://hub.docker.com/_/microsoft-dotnet-core-sdk/ FROM mcr.microsoft.com/dotnet/sdk:6.0-alpine AS build WORKDIR /app # Install production dependencies. # Copy csproj and restore as distinct layers. COPY *.csproj ./ RUN dotnet restore # Copy local code to the container image. COPY . ./ WORKDIR /app # Build a release artifact. RUN dotnet publish -c Release -o out # Use Microsoft's official runtime .NET image. # https://hub.docker.com/_/microsoft-dotnet-core-aspnet/ FROM mcr.microsoft.com/dotnet/aspnet:6.0-alpine-amd64 AS runtime WORKDIR /app COPY --from=build /app/out ./ # Make sure the app binds to port 8080 ENV ASPNETCORE_URLS http://*:8080 # Run the web service on container startup. ENTRYPOINT ["dotnet", "HelloWorldAspNetCore.dll"]
Một cấu hình quan trọng có trong Dockerfile của bạn là cổng nơi ứng dụng nghe lưu lượng truy cập đến (8080). Bạn có thể thực hiện việc này bằng cách đặt biến môi trường ASPNETCORE_URLS
mà các ứng dụng ASP.NET Core dùng để xác định cổng nào cần nghe.
Lưu Dockerfile
này. Bây giờ, hãy tạo hình ảnh:
docker build -t gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v1 .
Sau khi quá trình này hoàn tất (sẽ mất chút thời gian để tải xuống và giải nén mọi thứ), bạn có thể thấy hình ảnh đã được tạo và lưu trên thiết bị:
docker images REPOSITORY TAG gcr.io/yourproject-XXXX/hello-dotnet v1
Kiểm thử hình ảnh cục bộ bằng lệnh sau để chạy vùng chứa Docker cục bộ trên cổng 8080 từ hình ảnh vùng chứa mới tạo của bạn:
docker run -p 8080:8080 gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v1
Và một lần nữa tận dụng tính năng xem trước trên web của CloudShell :
Bạn sẽ thấy trang web ASP.NET Core mặc định trong thẻ mới.
Sau khi xác minh rằng ứng dụng đang chạy bình thường trong vùng chứa Docker, bạn có thể dừng vùng chứa đang chạy chậm nhất vào Ctrl-> C
.
Bây giờ, hình ảnh đã hoạt động đúng như dự tính, bạn có thể đẩy hình ảnh này vào Google Container Registry, một kho lưu trữ riêng cho các hình ảnh Docker của bạn có thể truy cập được từ mọi dự án Google Cloud (cũng như từ bên ngoài Google Cloud Platform) :
docker push gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v1
Nếu mọi việc suôn sẻ và sau một thời gian, bạn sẽ có thể thấy hình ảnh vùng chứa được liệt kê trong mục Đăng ký vùng chứa. Đến đây, bạn đã có hình ảnh Docker trên toàn dự án mà Kubernetes có thể truy cập và sắp xếp như bạn sẽ thấy sau vài phút.
Nếu muốn, bạn có thể di chuyển qua những hình ảnh vùng chứa vì chúng được lưu trữ trong Google Cloud Storage bằng cách truy cập vào đường liên kết này: https://console.cloud.google.com/storage/browser/ (đường liên kết đầy đủ sẽ có dạng sau: https://console.cloud.google.com/project/PROJECT_ID/storage/browser/).
6. Tạo cụm Kubernetes
Được rồi. Giờ đây, bạn đã sẵn sàng tạo cụm GKE. Tuy nhiên, trước đó, hãy chuyển đến mục Google Kubernetes Engine của bảng điều khiển web rồi đợi hệ thống khởi động (chỉ mất vài giây).
Một cụm bao gồm một máy chủ API chính của Kubernetes do Google quản lý và một tập hợp các nút worker. Các nút worker là máy ảo Compute Engine.
Hãy sử dụng CLI gcloud
trong phiên CloudShell của bạn để tạo một cụm. Điều chỉnh vùng của bạn đến vị trí gần bạn ( danh sách các vùng). Quá trình này sẽ mất vài phút để hoàn tất:
gcloud container clusters create hello-dotnet-cluster --cluster-version=latest --num-nodes 4 --zone europe-west1-b
Cuối cùng, bạn sẽ thấy cụm đã tạo.
Creating cluster hello-dotnet-cluster...done. Created [https://container.googleapis.com/v1/projects/dotnet-atamel/zones/europe-west1-b/clusters/hello-dotnet-cluster]. kubeconfig entry generated for hello-dotnet-cluster. NAME ZONE MASTER_VERSION hello-dotnet-cluster europe-west1-b 1.10.7-gke.6
Giờ đây, bạn sẽ có một cụm Kubernetes với đầy đủ chức năng do Google Kubernetes Engine cung cấp:
Đã đến lúc triển khai ứng dụng trong vùng chứa của riêng bạn cho cụm Kubernetes! Từ giờ trở đi, bạn sẽ sử dụng dòng lệnh kubectl
(đã thiết lập trong môi trường Cloud Shell). Phần còn lại của lớp học lập trình này yêu cầu cả phiên bản ứng dụng và máy chủ của kubernetes đều phải từ 1.2 trở lên. kubectl version
sẽ cho bạn thấy phiên bản hiện tại của lệnh.
7. Tạo quá trình triển khai
Nhóm kubernetes là một nhóm các vùng chứa, được liên kết với nhau nhằm mục đích quản trị và kết nối mạng. Nó có thể chứa một hoặc nhiều vùng chứa. Tại đây, bạn chỉ cần sử dụng một vùng chứa được tạo bằng hình ảnh ASP.NET Core được lưu trữ trong sổ đăng ký vùng chứa riêng của bạn. Cổng này sẽ phân phát nội dung trên cổng 8080.
Tạo tệp hello-dotnet.yaml
bằng trình chỉnh sửa bạn yêu thích (vim, nano,emacs
hoặc trình soạn thảo mã của Cloud Shell) và xác định Triển khai Kubernetes cho nhóm:
apiVersion: apps/v1 kind: Deployment metadata: labels: run: hello-dotnet name: hello-dotnet namespace: default spec: replicas: 1 selector: matchLabels: run: hello-dotnet template: metadata: labels: run: hello-dotnet spec: containers: - name: hello-dotnet image: gcr.io/YOUR-PROJECT-ID/hello-dotnet:v1 imagePullPolicy: IfNotPresent ports: - containerPort: 8080
Triển khai cho không gian tên mặc định bằng kubectl
:
kubectl apply -f hello-dotnet.yaml
deployment.apps/hello-dotnet created
Như bạn có thể thấy, bạn đã tạo một đối tượng implementation (triển khai). Bạn nên sử dụng triển khai để tạo và mở rộng các nhóm. Ở đây, quy trình triển khai mới quản lý một bản sao nhóm duy nhất chạy hình ảnh hello-dotnet:v1
.
Để xem phiên bản triển khai bạn vừa tạo, bạn chỉ cần chạy:
kubectl get deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE hello-dotnet 1 1 1 1 37s
Để xem nhóm được tạo bởi quá trình triển khai, hãy chạy lệnh sau:
kubectl get pods
NAME READY STATUS RESTARTS AGE hello-dotnet-714049816-ztzrb 1/1 Running 0 57s
Bây giờ là thời điểm thích hợp để chạy qua một số lệnh kubectl
thú vị (không có lệnh nào trong số này sẽ thay đổi trạng thái của cụm, tài liệu đầy đủ có tại đây):
kubectl get pods kubectl cluster-info kubectl config view kubectl get events kubectl logs <pod-name>
Tại thời điểm này, bạn nên chạy vùng chứa dưới sự kiểm soát của Kubernetes nhưng vẫn phải làm cho vùng chứa có thể tiếp cận với thế giới bên ngoài.
8. Cho phép lưu lượng truy cập bên ngoài
Theo mặc định, chỉ IP nội bộ của nhóm trong cụm mới có thể truy cập vào nhóm. Để có thể truy cập vào vùng chứa hello-dotnet
từ bên ngoài mạng ảo kubernetes, bạn phải hiển thị nhóm quảng cáo dưới dạng một dịch vụ của kubernetes.
Trên Cloud Shell, bạn có thể hiển thị nhóm này trên Internet công cộng bằng lệnh kubectl expose
kết hợp với cờ --type="LoadBalancer"
. Cờ này là bắt buộc để tạo IP có thể truy cập từ bên ngoài :
kubectl expose deployment hello-dotnet --type="LoadBalancer" --port=8080
Cờ dùng trong lệnh này chỉ rõ rằng bạn sẽ sử dụng trình cân bằng tải do cơ sở hạ tầng cơ bản cung cấp (trong trường hợp này là Trình cân bằng tải của Compute Engine). Xin lưu ý rằng bạn sẽ hiển thị quá trình triển khai chứ không phải trực tiếp cho nhóm. Điều này sẽ khiến dịch vụ cuối cùng cân bằng lưu lượng truy cập trên tất cả các nhóm được triển khai quản lý (trong trường hợp này, chỉ có 1 nhóm, nhưng bạn sẽ thêm các bản sao khác sau).
Bậc thầy Kubernetes tạo trình cân bằng tải và các quy tắc chuyển tiếp Compute Engine, nhóm mục tiêu và quy tắc tường lửa có liên quan để giúp người dùng có thể sử dụng dịch vụ hoàn toàn từ bên ngoài Google Cloud Platform.
Để tìm địa chỉ IP có thể truy cập công khai của dịch vụ, bạn chỉ cần yêu cầu kubectl
liệt kê tất cả các dịch vụ cụm:
kubectl get services
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello-dotnet 10.3.253.62 104.155.20.69 8080/TCP 1m kubernetes 10.3.240.1 <none> 443/TCP 5m
Lưu ý rằng có 2 địa chỉ IP được liệt kê cho dịch vụ của bạn, cả hai đều cung cấp cổng 8080
. Một là IP nội bộ chỉ hiển thị trong mạng ảo trên đám mây của bạn; hai là IP cân bằng tải bên ngoài. Trong ví dụ này, địa chỉ IP bên ngoài là 104.155.20.69
.
Bây giờ, bạn có thể truy cập dịch vụ bằng cách trỏ trình duyệt của bạn tới địa chỉ sau: http://<EXTERNAL_IP>
:8080
Tại thời điểm này, bạn đã có được ít nhất một số tính năng từ việc di chuyển sang vùng chứa và Kubernetes. Bạn không cần chỉ định máy chủ nào sẽ chạy khối lượng công việc của mình và bạn cũng có thể hưởng lợi từ việc giám sát và khởi động lại dịch vụ. Hãy xem bạn có thể thu được những lợi ích gì khác từ cơ sở hạ tầng Kubernetes mới của mình.
9. Mở rộng quy mô dịch vụ
Một trong những tính năng mạnh mẽ mà Kubernetes cung cấp là dễ dàng mở rộng quy mô ứng dụng. Giả sử đột nhiên bạn cần thêm dung lượng cho ứng dụng của mình; bạn chỉ cần yêu cầu bộ kiểm soát sao chép quản lý số lượng bản sao mới cho nhóm của mình:
kubectl scale deployment hello-dotnet --replicas=4
kubectl get deployment NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE hello-dotnet 4 4 4 3 16m
kubectl get pods NAME READY STATUS RESTARTS AGE hello-dotnet-714049816-g4azy 1/1 Running 0 1m hello-dotnet-714049816-rk0u6 1/1 Running 0 1m hello-dotnet-714049816-sh812 1/1 Running 0 1m hello-dotnet-714049816-ztzrb 1/1 Running 0 16m
Lưu ý về phương pháp khai báo ở đây – thay vì bắt đầu hoặc dừng các thực thể mới, bạn sẽ khai báo số lượng thực thể sẽ chạy tại mọi thời điểm. Vòng lặp điều chỉnh của Kubernetes chỉ cần đảm bảo rằng thông tin thực tế khớp với yêu cầu của bạn và xử lý nếu cần.
Dưới đây là sơ đồ tóm tắt trạng thái của cụm Kubernetes:
Bạn cũng có thể thu hẹp quy mô dịch vụ của mình rất dễ dàng. Sau đây là cách bạn giảm quy mô từ 4 nhóm xuống 2 nhóm.
kubectl scale deployment hello-dotnet --replicas=2
kubectl get pods
NAME READY STATUS RESTARTS AGE hello-dotnet-714049816-g4azy 1/1 Running 0 1m hello-dotnet-714049816-rk0u6 1/1 Running 0 1m
10. Kiểm tra khả năng phục hồi
Kubernetes (hay cụ thể hơn là ReplicaSet) theo dõi các nhóm của bạn và nếu nhóm bị lỗi và nhóm bị ngừng hoạt động, thì nhóm sẽ tạo ngay một nhóm mới. Hãy cùng kiểm thử và xem cách hoạt động.
Trước tiên, hãy lấy danh sách các nhóm:
kubectl get pods
NAME READY STATUS RESTARTS AGE hello-dotnet-714049816-g4azy 1/1 Running 0 1m hello-dotnet-714049816-rk0u6 1/1 Running 0 1m
Xoá một trong các nhóm bằng cách truyền tên nhóm:
kubectl delete pod hello-dotnet-714049816-g4azy
Nếu xem lại danh sách nhóm, bạn sẽ thấy một nhóm mới được tạo và chạy lại ngay lập tức:
kubectl get pods
NAME READY STATUS RESTARTS AGE hello-dotnet-714049816-abczy 1/1 ContainerCreating 0 1m hello-dotnet-714049816-rk0u6 1/1 Running 0 1m
11. Ra mắt bản nâng cấp cho dịch vụ của bạn
Tại một số thời điểm, ứng dụng mà bạn đã triển khai phát hành công khai sẽ yêu cầu sửa lỗi hoặc bổ sung tính năng. Hãy xem quy trình đó diễn ra như thế nào.
Trước tiên, hãy cùng sửa đổi ứng dụng. Mở trình soạn thảo mã của Cloud Shell.
Hãy chuyển đến Index.cshtml
trong HelloWorldAspNetCore > Views > Home
rồi cập nhật một trong các tin nhắn băng chuyền.
Tìm dòng sau:
Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core
Và thay đổi thành như sau:
Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core on Google Cloud
Lưu nội dung thay đổi rồi quay lại Cloud Shell. Bên trong HelloWorldAspNetCore,
, hãy tạo hình ảnh Docker:
docker build -t gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v2 .
Sau đó, đẩy đến Container Registry (Sổ đăng ký vùng chứa):
docker push gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v2
Giờ đây, bạn đã sẵn sàng để Kubernetes cập nhật bộ điều khiển sao chép lên phiên bản mới một cách suôn sẻ. Để thay đổi nhãn hình ảnh cho vùng chứa đang chạy, bạn cần chỉnh sửa hello-dotnet deployment
hiện tại và thay đổi hình ảnh từ gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v1
thành gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v2
.
Để thực hiện việc này, bạn cần sử dụng lệnh kubectl edit
. Thao tác này sẽ mở một trình chỉnh sửa văn bản cho thấy toàn bộ cấu hình yaml triển khai. Bạn không cần phải hiểu cấu hình yaml đầy đủ ngay bây giờ, mà chỉ cần hiểu rằng bằng cách cập nhật trường spec.template.spec.containers.image
trong cấu hình, bạn đang yêu cầu triển khai cập nhật các nhóm để sử dụng hình ảnh mới.
kubectl edit deployment hello-dotnet
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: "1"
creationTimestamp: 2017-01-06T10:05:28Z
generation: 3
labels:
run: hello-dotnet
name: hello-dotnet
namespace: default
resourceVersion: "151017"
selfLink: /apis/extensions/v1beta1/namespaces/default/deployments/hello-dotnet
uid: 981fe302-f1e9-11e5-9a78-42010af00005
spec:
replicas: 4
selector:
matchLabels:
run: hello-dotnet
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
run: hello-dotnet
spec:
containers:
- image: gcr.io/PROJECT_ID/hello-dotnet:v1 # Update this line
imagePullPolicy: IfNotPresent
name: hello-dotnet
ports:
- containerPort: 8080
protocol: TCP
resources: {}
terminationMessagePath: /dev/termination-log
dnsPolicy: ClusterFirst
restartPolicy: Always
securityContext: {}
terminationGracePeriodSeconds: 30
Sau khi thực hiện thay đổi, hãy lưu và đóng tệp (thao tác này sử dụng vi, vì vậy, nhấn "Esc" sau đó nhập :wq
và nhấn phím "Enter").
deployment "hello-dotnet" edited
Thao tác này sẽ cập nhật hoạt động triển khai bằng hình ảnh mới, khiến các nhóm mới được tạo với hình ảnh mới và các nhóm cũ sẽ bị xoá.
kubectl get deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
hello-dotnet 4 5 4 3 1h
Trong khi quá trình này diễn ra, người dùng các dịch vụ sẽ không thấy bất kỳ sự gián đoạn nào. Sau giây lát, họ sẽ bắt đầu truy cập vào phiên bản mới của ứng dụng.
Bạn có thể xem thêm thông tin chi tiết về nội dung cập nhật được cập nhật trong tài liệu về Kerberos.
Hy vọng với những tính năng triển khai, mở rộng và cập nhật này, bạn sẽ đồng ý rằng sau khi thiết lập môi trường (cụm GKE/Kubernetes tại đây), Kubernetes có thể giúp bạn tập trung vào ứng dụng thay vì quản lý cơ sở hạ tầng.
12. Cloud Build
Cho đến nay, chúng tôi đang xây dựng các vùng chứa bằng các lệnh Docker thông thường (bản dựng docker ...) và sau đó đẩy hình ảnh theo cách thủ công vào Sổ đăng ký vùng chứa của Google Cloud Platform. Bạn cũng có thể trì hoãn cả hai bước cho Cloud Build phía máy chủ. Phương thức này có thể tạo và đẩy hình ảnh vùng chứa mà không cần cài đặt Docker cục bộ.
Trước tiên, hãy bật Cloud Build API trong API Manager > Thư viện. Tìm Cloud Build, rồi nhấp vào Cloud Build API:
Nhấp vào Bật API nếu chưa bật. Cuối cùng, bạn sẽ thấy API được bật như sau:
Sau khi bật Cloud Build API, bạn có thể chạy lệnh sau để tạo và đẩy hình ảnh của mình tất cả từ dịch vụ Trình tạo vùng chứa:
$ gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v3
Hình ảnh được tự động lưu trữ trên Container Registry.
13. Chạy trang tổng quan đồ hoạ của Kubernetes
Với các phiên bản gần đây của Kubernetes, chúng tôi đã ra mắt giao diện người dùng web đồ hoạ (trang tổng quan). Giao diện người dùng này cho phép bạn bắt đầu nhanh chóng và hỗ trợ một số chức năng có trong CLI như một cách tương tác với hệ thống dễ tiếp cận và dễ khám phá hơn.
Để định cấu hình quyền truy cập vào trang tổng quan của cụm Kubernetes, hãy nhập các lệnh sau trong cửa sổ Cloud Shell :
gcloud container clusters get-credentials hello-dotnet-cluster \ --zone europe-west1-b --project ${GOOGLE_CLOUD_PROJECT}
kubectl proxy --port 8081
Sau đó, sử dụng tính năng xem trước Cloud Shell một lần nữa để chuyển đến cổng 8081:
Thao tác này sẽ chuyển bạn đến điểm cuối của API. Bạn có thể nhận được thông báo "Chưa được uỷ quyền" nhưng đừng lo lắng về nó. Để truy cập trang tổng quan, hãy xoá "?authuser=3" và thay thế bằng "/ui
".
Sử dụng trang tổng quan đồ hoạ của Kubernetes và sử dụng trang tổng quan này để triển khai các ứng dụng trong vùng chứa, cũng như để giám sát và quản lý các cụm của bạn!
Ngoài ra, bạn có thể truy cập trang tổng quan từ máy phát triển hoặc máy cục bộ bằng cách sử dụng các hướng dẫn tương tự được cung cấp khi bạn nhấn nút "Kết nối" từ Bảng điều khiển web cho cụm bạn muốn giám sát.
Khi đã hoàn tất với trang tổng quan, bạn có thể Control + C để dừng proxy. Tìm hiểu thêm về trang tổng quan Kubernetes bằng cách xem Tham quan trang tổng quan.
14. Ghi nhật ký
Bạn có thể dùng lệnh kubectl logs
để truy xuất nhật ký của một vùng chứa chạy bên trong Kubernetes. Khi bạn sử dụng Google Kubernetes Engine để chạy các cụm Kubernetes được quản lý, tất cả nhật ký sẽ tự động được chuyển tiếp và lưu trữ trong Google Cloud Logging. Bạn có thể xem tất cả đầu ra nhật ký từ các nhóm bằng cách chuyển đến Stackdriver → Logging → Logs (Ghi nhật ký → Nhật ký) trong bảng điều khiển Google Cloud:
Sau khi truy cập vào bảng điều khiển ghi nhật ký, bạn có thể chuyển đến Vùng chứa của GKE để xem tất cả nhật ký được thu thập từ STDOUT:
Từ đây, bạn có thể xuất nhật ký vào Google BigQuery (không bắt buộc) để phân tích thêm nhật ký hoặc thiết lập cảnh báo dựa trên nhật ký. Chúng tôi sẽ không làm việc này trong phòng thí nghiệm hôm nay.
15. Xin chúc mừng!
Đến đây, chúng tôi xin khép lại lớp học lập trình đơn giản về cách bắt đầu sử dụng ASP.NET Core và Kubernetes này. Chúng tôi mới chỉ mới tìm hiểu sơ qua về công nghệ này. Bạn nên tìm hiểu thêm qua các nhóm, bộ điều khiển sao chép và dịch vụ của riêng mình. Bạn cũng có thể dùng các thiết bị thăm dò trực tiếp (kiểm tra tình trạng) và cân nhắc trực tiếp sử dụng Kubernetes API.
Dọn dẹp
Vậy là xong! Thời gian để dọn dẹp các tài nguyên được sử dụng (để tiết kiệm chi phí và trở thành một công dân tốt của công nghệ đám mây).
Xoá Triển khai (cũng sẽ xoá các nhóm đang chạy) và Dịch vụ (cũng xoá trình cân bằng tải bên ngoài của bạn):
Trước tiên, hãy xoá dịch vụ và quy trình triển khai. Thao tác này cũng sẽ xoá trình cân bằng tải bên ngoài của bạn:
kubectl delete service,deployment hello-dotnet
service "hello-dotnet" deleted deployment "hello-dotnet" deleted
Tiếp theo, hãy xoá cụm của bạn:
gcloud container clusters delete hello-dotnet-cluster --zone=europe-west1-b
The following clusters will be deleted. - [hello-dotnet-cluster] in [europe-west1-b] Do you want to continue (Y/n)? Y Deleting cluster hello-dotnet-cluster...done. Deleted [https://container.googleapis.com/v1/projects/<PROJECT_ID>/zones/europe-west1-b/clusters/hello-dotnet-cluster].
Thao tác này sẽ xoá tất cả phiên bản Google Compute Engine đang chạy cụm.
Cuối cùng, xoá bộ chứa lưu trữ sổ đăng ký Docker đang lưu trữ(các) hình ảnh của bạn:
gsutil ls
gs://artifacts.<PROJECT_ID>.appspot.com/
gsutil rm -r gs://artifacts.${GOOGLE_CLOUD_PROJECT}.appspot.com/ Removing gs://artifacts.<PROJECT_ID>.appspot.com/...
Removing gs://artifacts.<PROJECT_ID>.appspot.com/...
Tất nhiên, bạn cũng có thể xoá toàn bộ dự án nhưng sẽ mất mọi thông tin thanh toán bạn đã thực hiện (bắt buộc phải tắt tính năng thanh toán cho dự án trước tiên). Ngoài ra, việc xoá dự án sẽ chỉ dừng tất cả các khoản thanh toán sau khi kết thúc chu kỳ thanh toán hiện tại.
Nội dung đã đề cập
- Cách đóng gói một ứng dụng ASP.NET Core đơn giản dưới dạng vùng chứa Docker.
- Cách tạo cụm Kubernetes trên Google Kubernetes Engine.
- Cách triển khai ứng dụng ASP.NET Core cho một nhóm.
- Cách cho phép lưu lượng truy cập từ bên ngoài vào nhóm của bạn.
- Cách mở rộng quy mô dịch vụ và triển khai bản nâng cấp.
- Cách chạy trang tổng quan đồ hoạ của Kubernetes.
Các bước tiếp theo
- Tìm hiểu thêm về Kubernetes ( http://kubernetes.io/).
- Tìm hiểu thêm về Windows trên Google Cloud Platform.
- Tìm hiểu thêm về .NET trên Google Cloud Platform.
- Tìm hiểu thêm về SQL Server trên Google Cloud Platform.
- Tìm hiểu thêm về Cloud Tools cho Visual Studio.
- Tìm hiểu thêm về Cloud Tools cho PowerShell.
Giấy phép
Tác phẩm này được cấp phép theo Giấy phép chung Ghi nhận tác giả Creative Commons 2.0.