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 (在 Compute Engine 上執行的 Google 代管 Kubernetes 版本) 等代管環境,可讓您專心體驗 Kubernetes,不必費心設定基礎架構。
如果您想在本機 (例如開發筆電) 上執行 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 預計只需要幾分鐘。

這部虛擬機器搭載您需要的所有開發工具,並提供永久的 5GB 主目錄,而且可在 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 是一組容器,彼此連結以利管理和網路作業。可包含單一或多個容器。您只需使用一個以 ASP.NET Core 映像檔建構的容器,並儲存在私人容器登錄檔中。並在通訊埠 8080 提供內容。
使用慣用的編輯器 (vim, nano,emacs 或 Cloud Shell 的程式碼編輯器) 建立 hello-dotnet.yaml 檔案,並定義 Pod 的 Kubernetes 部署作業:
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 物件。建議使用 Deployment 建立及擴充 Pod。在此,新的部署會管理執行 hello-dotnet:v1 映像檔的單一 Pod 副本。
如要查看剛才建立的部署作業,只要執行下列指令即可:
kubectl get deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE hello-dotnet 1 1 1 1 37s
如要查看部署作業建立的 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 存取。如要從 Kubernetes 虛擬網路外部存取 hello-dotnet 容器,您必須將 Pod 公開為 Kubernetes 服務。
在 Cloud Shell 中,您可以結合 kubectl expose 指令和 --type="LoadBalancer" 旗標,將 Pod 公開至網際網路。建立可從外部存取的 IP 時,必須使用這個旗標:
kubectl expose deployment hello-dotnet --type="LoadBalancer" --port=8080
這項指令使用的旗標指定您將使用基礎架構提供的負載平衡器 (在本例中為 Compute Engine 負載平衡器)。請注意,您公開的是部署作業,而不是 Pod。這會導致產生的服務在 Deployment 管理的所有 Pod 中,進行流量負載平衡 (在本例中只有 1 個 Pod,但您稍後會新增更多副本)。
Kubernetes 主節點會建立負載平衡器和相關的 Compute Engine 轉送規則、目標集區和防火牆規則,確保可從 Google Cloud Platform 外部完整存取服務。
如要找出服務的公開 IP 位址,只要要求 kubectl 列出所有叢集服務即可:
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。
現在,只要在瀏覽器中輸入這個網址: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. 推出服務升級
您部署到實際工作環境的應用程式,在某個時間點會需要修正錯誤或新增功能。讓我們看看這個流程。
首先,請修改應用程式。從 Cloud Shell 開啟程式碼編輯器。

前往「HelloWorldAspNetCore > Views > Home」下方的「Index.cshtml」,然後更新其中一則輪轉介面訊息。
找出以下程式碼:
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 指令。這會開啟文字編輯器,顯示完整的部署 YAML 設定。您現在不必完全瞭解 YAML 設定,只要知道更新設定中的 spec.template.spec.containers.image 欄位,就能告知部署作業更新 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
這會使用新映像檔更新部署作業,導致系統使用新映像檔建立新 Pod,並刪除舊 Pod。
kubectl get deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
hello-dotnet 4 5 4 3 1h
在此期間,服務使用者不應遇到任何中斷情形。過一會兒,他們就會開始存取新版應用程式。

如要進一步瞭解滾動更新,請參閱 Kubernetes 說明文件。
希望您在瞭解這些部署、調度及更新功能後,會同意 Kubernetes 能協助您專注於應用程式,而非管理基礎架構 (這裡指的是 GKE/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」查看從 STDOUT 收集的所有記錄:

您可以選擇將記錄匯出至 Google BigQuery,進一步分析記錄,或設定以記錄為準的快訊。我們今天不會在實驗室中執行這項操作。
15. 恭喜!
以上是 ASP.NET Core 和 Kubernetes 的簡單入門程式碼研究室。我們只是淺談這項技術,建議您進一步探索自己的 Pod、複寫控制器和服務,同時查看有效性探測 (健康狀態檢查),並考慮直接使用 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 通用授權。