arrow_back

建立 Google Kubernetes Engine Deployment (Azure)

登录 加入
访问 700 多个实验和课程

建立 Google Kubernetes Engine Deployment (Azure)

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

假設您是一位雲端工程師,負責維護經常增加新功能的重要應用程式,您的任務是盡可能降低對使用者的影響和應用程式停機時間,同時推出新功能和更新。您負責的是部署於 Kubernetes 的容器化應用程式。有時您必須因應使用者需求的變化,向上擴充或縮減應用程式的資源,此外還要控管來自網際網路的連入流量。維護及更新應用程式時,您必須考慮下列事項:

  • 如何為叢集建立 Deployment 資訊清單?
  • 如何手動調度 Deployment 的 Pod 數量?
  • 如何建立 Service,用於控管應用程式的傳入流量?
  • 如何推出更新,但盡可能不造成服務中斷?
  • 如何執行初期測試部署,在全面推出之前測試新功能?

身為熟悉 Azure Kubernetes Service (AKS) 的雲端專業人員,您可能已有下列經驗:使用 YAML 資訊清單檔案,在 AKS 執行 Kubernetes 部署作業;使用 DevOps pipeline,將應用程式程式碼和容器提供給 Kubernetes 叢集。

如要依據需求調整 Pod 數量,您可以手動編輯資訊清單檔案,或使用 kubectl 指令。如要控管應用程式的傳入流量,您必須在 DevOps pipeline 規劃負載平衡器部署作業,然後執行 pipeline。需要更新容器映像檔時,您會執行 DevOps pipeline 來提供容器映像檔,然後使用 kubectl 指令觸發 Deployment 推出作業。

如要執行初期測試版本更新,您必須安裝 Prometheus、設定 pipeline、新增資訊清單檔案,然後執行開發作業 pipeline。

將這些概念納入考量後,接下來您將實際瞭解如何建立 Google Kubernetes Engine (GKE) 的 Deployment 資訊清單,進而建立、更新 Deployment 並調度資源。

總覽

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

目標

在本研究室中,瞭解如何執行下列工作:

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

設定研究室

存取研究室

在每個研究室中,您都能在固定時間內免付費建立新的 Google Cloud 專案,並使用一組資源。

  1. 請透過無痕式視窗登入 Qwiklabs。

  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_zone={{{project_0.default_zone|Zone}}} export my_cluster=standard-cluster-1
  1. 在 Cloud Shell 輸入下列指令,為 kubectl 設定 Tab 鍵完成功能:
source <(kubectl completion bash)
  1. 在 Cloud Shell 中,使用以下指令為 kubectl 指令列工具設定您叢集的存取權:
gcloud container clusters get-credentials $my_cluster --zone $my_zone
  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

點選「Check my progress」確認目標已達成。 建立和部署資訊清單 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」,然後點選「調整資源配置」

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

在殼層中擴充和縮減 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 --record

這會將部署作業中的容器映像檔更新至 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

點選「Check my progress」確認目標已達成。 更新部署作業中的 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 指令,直到該欄位填入內容即可。

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

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

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

與主要部署作業相比,以提供的資訊清單檔案 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 服務資訊清單,會使用標籤選取器以鎖定具有 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 頁面,顯示服務正在自動平衡初期測試部署的流量。

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

工作階段相依性

在這個研究室中採用的服務設定,無法確保來自單一用戶端的所有要求,一律會連線至相同的 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

摘要

在這個實驗室中,您瞭解 GKE 如何運用資訊清單檔案,來部署應用程式並調度資源,以及如何執行初期測試版本更新。以下是 GKE 和 AKS 主要的異同處:

相似處:

GKE 和 EKS 都是代管 Kubernetes 服務,可讓開發人員部署、管理容器化應用程式及調度資源。

  • 用於 Kubernetes Deployment 的 YAML 檔案,在 GKE 和 AKS 的基本架構和語法完全相同。
  • AKS 和 GKE 都是使用 kubectl 指令。

差異處:

  • 與 AKS 部署作業不同,您可以在 GKE 指定叢集、Pod 和管理機制的屬性,而不需建立 DevOps pipeline。這是因為 GKE 具備必要的後端基礎架構,讓您能依據資訊清單檔案執行佈建工作。

關閉研究室

如果您已完成研究室,請按一下「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. 除非您已完成此实验或想要重新开始,否则请勿点击结束实验,因为点击后系统会清除您的工作并移除该项目

此内容目前不可用

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

太好了!

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

一次一个实验

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

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

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