GSP053

總覽
開發運作做法經常使用多個部署項目來管理各種應用程式部署情境,例如「持續部署」、「藍綠部署」和「初期測試部署」等。本實驗室說明如何管理容器及調度相關資源,協助您處理幾個有異質部署項目的常見情境。
目標
在這個實驗室,您會瞭解如何執行下列工作:
- 使用
kubectl
工具
- 建立 Deployment 的
yaml
檔案
- 發布、更新 Deployment 並調度資源
- 更新 Deployment 並瞭解相關的部署樣式
事前準備
為最大化學習效益,進行本實驗室課程前,建議先達成下列條件:
- 完成以下 Google Cloud Skills Boost 實驗室:
- 具備 Linux 系統管理技能。
- 瞭解開發運作理論和持續部署的概念。
部署作業簡介
異質部署通常是要連接至少兩個不同的基礎架構環境或區域,以滿足特定技術或作業需求。視特性而定,異質部署分為「混合雲」、「多雲端」或「公開對私人」三種。
這個實驗室說明下列異質部署作業:在單一雲端環境橫跨多個區域、橫跨多個公有雲環境 (「多雲端」),或是合併使用地端部署與公有雲環境 (「混合雲」或「公開對私人」)。
如果部署項目只在單一環境或區域內,可能會出現多種業務與技術問題:
-
資源不敷所需:在任何單一環境中,特別是在地端部署環境,您的運算、網路和儲存資源可能無法滿足實際運作所需。
-
地理範圍過於侷限:使用單一環境部署,人員即使彼此相距遙遠也必須存取同一個部署環境,他們的流量可能因此繞過大半個地球才能傳輸到中央位置。
-
可用性受到牽制:網路規模的流量模式讓應用程式難以維持容錯能力和彈性。
-
無法自由選擇廠商:廠商層級的平台和基礎架構抽象化,讓您無法移植應用程式。
-
資源缺乏彈性:資源可能受限於一組特定的運算、儲存或網路服務。
異質部署有助於解決這些問題,但必須使用程式輔助的確定性程序來建立架構。一次性或臨時部署程序會產生脆弱且無法容錯的部署項目或程序。臨時程序可能遺失資料或捨棄流量。良好的部署程序必須可以重複執行,並以經過驗證的方法管理佈建、設定和維護作業。
異質部署作業的三種常見情境如下:
- 多雲端部署
- 為地端部署資料建立前端
- 持續整合/持續推送軟體更新 (CI/CD) 程序
接下來您會使用 Kubernetes 和其他基礎架構資源,搭配架構良好的做法,練習異質部署的幾個常見用途。
設定和需求
瞭解以下事項後,再點選「Start Lab」按鈕
請詳閱以下操作說明。實驗室活動會計時,且中途無法暫停。點選「Start Lab」後就會開始計時,顯示可使用 Google Cloud 資源的時間。
您將在真正的雲端環境完成實作實驗室活動,而不是模擬或示範環境。為此,我們會提供新的暫時憑證,供您在實驗室活動期間登入及存取 Google Cloud。
為了順利完成這個實驗室,請先確認:
- 可以使用標準的網際網路瀏覽器 (Chrome 瀏覽器為佳)。
注意事項:請使用無痕模式 (建議選項) 或私密瀏覽視窗執行此實驗室,這可以防止個人帳戶和學員帳戶之間的衝突,避免個人帳戶產生額外費用。
- 是時候完成實驗室活動了!別忘了,活動一旦開始將無法暫停。
注意事項:務必使用實驗室專用的學員帳戶。如果使用其他 Google Cloud 帳戶,可能會產生額外費用。
如何開始研究室及登入 Google Cloud 控制台
-
點選「Start Lab」按鈕。如果實驗室會產生費用,畫面上會出現選擇付款方式的對話方塊。左側的「Lab Details」窗格會顯示下列項目:
- 「Open Google Cloud console」按鈕
- 剩餘時間
- 必須在這個研究室中使用的臨時憑證
- 完成這個實驗室所需的其他資訊 (如有)
-
點選「Open Google Cloud console」;如果使用 Chrome 瀏覽器,也能按一下滑鼠右鍵,選取「在無痕視窗中開啟連結」。
接著,實驗室會啟動相關資源,並開啟另一個分頁,顯示「登入」頁面。
提示:您可以在不同的視窗中並排開啟分頁。
注意:如果頁面中顯示「選擇帳戶」對話方塊,請點選「使用其他帳戶」。
-
如有必要,請將下方的 Username 貼到「登入」對話方塊。
{{{user_0.username | "Username"}}}
您也可以在「Lab Details」窗格找到 Username。
-
點選「下一步」。
-
複製下方的 Password,並貼到「歡迎使用」對話方塊。
{{{user_0.password | "Password"}}}
您也可以在「Lab Details」窗格找到 Password。
-
點選「下一步」。
重要事項:請務必使用實驗室提供的憑證,而非自己的 Google Cloud 帳戶憑證。
注意:如果使用自己的 Google Cloud 帳戶來進行這個實驗室,可能會產生額外費用。
-
按過後續的所有頁面:
- 接受條款及細則。
- 由於這是臨時帳戶,請勿新增救援選項或雙重驗證機制。
- 請勿申請免費試用。
Google Cloud 控制台稍後會在這個分頁開啟。
注意:如要使用 Google Cloud 產品和服務,請點選「導覽選單」,或在「搜尋」欄位輸入服務或產品名稱。
啟動 Cloud Shell
Cloud Shell 是搭載多項開發工具的虛擬機器,提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作。Cloud Shell 提供指令列存取權,方便您使用 Google Cloud 資源。
-
點按 Google Cloud 控制台頂端的「啟用 Cloud Shell」圖示
。
-
系統顯示視窗時,請按照下列步驟操作:
- 繼續操作 Cloud Shell 視窗。
- 授權 Cloud Shell 使用您的憑證發出 Google Cloud API 呼叫。
連線建立完成即代表已通過驗證,而且專案已設為您的 Project_ID:。輸出內容中有一行文字,宣告本工作階段的 Project_ID:
Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}
gcloud
是 Google Cloud 的指令列工具,已預先安裝於 Cloud Shell,並支援 Tab 鍵自動完成功能。
- (選用) 您可以執行下列指令來列出使用中的帳戶:
gcloud auth list
- 點按「授權」。
輸出內容:
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- (選用) 您可以使用下列指令來列出專案 ID:
gcloud config list project
輸出內容:
[core]
project = {{{project_0.project_id | "PROJECT_ID"}}}
注意:如需 gcloud
的完整說明,請前往 Google Cloud 參閱 gcloud CLI 總覽指南。
設定可用區
執行下列指令來設定您工作的 Google Cloud 可用區,將所在可用區換成 :
gcloud config set compute/zone {{{ project_0.default_zone | ZONE }}}
取得本實驗室的程式碼範例
- 從實驗室 bucket 取得建立及執行容器和部署作業的程式碼範例:
gcloud storage cp -r gs://spls/gsp053/kubernetes .
cd kubernetes
- 建立含 3 個節點的叢集 (需數分鐘才能完成):
gcloud container clusters create bootcamp \
--machine-type e2-small \
--num-nodes 3 \
--scopes "https://www.googleapis.com/auth/projecthosting,storage-rw"
工作 1:瞭解 Deployment 物件
首先,請查看 Deployment 物件。
-
kubectl
中的 explain
指令可說明 Deployment 物件:
kubectl explain deployment
- 您還可以使用
--recursive
選項查看所有欄位:
kubectl explain deployment --recursive
- 進行實驗室課程期間,您可以使用 explain 指令來瞭解 Deployment 物件結構,以及個別欄位的作用:
kubectl explain deployment.metadata.name
工作 2:建立 Deployment
- 建立
fortune-app
的 Deployment 物件。檢查 Deployment 設定檔:
cat deployments/fortune-app-blue.yaml
輸出:
# orchestrate-with-kubernetes/kubernetes/deployments/fortune-app-blue.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: fortune-app-blue
spec:
replicas: 3
selector:
matchLabels:
app: fortune-app
template:
metadata:
labels:
app: fortune-app
track: stable
version: "1.0.0"
spec:
containers:
- name: fortune-app
# The new, centralized image path
image: "us-central1-docker.pkg.dev/qwiklabs-resources/spl-lab-apps/fortune-service:1.0.0"
ports:
- name: http
containerPort: 8080
...
請注意 Deployment 建立三個副本的方式,而且該物件使用的 fortune-service 容器版本為 1.0.0。
- 開始使用
kubectl create
建立 Deployment 物件:
kubectl create -f deployments/fortune-app-blue.yaml
- 建立 Deployment 後,您可以使用下列指令確認已建立該物件:
kubectl get deployments
- 建立 Deployment 之後,Kubernetes 會建立其
ReplicaSet
。您可以使用下列指令,確認已建立該 Deployment 的 ReplicaSet
:
kubectl get replicasets
ReplicaSet
的名稱應該會類似 fortune-app-blue-xxxxxxx
- 查看此 Deployment 的 Pod。
kubectl get pods
- 接著建立 Service,對外公開
fortune-app
的 Deployment。
kubectl create -f services/fortune-app.yaml
- 然後擷取
fortune-app
的外部 IP,並對其 /version
端點執行 curl 指令,與該應用程式互動:
kubectl get services fortune-app
注意:「External-IP」欄位可能需要幾秒鐘才會填入 Service 的外部 IP 位址。這是正常的狀況。只要每隔幾秒重新執行上述指令,直到該欄位填入位址即可。
curl http://<EXTERNAL-IP>/version
您應該會收到 JSON 回應,指出 {"version":"1.0.0"}
。
- 您也可以使用
kubectl
的輸出範本功能,以單行指令的方式使用 curl:
curl http://`kubectl get svc fortune-app -o=jsonpath="{.status.loadBalancer.ingress[0].ip}"`/version
測試已完成的工作
請點選下方的「Check my progress」,確認實驗室進度。如果看到評估分數,代表您成功建立 Kubernetes 叢集,以及 fortune-app Deployment 和 Service。
建立 Kubernetes 叢集和 Deployment (fortune-app)
調度 Deployment 資源
Deployment 建立完成後,您可以透過更新 spec.replicas
欄位,來調度相關資源。
- 建議使用
kubectl scale
指令,這可能是更新「replicas」欄位最輕鬆的方式:
kubectl scale deployment fortune-app-blue --replicas=5
注意:系統可能需要幾分鐘時間才能啟動所有新 Pod。
- 確認現在有 5 個
fortune-app-blue
Pod 執行中:
kubectl get pods | grep fortune-app-blue | wc -l
- 現在縮減應用程式資源:
kubectl scale deployment fortune-app-blue --replicas=3
- 請再次確認 Pod 數量正確無誤:
kubectl get pods | grep fortune-app-blue | wc -l
您已瞭解 Kubernetes 的 Deployment,以及如何管理 Pod 群組並調度相關資源。
工作 3:滾動式更新
Deployment 能透過滾動式更新機制,將映像檔更新至新版本。
觸發滾動式更新程序
- 如要觸發滾動式更新,只要套用「綠色」Deployment 的設定即可。Kubernetes 會辨識現有的 Deployment (
fortune-app-blue
),並將新檔案的變更「套用」至該物件。
kubectl edit deployment fortune-app-blue
- 在編輯器中找出
image
這一行,將版本標記從 1.0.0
改為 2.0.0
。按下鍵盤的 i
即可進入「插入模式」,編輯檔案。
-
首先,變更映像檔的標記:
- 找出這行程式碼:
image: "us-central1-docker.pkg.dev/qwiklabs-resources/spl-lab-apps/fortune-service:1.0.0"
- 並將其變更為:
image: "us-central1-docker.pkg.dev/qwiklabs-resources/spl-lab-apps/fortune-service:2.0.0"
-
接著更新環境變數:
- 找到
env
部分和 APP_VERSION
變數。
- 將
value: "1.0.0"
改為 value: "2.0.0"
-
儲存並關閉編輯器。你可以按下 Esc
鍵,然後輸入 :wq
並按下 Enter
鍵。這會觸發正確 Deployment 的滾動式更新,並妥善記錄其歷程。這會觸發正確 Deployment 的滾動式更新,並妥善記錄其歷程。
-
查看 Kubernetes 建立的新 ReplicaSet
:
kubectl get replicaset
- 您也會在推出記錄中看到新項目:
kubectl rollout history deployment/fortune-app-blue
暫停滾動式更新程序
- 請執行下列指令,暫停推出作業:
kubectl rollout pause deployment/fortune-app-blue
- 確認推出作業現在的狀態:
kubectl rollout status deployment/fortune-app-blue
注意:狀態指令可能會立即回報「deployment "fortune-app-blue" successfully rolled out」。這是預料中的回應,表示暫停指令本身已成功執行,不代表版本更新已完成。
- 檢查每個 Pod 的版本。您會看到 1.0.0 和 2.0.0 Pod 混合存在,確認推出作業已中途暫停。
for p in $(kubectl get pods -l app=fortune-app -o=jsonpath='{.items[*].metadata.name}'); do echo $p && curl -s http://$(kubectl get pod $p -o=jsonpath='{.status.podIP}')/version; echo; done
- 按下
CTRL+C
以結束迴圈。
繼續滾動式更新程序
- 您可以使用
resume
指令繼續推出作業:
kubectl rollout resume deployment/fortune-app-blue
- 推出完畢後,您應該會在執行
status
指令時看到下列內容:
kubectl rollout status deployment/fortune-app-blue
復原更新內容
假設您在新版本偵測到錯誤,
- 在這種情況下,請使用
rollout
指令復原至先前的版本:
kubectl rollout undo deployment/fortune-app-blue
注意:復原作業可能需要幾分鐘才能完成。
- 確認所有 Pod 都已復原至 1.0.0 版:
curl http://`kubectl get svc fortune-app -o=jsonpath="{.status.loadBalancer.ingress[0].ip}"`/version
太好了!您已瞭解如何為 Kubernetes Deployment 進行滾動式更新。
工作 4:初期測試部署
如果您想對實際工作環境中的部分使用者測試新的部署項目,可以採用初期測試部署。
建立初期測試部署
- 首先,使用
fortune-app-canary.yaml
檔案,為新版本建立新的初期測試部署:
cat deployments/fortune-app-canary.yaml
- 現在,建立初期測試部署:
kubectl create -f deployments/fortune-app-canary.yaml
- 建立初期測試部署後,您應該會有兩個 Deployment。使用以下指令驗證:
kubectl get deployments
fortune-app
Service 的選取器為 app: fortune-app
,會同時比對 fortune-app-blue
(正式環境) 和 fortune-app-canary
兩個 Deployment 中的 Pod。
確認初期測試部署
- 您可以向 Service 發出要求,確認系統現在提供的版本。
for i in {1..10}; do curl -s http://`kubectl get svc fortune-app -o=jsonpath="{.status.loadBalancer.ingress[0].ip}"`/version; echo;
done
- 執行這項要求數次,您就會看到要求大部分由 1.0.0 版處理,小部分由 2.0.0 版處理。
測試已完成的工作
請點選下方的「Check my progress」,確認實驗室進度。如果您已成功建立初期測試部署,就會看到評量分數。
初期測試部署
工作 5:藍綠部署
在藍綠部署中,您會建立兩個獨立的 Deployment,並透過更新 Service 的選取器,在兩者之間切換流量。
Service
- 首先,請更新 Service,使 Service 只指向「藍色」版本 (1.0.0)。
kubectl apply -f services/fortune-app-blue-service.yaml
藍綠部署的更新方式
- 現在為 2.0.0 版建立新的「綠色」Deployment。
kubectl create -f deployments/fortune-app-green.yaml
- 綠色 Deployment 啟動後,請確認目前提供的版本仍為 1.0.0。
curl http://`kubectl get svc fortune-app -o=jsonpath="{.status.loadBalancer.ingress[0].ip}"`/version
- 接著請更新 Service,將 Service 指向新的「綠色」版本:
kubectl apply -f services/fortune-app-green-service.yaml
- 更新 Service 後,系統會立即使用「綠色」Deployment。現在可以確認系統是否會一律提供 2.0.0 版:
curl http://`kubectl get svc fortune-app -o=jsonpath="{.status.loadBalancer.ingress[0].ip}"`/version
藍綠復原
- 如要復原,只要重新套用「藍色」Deployment 的 Service 資訊清單即可:
kubectl apply -f services/fortune-app-blue-service.yaml
- 完成更新 Service,就代表您復原成功。確認目前使用的是 1.0.0 版:
curl http://`kubectl get svc fortune-app -o=jsonpath="{.status.loadBalancer.ingress[0].ip}"`/version
太好了!您已瞭解什麼是藍綠部署,以及如何更新需要立刻切換版本的應用程式。
藍綠部署
恭喜!
您已瞭解如何使用 kubectl
指令列工具執行更多工作,並在 YAML 檔案設置多種形式的 Deployment 設定,藉此啟動、更新 Deployment 並調度相關資源。
Google Cloud 教育訓練與認證
協助您瞭解如何充分運用 Google Cloud 的技術。我們的課程會介紹專業技能和最佳做法,讓您可以快速掌握要領並持續進修。我們提供從基本到進階等級的訓練課程,並有隨選、線上和虛擬課程等選項,方便您抽空參加。認證可協助您驗證及證明自己在 Google Cloud 技術方面的技能和專業知識。
使用手冊上次更新日期:2025 年 8 月 18 日
實驗室上次測試日期:2025 年 8 月 18 日
Copyright 2025 Google LLC 保留所有權利。Google 和 Google 標誌是 Google LLC 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。