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 未使用的字元字串。您隨時可以更新這項資訊。
- 所有 Google Cloud 專案的專案 ID 均不得重複,且設定後即無法變更。Cloud 控制台會自動產生一個不重複的字串。但通常是在乎它何在在大部分的程式碼研究室中,您必須參照專案 ID (通常為
PROJECT_ID
)。如果您對產生的 ID 不滿意,可以隨機產生一個 ID。此外,您也可以自行嘗試,看看系統是否提供該付款方式。在完成這個步驟後就無法變更,而且在專案期間仍會保持有效。 - 資訊中的第三個值是專案編號,部分 API 會使用這個編號。如要進一步瞭解這三個值,請參閱說明文件。
- 接下來,您需要在 Cloud 控制台中啟用計費功能,才能使用 Cloud 資源/API。執行這個程式碼研究室並不會產生任何費用,如果有的話。如要關閉資源,以免系統產生本教學課程結束後產生的費用,您可以刪除自己建立的資源,或刪除整個專案。Google Cloud 的新使用者符合 $300 美元免費試用計畫的資格。
啟動 Cloud Shell
雖然 Google Cloud 可以從筆記型電腦遠端操作,但在本程式碼研究室中,您將使用 Google Cloud Shell,這是一種在 Cloud 中執行的指令列環境。
啟用 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
也可以再次利用 CloudShell 的網頁預覽功能:
您應該會在新分頁中看到預設的 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 虛擬機器。
讓我們使用 CloudShell 工作階段中的 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 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 物件。建議您使用 Deployment 建立及調度 Pod 資源。這裡的新部署作業會管理執行 hello-dotnet:v1
映像檔的單一 Pod 備用資源。
如要檢視您剛剛建立的 Deployment,只要執行下列指令:
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 負載平衡器)。請注意,您必須公開 Deployment,而非直接公開 Pod。這會讓產生的服務針對該部署項目代管的所有 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 叢集的狀態:
您也可以輕鬆縮減服務資源。以下說明如何從 4 個 Pod 縮減為 2 個 Pod。
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
指令。畫面上會開啟文字編輯器,顯示完整的 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
這會使用新的映像檔來更新部署項目,進而使用新映像檔建立新 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 建構...) 建構容器,接著手動將映像檔推送至 Google Cloud Platform 的 Container Registry。此外,您也可以將這兩個步驟延後到伺服器端 Cloud Build,這樣就可以在不在本機安裝 Docker 的情況下建構及推送容器映像檔。
首先,在「API Manager」(API 管理員) >啟用 Cloud Build API媒體庫。搜尋「Cloud Build」,然後按一下「Cloud Build 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 圖形資訊主頁,用來部署容器化應用程式,以及監控及管理叢集!
或者,您也可以從開發或本機電腦上類似的存取資訊主頁,但從網路控制台按下 [連線] 即可來監控您要監控的叢集
使用完資訊主頁後,按下 Ctrl + C 鍵即可停止 Proxy。如要進一步瞭解 Kubernetes 資訊主頁,請參閱資訊主頁導覽。
14. 記錄
您可以使用 kubectl logs
指令,擷取 Kubernetes 內運作的容器記錄檔。當您使用 Google Kubernetes Engine 執行代管 Kubernetes 叢集時,所有記錄檔都會自動轉送並儲存在 Google Cloud Logging 中。您可以在 Google Cloud 控制台中依序前往 [Stackdriver] → [記錄] → [記錄],查看 Pod 的所有記錄輸出:
登入記錄主控台後,您可以前往「GKE 容器」查看從 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 註冊資料庫儲存空間值區:
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。
授權
這項內容採用的是創用 CC 姓名標示 2.0 通用授權。