访问 700 多个实验和课程

建立 Google Kubernetes Engine Deployment

实验 1 小时 universal_currency_alt 5 积分 show_chart 入门级
info 此实验可能会提供 AI 工具来支持您学习。
访问 700 多个实验和课程

總覽

在本實驗室中,您將瞭解使用 Deployment 資訊清單的基本知識。資訊清單是包含 Deployment 所需設定的檔案,可以在不同的 Pod 上使用。變更資訊清單並不困難。

目標

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

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

設定實驗室

存取實驗室

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

  1. 按一下「Start Lab」按鈕。如果研究室會產生費用,畫面中會出現選擇付款方式的彈出式視窗。左側的「Lab Details」窗格會顯示下列項目:

    • 「Open Google Cloud console」按鈕
    • 剩餘時間
    • 必須在這個研究室中使用的臨時憑證
    • 完成這個實驗室所需的其他資訊 (如有)
  2. 點選「Open Google Cloud console」;如果使用 Chrome 瀏覽器,也能按一下滑鼠右鍵,選取「在無痕視窗中開啟連結」

    接著,實驗室會啟動相關資源並開啟另一個分頁,當中顯示「登入」頁面。

    提示:您可以在不同的視窗中並排開啟分頁。

    注意:如果頁面中顯示「選擇帳戶」對話方塊,請點選「使用其他帳戶」
  3. 如有必要,請將下方的 Username 貼到「登入」對話方塊。

    {{{user_0.username | "Username"}}}

    您也可以在「Lab Details」窗格找到 Username

  4. 點選「下一步」

  5. 複製下方的 Password,並貼到「歡迎使用」對話方塊。

    {{{user_0.password | "Password"}}}

    您也可以在「Lab Details」窗格找到 Password

  6. 點選「下一步」

    重要事項:請務必使用實驗室提供的憑證,而非自己的 Google Cloud 帳戶憑證。 注意:如果使用自己的 Google Cloud 帳戶來進行這個實驗室,可能會產生額外費用。
  7. 按過後續的所有頁面:

    • 接受條款及細則。
    • 由於這是臨時帳戶,請勿新增救援選項或雙重驗證機制。
    • 請勿申請免費試用。

Google Cloud 控制台稍後會在這個分頁開啟。

注意:如要查看列出 Google Cloud 產品和服務的選單,請點選左上角的「導覽選單」,或在「搜尋」欄位輸入服務或產品名稱。 「導覽選單」圖示

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

啟動 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:建立 Deployment 資訊清單並部署至叢集

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

連線至實驗室 GKE 叢集

  1. 在 Cloud Shell 輸入下列指令,設定可用區和叢集名稱的環境變數:
export my_region={{{ project_0.default_region | REGION }}} export my_cluster=dev-cluster
  1. 在 Cloud Shell 為 kubectl 設定 Tab 鍵完成功能:
source <(kubectl completion bash)
  1. 在 Cloud Shell 輸入下列指令,為 kubectl 指令列工具設定叢集的存取權:
gcloud container clusters get-credentials $my_cluster --region $my_region

建立 Deployment 資訊清單

建立 Deployment 時,應使用名稱為 nginx-deployment.yaml 的範例 Deployment 資訊清單。這個 Deployment 會設為執行三個 Pod 備用資源,每個 Pod 都有一個 nginx 容器,用來監聽 TCP 通訊埠 80。

  1. 執行下列 nano 指令,建立 nginx-deployment.yaml 檔案並在編輯器中開啟:
nano nginx-deployment.yaml
  1. 開啟 nano 編輯器後,將下列指令貼到 nginx-deployment.yaml 檔案:
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.27.0 ports: - containerPort: 80
  1. 依序按下 Ctrl+OEnter 鍵,儲存編輯過的檔案。

  2. 按下 Ctrl+X 鍵,退出 nano 文字編輯器。

  3. 執行下列指令來部署資訊清單:

kubectl apply -f ./nginx-deployment.yaml
  1. 執行下列指令即可查看 Deployment 清單:
kubectl get deployments

輸出內容應如範例所示。

輸出內容

NAME READY UP-TO-DATE AVAILABLE AGE nginx-deployment 0/3 3 0 3s
  1. 數分鐘後重複執行該指令,直到指令回報「目前」的 Deployment 數量,等同於「所需」的 Deployment 數量為止。

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

輸出內容

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

點選「Check my progress」,確認目標已達成。 建立和部署 nginx Deployment 資訊清單

工作 2:手動擴充和縮減 Deployment 中的 Pod 數量

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

這個工作的目標就是在 Google Cloud 控制台及 Cloud Shell 擴充和縮減 Pod。

在控制台中擴充和縮減 Pod

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

這個動作會縮減叢集。您應該會在「代管的 Pod」下方看到 Pod 的更新狀態,有時候需要先按一下「重新整理」

在殼層中擴充和縮減 Pod

  1. 切換回 Cloud Shell 瀏覽器分頁。
  2. 執行下列指令,在 Cloud Shell 查看 Deployment 中的 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. 執行下列指令,查看 Deployment 中的 Pod 清單:
kubectl get deployments

輸出內容

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

工作 3:觸發 Deployment 的推出和復原

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

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

觸發 Deployment 推出

  1. 執行下列指令,在 Deployment 更新 nginx 版本:
kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.28.0

這會將 Deployment 中的容器映像檔更新至 nginx v1.28.0

  1. 執行下列指令,為推出作業加上異動詳情的註解:
kubectl annotate deployment nginx-deployment kubernetes.io/change-cause="version change to 1.28.0" --overwrite=true
  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. 取得 Deployment 清單,驗證變更內容:
kubectl get deployments

輸出內容應如範例所示。

輸出內容

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

點選「Check my progress」,確認目標已達成。 更新 Deployment 中的 nginx 版本

  1. 查看 Deployment 的推出記錄:
kubectl rollout history deployment nginx-deployment

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

輸出內容

deployments "nginx-deployment" REVISION CHANGE-CAUSE 1 2 version change to 1.28.0

觸發 Deployment 復原程序

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

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

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

輸出內容

deployments "nginx-deployment" REVISION CHANGE-CAUSE 2 version change to 1.28.0 3 注意:「CHANGE-CAUSE」部分未列出最近一次更新內容,是因為我們並未使用 kubectl annotate 指令。
  1. 查看最新 Deployment 修訂版本的詳細資料:
kubectl rollout history deployment/nginx-deployment --revision=3

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

輸出內容

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

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

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

在資訊清單中定義 Service 類型

您會看到一個名稱為 service-nginx.yaml 的資訊清單檔案,可部署 LoadBalancer Service 類型。這項 Service 會設為將 TCP 通訊埠 60000 的傳入流量分配給通訊埠 80,並適用於任何標籤為 app: nginx 的容器。

  1. 執行下列 nano 指令,建立 service-nginx.yaml 檔案並在編輯器中開啟:
nano service-nginx.yaml
  1. 開啟 nano 編輯器後,將下列指令貼到 service-nginx.yaml 檔案:
apiVersion: v1 kind: Service metadata: name: nginx spec: type: LoadBalancer selector: app: nginx ports: - protocol: TCP port: 60000 targetPort: 80
  1. 依序按下 Ctrl+OEnter 鍵,儲存編輯過的檔案。

  2. 按下 Ctrl+X 鍵,退出 nano 文字編輯器。

  3. 在 Cloud Shell 執行下列指令,部署資訊清單:

kubectl apply -f ./service-nginx.yaml

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

驗證 LoadBalancer 建立

  1. 執行下列指令,查看 nginx Service 的詳細資料:
kubectl get service nginx

輸出內容應如範例所示。

輸出內容

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

點選「Check my progress」,確認目標已達成。 部署 LoadBalancer Service 類型的資訊清單檔案

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

初期測試部署是單獨的 Deployment,用來測試應用程式新版本。單一 Service 會同時指定初期測試版本和正常 Deployment 為目標,且可以將部分使用者導向至初期測試版本,降低新版本的風險。

您會在這項工作中建立初期測試部署,僅部署單一 Pod,但執行的 nginx 版本比主要 Deployment 還新。

  1. 執行下列 nano 指令,建立 nginx-canary.yaml 檔案並在編輯器中開啟:
nano nginx-canary.yaml
  1. 開啟 nano 編輯器後,將下列指令貼到 nginx-canary.yaml 檔案:
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.28.0 spec: containers: - name: nginx image: nginx:1.28.0 ports: - containerPort: 80
  1. 依序按下 Ctrl+OEnter 鍵,儲存編輯過的檔案。

  2. 按下 Ctrl+X 鍵,退出 nano 文字編輯器。

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

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

點選「Check my progress」,確認目標已達成。 建立初期測試部署

工作階段相依性

在這個實驗室中採用的 Service 設定,無法確保來自單一用戶端的所有要求,一律會連線至相同的 Pod。每項要求都會單獨處理,而且有可能連線至正常 nginx 或 nginx-canary 的 Deployment。

如果初期測試版的功能有重大變更,切換到不同版本可能會造成問題。為了防止這種情況,請在 Service 規範中將 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 Cloud Skills Boost 會移除您使用的資源,並清除所用帳戶。

您可以針對研究室的使用體驗評分。請選取合適的星級評等並提供意見,然後按一下「Submit」(提交)

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

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

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

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

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

准备工作

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

使用无痕浏览模式

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

登录控制台

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

此内容目前不可用

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

太好了!

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

一次一个实验

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

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

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