实验设置说明和要求
保护您的账号和进度。请务必在无痕浏览器窗口中,使用实验凭证运行此实验。

建立 Google Kubernetes Engine 部署作業 (AWS)

实验 1 小时 universal_currency_alt 5 积分 show_chart 入门级
info 此实验可能会提供 AI 工具来支持您学习。
此内容尚未针对移动设备进行优化。
为获得最佳体验,请在桌面设备上访问通过电子邮件发送的链接。

總覽

在本研究室中,您將探索使用部署作業資訊清單的基本知識。資訊清單是包含部署所需設定的檔案,可以在不同的 Pod 上使用。資訊清單容易改變。

目標

本實驗室將說明如何執行下列工作:

  • 建立部署作業資訊清單、部署到叢集,並在節點停用時驗證 Pod 重新排程作業。
  • 在 Pod 部署作業中觸發手動向上擴充和縮減。
  • 觸發部署的推出 (滾動式更新至新版本) 和復原作業。
  • 執行初期測試部署作業。

設定實驗室

存取研究室

每個實驗室都會提供新的 Google Cloud 專案和一組資源,讓您在時限內免費使用。

  1. 請透過無痕視窗登入 Google Skills。

  2. 注意實驗室時間限制 (例如 1:15:00),並確實在該時限內完成相關工作。實驗室無法暫停。您可以重新開始,但原有進度不會保留。

  3. 準備就緒後,請按一下「Start lab」

  4. 請記下研究室憑證 (使用者名稱密碼),這組資訊將用於登入 Google Cloud 控制台。

  5. 點選「Open Google Console」

  6. 點選「Use another account」,然後複製本實驗室的憑證,並貼到提示訊息中。 如果使用其他憑證,會出現錯誤訊息或產生費用

  7. 接受條款,然後略過資源復原頁面。

完成初始登入步驟後,就會看到專案資訊主頁。

啟動 Google Cloud Shell

Google Cloud Shell 是搭載多項開發工具的虛擬機器,提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作。

Google Cloud Shell 提供指令列存取權,方便您使用 Google Cloud 資源。

  1. 在 Cloud 控制台的右上方找到工具列,然後按一下「開啟 Cloud Shell」按鈕。

    特別標明的「Cloud Shell」圖示

  2. 按一下「繼續」

佈建並連線至環境的作業需要一些時間才能完成。連線建立完成即代表已通過驗證,而且專案已設為您的「PROJECT_ID」。示例如下:

在 Cloud Shell 終端機中,特別標明了專案 ID

gcloud 是 Google Cloud 的指令列工具,已預先安裝於 Cloud Shell,並支援 Tab 鍵完成功能。

  • 您可以使用下列指令來列出使用中的帳戶:
gcloud auth list

輸出內容:

Credentialed accounts: - @.com (active)

輸出內容示例:

Credentialed accounts: - google1623327_student@qwiklabs.net
  • 您可以使用下列指令來列出專案 ID:
gcloud config list project

輸出內容:

[core] project =

輸出內容示例:

[core] project = qwiklabs-gcp-44776a13dea667a6 注意事項:如需 gcloud 的完整說明,請參閱 gcloud CLI 總覽指南

工作 1:建立部署作業資訊清單並部署至叢集

在這項工作中,為叢集內的 Pod 建立部署作業資訊清單。

連線至研究室 GKE 叢集

  1. 在 Cloud Shell 輸入下列指令,設定可用區和叢集名稱的環境變數:
export my_region={{{ project_0.default_region | REGION }}} export my_cluster=my-cluster
  1. 在 Cloud Shell 為 kubectl 設定 Tab 鍵完成功能:
source <(kubectl completion bash)
  1. 在 Cloud Shell 輸入下列指令,為 kubectl 指令列工具設定叢集的存取權:
gcloud container clusters get-credentials $my_cluster --region $my_region
  1. 在 Cloud Shell 輸入下列指令,將存放區複製到實驗室 Cloud Shell:
git clone https://github.com/GoogleCloudPlatform/training-data-analyst
  1. 建立一個軟連結,做為工作目錄的捷徑:
ln -s ~/training-data-analyst/courses/ak8s/v1.1 ~/ak8s
  1. 切換到包含研究室範例檔案的目錄:
cd ~/ak8s/Deployments/

建立部署作業資訊清單

使用名稱為 nginx-deployment.yaml 的範例部署作業資訊清單,以建立部署作業。這項部署作業會設為執行三個 Pod 備用資源,每個 Pod 中都有一個 nginx 容器,用於監聽 TCP 通訊埠 80:

apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80
  1. 若要部署資訊清單,請執行下列指令:
kubectl apply -f ./nginx-deployment.yaml
  1. 若要查看部署作業清單,請執行下列指令:
kubectl get deployments

輸出內容應如範例所示。

輸出內容:

NAME READY UP-TO-DATE AVAILABLE AGE nginx-deployment 0/3 3 0 3s
  1. 請等待數秒後重複該指令,直到指令回報的當前部署作業所列數量與所需部署作業數量相符。

最終輸出內容應如範例所示。

輸出內容:

NAME READY UP-TO-DATE AVAILABLE AGE nginx-deployment 3/3 3 3 42s

點選「檢查我的進度」 確認目標已達成。 建立和部署資訊清單 nginx 部署作業

工作 2:手動向上擴充和縮減部署作業中的 Pod 數量

有時候,您想關閉 Pod 執行個體。而有時候,又會想要執行十個 Pod。在 Kubernetes 中,可以將特定的 Pod 調整至所需的執行個體數量。若要關閉,請將資源調度率降至零。

在本工作中,於 Google Cloud 控制台和 Cloud Shell 擴充和縮減 Pod。

在控制台中擴充和縮減 Pod

  1. 切換到 Google Cloud 控制台分頁。
  2. 在「導覽選單」 「導覽選單」圖示 中,依序點選「Kubernetes Engine」>「工作負載」
  3. 點選「nginx-deployment」(也就是您的部署作業),開啟部署作業的詳細資料頁面。
  4. 依序點選頂端的「動作」>「資源調度」>「編輯備用資源」
  5. 輸入「1」,然後點選「調整資源配置」

這個動作會縮減叢集。您應該會在「代管的 Pod」( 下方看到 Pod 的更新狀態。您可能必須先按一下「重新整理」

在殼層中擴充和縮減 Pod

  1. 切換回 Cloud Shell 瀏覽器分頁。
  2. 若要在 Cloud Shell 查看部署作業中的 Pod 清單,請執行下列指令:
kubectl get deployments

輸出內容:

NAME READY UP-TO-DATE AVAILABLE AGE nginx-deployment 1/1 1 1 3m
  1. 若要將 Pod 擴充回三個備用資源,請執行下列指令:
kubectl scale --replicas=3 deployment nginx-deployment
  1. 若要查看部署作業中的 Pod 清單,請執行下列指令:
kubectl get deployments

輸出內容:

NAME READY UP-TO-DATE AVAILABLE AGE nginx-deployment 3/3 3 3 4m

工作 3:觸發部署作業的推出和復原

僅有在部署作業的 Pod 範本 (即 .spec.template) 變更時,才會觸發部署作業的推出,例如更新範本的標籤或容器映像檔。其他更新 (例如調整部署作業) 則不會觸發推出。

在本項工作中觸發部署作業推出,然後觸發部署作業復原。

觸發部署作業推出

  1. 執行下列指令,在部署作業更新 nginx 版本:
kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.9.1

這會將部署作業中的容器映像檔更新至 nginx v1.9.1

  1. 若要查看推出狀態,請執行下列指令:
kubectl rollout status deployment.v1.apps/nginx-deployment

輸出內容應如範例所示。

輸出內容:

Waiting for rollout to finish: 1 out of 3 new replicas updated... Waiting for rollout to finish: 1 out of 3 new replicas updated... Waiting for rollout to finish: 1 out of 3 new replicas updated... Waiting for rollout to finish: 2 out of 3 new replicas updated... Waiting for rollout to finish: 2 out of 3 new replicas updated... Waiting for rollout to finish: 2 out of 3 new replicas updated... Waiting for rollout to finish: 1 old replicas pending termination... Waiting for rollout to finish: 1 old replicas pending termination... deployment "nginx-deployment" successfully rolled out
  1. 取得部署作業清單,驗證變更內容:
kubectl get deployments

輸出內容應如範例所示。

輸出內容:

NAME READY UP-TO-DATE AVAILABLE AGE nginx-deployment 3/3 3 3 6m

點選「檢查我的進度」 確認目標已達成。 更新部署作業中的 nginx 版本

  1. 查看部署作業的推出記錄:
kubectl rollout history deployment nginx-deployment

輸出內容應如範例所示。輸出內容可能不會完全符合。

輸出內容:

deployments "nginx-deployment" REVISION CHANGE-CAUSE 1 2 kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.9.1 --record=true

觸發部署作業復原程序

若要復原物件推出,可以使用 kubectl rollout undo 指令。

  1. 若要將 nginx 部署作業復原至先前的版本,請執行以下指令:
kubectl rollout undo deployments nginx-deployment
  1. 查看更新後的部署作業推出記錄:
kubectl rollout history deployment nginx-deployment

輸出內容應如範例所示。輸出內容可能不會完全符合。

輸出內容:

deployments "nginx-deployment" REVISION CHANGE-CAUSE 2 kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.9.1 --record=true 3
  1. 查看最新部署作業修訂版本的詳細資料:
kubectl rollout history deployment/nginx-deployment --revision=3

輸出內容應如範例所示。輸出內容可能不會完全符合,但會顯示目前修訂版本已復原為 nginx:1.7.9

輸出內容:

deployments "nginx-deployment" with revision #3 Pod Template: Labels: app=nginx pod-template-hash=3123191453 Containers: nginx: Image: nginx:1.7.9 Port: 80/TCP Host Port: 0/TCP Environment: Mounts: Volumes:

工作 4:在資訊清單中定義服務類型

在這項工作中,建立並驗證控制應用程式傳入流量的服務。可將服務類型設定為 ClusterIP、NodePort,或是 LoadBalancer。在本研究室中設定為 LoadBalancer。

在資訊清單中定義服務類型

會產生一個名稱為 service-nginx.yaml 的資訊清單檔案,可部署 LoadBalancer 服務類型。本服務設定能分配 TCP 通訊埠 60000 到通訊埠 80 的傳入流量,適用在任何標籤為 app: nginx 的容器。

apiVersion: v1 kind: Service metadata: name: nginx spec: type: LoadBalancer selector: app: nginx ports: - protocol: TCP port: 60000 targetPort: 80
  • 若要在 Cloud Shell 部署資訊清單,請執行下列指令:
kubectl apply -f ./service-nginx.yaml

這個資訊清單會定義服務,並能套用在與選取器對應的 Pod 上。在這種情況下,資訊清單適用於您在工作 1 中所部署的 nginx 容器。本服務也適用於其他具有 app: nginx 標籤的 Pod,包括在服務後所建立的任何 Pod。

驗證 LoadBalancer 建立

  1. 若要查看 nginx 服務的詳細資料,請執行下列指令:
kubectl get service nginx

輸出內容應如範例所示。

輸出內容:

NAME CLUSTER_IP EXTERNAL_IP PORT(S) SELECTOR AGE nginx 10.X.X.X X.X.X.X 60000/TCP run=nginx 1m
  1. 如果看到外部 IP,請在瀏覽器的新分頁中開啟 http://[EXTERNAL_IP]:60000/,查看透過網路負載平衡提供的伺服器。
注意:「ExternalIP」欄位可能需要幾秒才會填入位址,這是正常現象。只要每隔幾秒重新執行 kubectl get services nginx 指令,直到該欄位填入內容即可。

點選「檢查我的進度」 確認目標已達成。 部署 LoadBalancer 服務類型的部署資訊清單檔案

工作 5:執行初期測試部署

初期測試部署是一個分隔的部署作業,用於測試應用程式新版本。單一服務會同時指定初期測試版本和一般部署作業做為目標,且可以將部分使用者導向至初期測試版本,以降低新版本的風險。

與主要部署作業相比,以提供的資訊清單檔案 nginx-canary.yaml 部署單一 Pod,該 Pod 執行的 nginx 版本會較新。在這項工作中,您會使用這個新的部署作業檔案,建立初期測試部署:

apiVersion: apps/v1 kind: Deployment metadata: name: nginx-canary labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx track: canary Version: 1.9.1 spec: containers: - name: nginx image: nginx:1.9.1 ports: - containerPort: 80

在上一個工作中部署的 nginx Service 資訊清單,會使用標籤選取器以鎖定具有 app: nginx 標籤的 Pod。正常部署作業和新的初期測試部署都有 app: nginx 標籤。服務會將傳入連線分配到正常 Pod 和初期測試部署 Pod。與一般部署作業相比,初期測試部署的備用資源 (Pod) 較少,因此僅供較少的使用者使用。

  1. 根據設定檔建立初期測試部署:
kubectl apply -f nginx-canary.yaml
  1. 部署作業完成後,確認 nginx 和 nginx 初期測試部署是否確實存在:
kubectl get deployments
  1. 切換回連結至外部 LoadBalancer 服務 IP 的瀏覽器分頁,並重新整理頁面。您應該仍會看到 Welcome to nginx 標準頁面。
  2. 切換回 Cloud Shell,將主要部署作業的備用資源數量縮減為 0 個:
kubectl scale --replicas=0 deployment nginx-deployment
  1. 驗證目前執行中的唯一備用資源是初期測試部署:
kubectl get deployments
  1. 切換回連結至外部 LoadBalancer 服務 IP 的瀏覽器分頁,並重新整理頁面。您應該會持續看到標準的 Welcome to nginx 頁面,顯示服務正在自動平衡初期測試部署的流量。

點選「檢查我的進度」 確認目標已達成。 建立初期測試部署

工作階段相依性

在這個研究室中採用的服務設定,無法確保來自單一用戶端的所有要求,一律會連線至相同的 Pod。每項要求都會單獨處理,而且有可能連線至一般 nginx 部署作業或 nginx 初期測試部署。

如果初期測試版的功能有重大變更,切換到不同版本可能會造成問題。為了防止這種情況,請在服務規範中將 sessionAffinity 欄位設定為 ClientIP,即可在用戶端提出第一個要求時,決定後續連線會使用哪一個 Pod。

例如:

apiVersion: v1 kind: Service metadata: name: nginx spec: type: LoadBalancer sessionAffinity: ClientIP selector: app: nginx ports: - protocol: TCP port: 60000 targetPort: 80

關閉研究室

如果您已完成實驗室,請點選「End Lab」。Google Skills 會清除您使用的資源和帳戶。

您可以為實驗室的使用體驗評分。請選取合適的星級評等並提供意見,然後按一下「Submit」

星級評等代表您的滿意程度:

  • 1 星 = 非常不滿意
  • 2 星 = 不滿意
  • 3 星 = 普通
  • 4 星 = 滿意
  • 5 星 = 非常滿意

如果不想提供意見回饋,您可以直接關閉對話方塊。

如有任何想法、建議或指教,請透過「Support」分頁提交。

Copyright 2026 Google LLC 保留所有權利。Google 和 Google 標誌是 Google LLC 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。

准备工作

  1. 实验会创建一个 Google Cloud 项目和一些资源,供您使用限定的一段时间
  2. 实验有时间限制,并且没有暂停功能。如果您中途结束实验,则必须重新开始。
  3. 在屏幕左上角,点击开始实验即可开始

使用无痕浏览模式

  1. 复制系统为实验提供的用户名密码
  2. 在无痕浏览模式下,点击打开控制台

登录控制台

  1. 使用您的实验凭证登录。使用其他凭证可能会导致错误或产生费用。
  2. 接受条款,并跳过恢复资源页面
  3. 除非您已完成此实验或想要重新开始,否则请勿点击结束实验,因为点击后系统会清除您的工作并移除该项目

此内容目前不可用

一旦可用,我们会通过电子邮件告知您

太好了!

一旦可用,我们会通过电子邮件告知您

一次一个实验

确认结束所有现有实验并开始此实验

使用无痕浏览模式运行实验

使用无痕模式或无痕浏览器窗口是运行此实验的最佳方式。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。