1. 總覽
ASP.NET Core 是全新的開放原始碼跨平台架構,可使用 C# 程式設計語言建構現代化的雲端和網際網路連線應用程式。
Kubernetes 是開放原始碼專案,能夠在許多不同環境中運作,包括筆記型電腦、高可用性的多節點叢集、公有雲、地端部署、虛擬機器和裸機環境。
在本實驗室中,您會將簡單的 ASP.NET Core 應用程式部署至 Kubernetes Engine 執行的 Kubernetes。本程式碼研究室以「透過 Google Cloud Shell 建構及啟動 ASP.NET Core 應用程式」程式碼研究室為基礎。建議先完成該實驗室,再進行這個實驗室。
本程式碼研究室的目標是將您的程式碼 (這裡是簡單的 Hello World ASP.NET Core 應用程式) 轉換為可在 Kubernetes 執行的副本應用程式。您會將在本機開發的程式碼轉換為 Docker 容器映像檔,然後在 Google Kubernetes Engine 上執行該映像檔。
以下圖表說明本程式碼研究室會用到的各項元件,協助您瞭解各部分如何搭配運作。操作過程中,您隨時可以參考這張圖表,完成後應該就能掌握整體架構 (不過目前可以先忽略)。

在本程式碼實驗室,使用 Kubernetes Engine 等代管環境可讓您專心體驗 Kubernetes,不必費心設定底層基礎架構。Kubernetes Engine 是由 Google 代管的 Kubernetes 版本,在 Compute Engine 上運作。
如果您想在本機 (例如開發筆電) 上執行 Kubernetes,建議您瞭解 Minikube。這項功能可讓您輕鬆設定單一節點 Kubernetes 叢集,用於開發和測試。如要使用 Minikube 完成本程式碼研究室,請參閱這篇文章。
課程內容
- 如何將簡單的 ASP.NET Core 應用程式封裝為 Docker 容器。
- 瞭解如何在 Google Kubernetes Engine (GKE) 上建立 Kubernetes 叢集。
- 如何將 ASP.NET Core 應用程式部署至 Pod。
- 如何允許外部流量傳送至 Pod。
- 如何擴充服務規模及推出升級版本。
- 如何執行 Kubernetes 圖形資訊主頁。
軟硬體需求
您會如何使用本教學課程?
你對 Google Cloud Platform 的使用體驗滿意嗎?
2. 設定和需求條件
自修實驗室環境設定
- 登入 Google Cloud 控制台,然後建立新專案或重複使用現有專案。如果沒有 Gmail 或 Google Workspace 帳戶,請先建立帳戶。



- 專案名稱是這個專案參與者的顯示名稱。這是 Google API 未使用的字元字串。你隨時可以更新該位置資訊。
- 專案 ID 在所有 Google Cloud 專案中不得重複,且設定後即無法變更。Cloud 控制台會自動產生專屬字串,通常您不需要在意該字串為何。在大多數程式碼研究室中,您需要參照專案 ID (通常會標示為
PROJECT_ID)。如果您不喜歡產生的 ID,可以產生另一個隨機 ID。你也可以嘗試自訂名稱,看看是否可用。完成這個步驟後就無法變更,且專案期間都會維持這個設定。 - 請注意,部分 API 會使用第三個值,也就是「專案編號」。如要進一步瞭解這三種值,請參閱說明文件。
- 接著,您需要在 Cloud 控制台中啟用帳單,才能使用 Cloud 資源/API。完成本程式碼研究室的費用應該不高,甚至完全免費。如要關閉資源,避免產生本教學課程以外的費用,您可以刪除建立的資源或整個專案。Google Cloud 新使用者可參加價值$300 美元的免費試用計畫。
啟動 Cloud Shell
雖然您可以透過筆電遠端操作 Google Cloud,但在本程式碼研究室中,您將使用 Google Cloud Shell,這是可在雲端執行的指令列環境。
啟用 Cloud Shell
- 在 Cloud 控制台,點選「啟用 Cloud Shell」 圖示
。

如果您是首次啟動 Cloud Shell,系統會顯示中繼畫面 (位於摺疊式選單下方),說明這個指令列環境。按一下「繼續」後,此提示就不會再出現了。以下是這個初次啟動的畫面:

佈建並連至 Cloud Shell 預計只需要幾分鐘。

這個虛擬機器已預先安裝所有必要的開發工具,並提供永久的 5 GB 主目錄,而且可在 Google Cloud 運作,大幅提升網路效能並強化驗證功能。本程式碼研究室幾乎所有工作都可在瀏覽器或 Chromebook 上完成。
連線至 Cloud Shell 後,您應會發現自己通過驗證,且專案已設為您的專案 ID。
- 在 Cloud Shell 中執行下列指令,確認您已通過驗證:
gcloud auth list
指令輸出
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- 在 Cloud Shell 執行下列指令,確認 gcloud 指令已瞭解您的專案:
gcloud config list project
指令輸出
[core] project = <PROJECT_ID>
如未設定,請輸入下列指令手動設定專案:
gcloud config set project <PROJECT_ID>
指令輸出
Updated property [core/project].
3. 在 Cloud Shell 中建立 ASP.NET Core 應用程式
在 Cloud Shell 提示中,您可以檢查 dotnet 指令列工具的版本,確認工具是否已安裝。這會列印已安裝的 dotnet 指令列工具版本:
dotnet --version
接著,建立新的 ASP.NET Core 網頁應用程式基本架構。
dotnet new mvc -o HelloWorldAspNetCore
這個指令會建立專案並還原依附元件,顯示的訊息應如下所示。
Restore completed in 11.44 sec for HelloWorldAspNetCore.csproj.
Restore succeeded.
4. 執行 ASP.NET Core 應用程式
我們即將執行應用程式。請前往應用程式資料夾。
cd HelloWorldAspNetCore
最後,執行應用程式。
dotnet run --urls=http://localhost:8080
應用程式會開始監聽通訊埠 8080。
Hosting environment: Production
Content root path: /home/atameldev/HelloWorldAspNetCore
Now listening on: http://[::]:8080
Application started. Press Ctrl+C to shut down.
如要確認應用程式是否正在執行,請點按右上方的網頁預覽按鈕,然後選取「透過以下通訊埠預覽:8080」。

您會看到預設的 ASP.NET Core 網頁:

確認應用程式正在執行後,請按下 Ctrl+C 鍵關閉應用程式。
5. 將 ASP.NET Core 應用程式封裝為 Docker 容器
接著,準備以容器形式執行應用程式。首先,請定義容器及其內容。
在應用程式的根目錄中,建立 Dockerfile 來定義 Docker 映像檔。
touch Dockerfile
使用慣用的編輯器 (vim,、nano,emacs 或 Cloud Shell 的程式碼編輯器),將下列內容新增至 Dockerfile。
# 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"]
Dockerfile 中包含一項重要設定,也就是應用程式監聽連入流量的通訊埠 (8080)。方法是設定 ASPNETCORE_URLS 環境變數,ASP.NET Core 應用程式會使用這項變數判斷要監聽哪個通訊埠。
儲存這項 Dockerfile。現在來建構映像檔:
docker build -t gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v1 .
完成後 (下載及解壓縮所有內容需要一些時間),您會看到映像檔已建構並儲存在本機:
docker images REPOSITORY TAG gcr.io/yourproject-XXXX/hello-dotnet v1
使用下列指令在本機測試映像檔,這會使用新建立的容器映像檔,在本機通訊埠 8080 執行 Docker 容器:
docker run -p 8080:8080 gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v1
再次運用 Cloud Shell 的網頁預覽功能:

新分頁中應會顯示預設的 ASP.NET Core 網頁。

確認應用程式在本機 Docker 容器中正常運作後,即可使用 Ctrl-> C 停止執行中的容器。
確認映像檔能正常運作後,請推送至 Google Container Registry,這是私人的 Docker 映像檔存放區,可透過每個 Google Cloud 專案存取 (也能從 Google Cloud Platform 外部存取):
docker push gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v1
如果一切順利,過一會兒後,您應該就能在「Container Registry」部分看到容器映像檔。您已備妥整個專案都適用的 Docker 映像檔,可供 Kubernetes 存取及自動調度管理,這點您在幾分鐘後就會看到。

如要查看儲存在 Google Cloud Storage 中的容器映像檔,請點選這個連結:https://console.cloud.google.com/storage/browser/ (完整連結應為 https://console.cloud.google.com/project/PROJECT_ID/storage/browser/)。
6. 建立 Kubernetes 叢集
現在可以建立 GKE 叢集了,但在此之前,請先前往網頁控制台的 Google Kubernetes Engine 專區,等待系統初始化 (應該只需要幾秒鐘)。

叢集包含一個由 Google 管理的 Kubernetes 主 API 伺服器,以及一組工作站節點,這組節點就是 Compute Engine 虛擬機器。
我們將使用 Cloud Shell 工作階段中的 gcloud CLI 建立叢集。將區域調整為您附近的區域 ( 區域清單)。這項作業需要幾分鐘才能完成:
gcloud container clusters create hello-dotnet-cluster --cluster-version=latest --num-nodes 4 --zone europe-west1-b
最後,您應該會看到建立的叢集。
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
現在您應該會有採用 Google Kubernetes Engine 的 Kubernetes 叢集,可正常運作:

現在可以將您的容器化應用程式部署至 Kubernetes 叢集了!接下來,您要透過 kubectl 指令列操作 (已內建在 Cloud Shell 環境中)。本程式碼研究室的其餘部分需要 Kubernetes 用戶端和伺服器版本為 1.2 以上。kubectl version 會顯示指令的目前版本。
7. 建立部署作業
Kubernetes Pod 可將多個容器歸入群組,除了便於管理外,還能讓這些容器共用網路設定。每個 Pod 可包含一或多個容器。這項工作會用到一個以 ASP.NET Core 映像檔建構而成的容器,該映像檔儲存在您的私人容器登錄檔中。容器會透過通訊埠 8080 提供內容。
使用慣用的編輯器 (vim, nano,emacs 或 Cloud Shell 的程式碼編輯器) 建立 hello-dotnet.yaml 檔案,並定義 Pod 的 Kubernetes Deployment:
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
使用 kubectl 部署至預設命名空間:
kubectl apply -f hello-dotnet.yaml
deployment.apps/hello-dotnet created
如您所見,您成功建立了 Deployment 物件。建立及擴充 Pod 時,建議使用 Deployment。這裡的新 Deployment 會管理一個 Pod 副本,而該副本會執行 hello-dotnet:v1 映像檔。
如要查看剛建立的 Deployment,只要執行下列指令即可:
kubectl get deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE hello-dotnet 1 1 1 1 37s
如要查看 Deployment 建立的 Pod,請執行下列指令:
kubectl get pods
NAME READY STATUS RESTARTS AGE hello-dotnet-714049816-ztzrb 1/1 Running 0 57s
現在正好可以瞭解幾個有趣的 kubectl 指令 (這些指令都不會變更叢集狀態,完整說明文件請參閱這裡):
kubectl get pods kubectl cluster-info kubectl config view kubectl get events kubectl logs <pod-name>
此時,您的容器應該已在 Kubernetes 的控管下執行,但您仍須開放外部存取。
8. 允許外部流量
根據預設,Pod 只能在叢集內透過內部 IP 存取。如要讓 hello-dotnet 容器能從 Kubernetes 虛擬網路外部存取,請將 pod 公開為 Kubernetes Service。
在 Cloud Shell 中,只要使用 kubectl expose 指令並加上 --type="LoadBalancer" 旗標,就能對公開網際網路開放 Pod。建立可從外部存取的 IP 時,必須使用這個旗標:
kubectl expose deployment hello-dotnet --type="LoadBalancer" --port=8080
在這個指令中,該旗標指定要使用底層基礎架構提供的負載平衡器,在本例中即為 Compute Engine 負載平衡器。請注意,您直接公開的是 Deployment,而非 Pod。因此,產生的 Service 會將流量負載平衡至該 Deployment 管理的所有 Pod。本例目前只有 1 個 Pod,稍後會新增更多副本。
Kubernetes 主節點會建立負載平衡器,以及相關的 Compute Engine 轉送規則、目標集區及防火牆規則,確保 Service 可從 Google Cloud Platform 外部完整存取。
只要要求 kubectl 列出所有叢集服務,就能找出服務可供公開存取的 IP 位址:
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
請注意,清單中列出了服務的 2 個 IP 位址,兩者皆使用 8080 通訊埠。一個是內部 IP,只有在雲端虛擬網路內部能看到,另一個則是外部負載平衡 IP。在本範例中,外部 IP 位址為 104.155.20.69。
現在只要在瀏覽器中前往下列位址,應該就能連上這個 Service:http://<EXTERNAL_IP>:8080

到目前為止,改用容器和 Kubernetes 已帶來多項好處:您不必指定要在哪部主機上執行工作負載,還可享有服務監控及重新啟動功能。現在來看看新的 Kubernetes 基礎架構還能提供哪些好處。
9. 擴充服務規模
Kubernetes 的強大功能之一,就是可輕鬆擴充應用程式。假設您突然需要更多應用程式容量,只要指定複製控制器要改為管理多少個 Pod 副本即可:
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
請注意,這裡採用的是宣告式方法,您不必啟動或停止新執行個體,只需指定隨時要有多少個執行個體保持運作。Kubernetes 協調迴圈會確保實際情況符合您的要求,並視需要採取行動。
下圖簡單呈現目前的 Kubernetes 叢集狀態:

您也可以輕鬆縮減服務規模。以下說明如何將 Pod 從 4 個縮減為 2 個。
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. 測試復原能力
Kubernetes (更具體來說是 ReplicaSet) 會監控 Pod,如果 Pod 發生問題而停止運作,系統會立即建立新的 Pod。讓我們測試一下,看看運作方式。
首先,取得 Pod 清單:
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
傳遞 Pod 名稱,刪除其中一個 Pod:
kubectl delete pod hello-dotnet-714049816-g4azy
再次查看 Pod 清單,您會看到系統立即建立並執行新的 Pod:
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. 升級並推出新版 Service
將應用程式部署至正式環境後,有時會需要修正錯誤或新增功能。讓我們看看這個過程。
首先,請修改應用程式。從 Cloud Shell 開啟程式碼編輯器。

依序前往 Index.cshtml 下方的 HelloWorldAspNetCore > Views > Home,然後更新輪轉介面訊息。
找出以下這行程式碼:
Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core
並改為以下程式碼:
Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core on Google Cloud
儲存變更,然後返回 Cloud Shell。在 HelloWorldAspNetCore, 內建構 Docker 映像檔:
docker build -t gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v2 .
然後推送到 Container Registry:
docker push gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v2
現在 Kubernetes 就能順暢地更新複製控制器,將應用程式切換為新版本。如要變更執行中容器的映像檔標籤,請編輯現有的 hello-dotnet deployment,並將映像檔從 gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v1 改為 gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v2。
如要執行這項操作,請使用 kubectl edit 指令。文字編輯器隨即會開啟,並顯示完整的 Deployment YAML 設定。您目前不需要瞭解完整的 YAML 設定,只要知道更新設定的 spec.template.spec.containers.image 欄位,就能要求 Deployment 使用新的映像檔更新 Pod。
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
完成變更後,請儲存並關閉檔案 (使用 vi 時,請按下「Esc」鍵,然後輸入 :wq 並按下「Enter」鍵)。
deployment "hello-dotnet" edited
這會使用新映像檔更新 Deployment,導致系統使用新映像檔建立新 Pod,並刪除舊 Pod。
kubectl get deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
hello-dotnet 4 5 4 3 1h
在此期間,使用者應該不會遇到服務中斷的情況,且不用多久就能取得新版應用程式。

如要進一步瞭解滾動式更新,請參閱 Kubernetes 說明文件。
設定好環境 (這裡指的是 GKE/Kubernetes 叢集),並體驗過部署、擴充和更新功能後,您應該會發現 Kubernetes 能助您更專注於應用程式,無須費心管理基礎架構。
12. Cloud Build
到目前為止,我們都是使用一般 Docker 指令 (docker build ...) 建構容器,然後手動將映像檔推送至 Google Cloud Platform 的 Container Registry。您也可以將這兩個步驟都延後至伺服器端 Cloud Build,這樣就能建構及推送容器映像檔,不必在本機安裝 Docker。
首先,請在 API 管理工具 > 程式庫中啟用 Cloud Build API。搜尋「Cloud Build」,然後按一下「Cloud Build API」:

如果 API 尚未啟用,請點選「啟用 API」。最後,您應該會看到已啟用的 API,如下所示:

啟用 Cloud Build API 後,您就能執行下列指令,透過 Container Builder 服務建構及推送映像檔:
$ gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v3
映像檔會自動儲存在 Container Registry 中。
13. 執行 Kubernetes 圖形資訊主頁
Kubernetes 近期版本導入了圖形化網頁使用者介面 (資訊主頁)。這個使用者介面可讓您快速上手,並以更平易近人且容易探索的方式與系統互動,進而使用 CLI 中的部分功能。
如要設定 Kubernetes 叢集資訊主頁的存取權,請在 Cloud Shell 視窗中輸入下列指令:
gcloud container clusters get-credentials hello-dotnet-cluster \
--zone europe-west1-b --project ${GOOGLE_CLOUD_PROJECT}
kubectl proxy --port 8081
然後再次使用 Cloud Shell 預覽功能,前往通訊埠 8081:

系統應會將您導向 API 端點。您可能會看到「未經授權」頁面,但請不必擔心。如要前往資訊主頁,請移除「?authuser=3」,並換成「/ui」。
您可以使用 Kubernetes 圖形化資訊主頁部署容器化應用程式,以及監控及管理叢集!

或者,您也可以從開發或本機電腦存取資訊主頁,方法是從 Web 控制台按下要監控的叢集「連線」按鈕,然後按照類似的操作說明進行。


完成資訊主頁操作後,即可按下 Control + C 停止 Proxy。如要進一步瞭解 Kubernetes 資訊主頁,請參加導覽。
14. 記錄
您可以使用 kubectl logs 指令,擷取在 Kubernetes 中執行的容器記錄。使用 Google Kubernetes Engine 執行代管 Kubernetes 叢集時,所有記錄都會自動轉送並儲存在 Google Cloud Logging 中。如要查看 Pod 的所有記錄輸出內容,請前往 Google Cloud 主控台的「Stackdriver」→「Logging」→「Logs」:

進入記錄檔控制台後,您可以前往「GKE Container」(GKE 容器),查看從 STDOUT 收集的所有記錄:

您可以選擇將記錄匯出至 Google BigQuery,進一步分析記錄,或設定以記錄為準的快訊。我們今天不會在實驗室中進行這項操作。
15. 恭喜!
本程式碼研究室到此結束,您已瞭解如何使用 ASP.NET Core 和 Kubernetes 輕鬆入門。我們只是淺談這項技術,建議您自行深入探索 Pod、複製控制器和 Service,並進一步瞭解 liveness 探測 (健康狀態檢查),也可以考慮直接使用 Kubernetes API。
清除所用資源
大功告成!現在要清理使用的資源 (節省成本並當個優質的雲端使用者)。
刪除 Deployment (也會刪除正在執行的 Pod) 和 Service (也會刪除外部負載平衡器):
首先,請刪除服務和部署作業,這也會刪除外部負載平衡器:
kubectl delete service,deployment hello-dotnet
service "hello-dotnet" deleted deployment "hello-dotnet" deleted
接著,請刪除叢集:
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].
這會刪除執行叢集的所有 Google Compute Engine 執行個體。
最後,刪除儲存映像檔的 Docker 登錄儲存空間 bucket:
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/...
當然,您也可以刪除整個專案,但這樣會遺失所有已完成的帳單設定 (必須先停用專案帳單)。此外,刪除專案後,系統只會在目前的帳單週期結束後停止收費。
涵蓋內容
- 如何將簡單的 ASP.NET Core 應用程式封裝為 Docker 容器。
- 瞭解如何在 Google Kubernetes Engine 上建立 Kubernetes 叢集。
- 如何將 ASP.NET Core 應用程式部署至 Pod。
- 如何允許外部流量傳送至 Pod。
- 如何擴充服務規模及推出升級版本。
- 如何執行 Kubernetes 圖形資訊主頁。
後續步驟
- 進一步瞭解 Kubernetes ( http://kubernetes.io/)。
- 進一步瞭解 Google Cloud Platform 上的 Windows。
- 進一步瞭解 Google Cloud Platform 上的 .NET。
- 進一步瞭解 Google Cloud Platform 上的 SQL Server。
- 進一步瞭解 Cloud Tools for Visual Studio。
- 進一步瞭解 Cloud Tools for PowerShell。
授權
這項內容採用的授權為 Creative Commons 姓名標示 2.0 通用授權。