访问 700 多个实验和课程

创建 Google Kubernetes Engine 部署作业

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

概览

在本实验中,您将学习有关使用部署清单的基础知识。清单是包含完成部署所需配置的文件,可用于多个不同的 Pod。清单文件易于修改。

目标

在本实验中,您将学习如何执行以下任务:

  • 创建部署清单、部署到集群,并验证当节点被停用时 Pod 会重新安排。
  • 触发手动增加和减少部署作业中的 Pod 数量。
  • 触发部署发布(滚动更新到新版本)和回滚。
  • 执行 Canary 部署。

实验设置

访问实验

对于每个实验,您都会免费获得一个新的 Google Cloud 项目及一组资源,它们都有固定的使用时限。

  1. 点击开始实验按钮。如果该实验需要付费,系统会打开一个弹出式窗口供您选择付款方式。左侧是实验详细信息面板,其中包含以下各项:

    • 打开 Google Cloud 控制台按钮
    • 剩余时间
    • 进行该实验时必须使用的临时凭据
    • 帮助您逐步完成本实验所需的其他信息(如果需要)
  2. 点击打开 Google Cloud 控制台(如果您使用的是 Chrome 浏览器,请右键点击并选择在无痕式窗口中打开链接)。

    该实验会启动资源并打开另一个标签页,显示登录页面。

    提示:将这些标签页安排在不同的窗口中,并排显示。

    注意:如果您看见选择账号对话框,请点击使用其他账号
  3. 如有必要,请复制下方的用户名,然后将其粘贴到登录对话框中。

    {{{user_0.username | "<用户名>"}}}

    您也可以在实验详细信息面板中找到用户名

  4. 点击下一步

  5. 复制下面的密码,然后将其粘贴到欢迎对话框中。

    {{{user_0.password | "<密码>"}}}

    您也可以在实验详细信息面板中找到密码

  6. 点击下一步

    重要提示:您必须使用实验提供的凭据。请勿使用您的 Google Cloud 账号凭据。 注意:在本实验中使用您自己的 Google Cloud 账号可能会产生额外费用。
  7. 继续在后续页面中点击以完成相应操作:

    • 接受条款及条件。
    • 由于这是临时账号,请勿添加账号恢复选项或双重验证。
    • 请勿注册免费试用。

片刻之后,系统会在此标签页中打开 Google Cloud 控制台。

注意:如需查看列有 Google Cloud 产品和服务的菜单,请点击左上角的导航菜单,或在搜索字段中输入服务或产品的名称。 “导航菜单”图标

完成初始登录步骤后,系统会显示项目信息中心。

激活 Google Cloud Shell

Google Cloud Shell 是一种装有开发者工具的虚拟机。它提供了一个永久性的 5GB 主目录,并且在 Google Cloud 上运行。

Google Cloud Shell 提供了可用于访问您的 Google Cloud 资源的命令行工具。

  1. 在 Cloud 控制台右上角的工具栏中,点击“打开 Cloud Shell”按钮。

    突出显示的 Cloud Shell 图标

  2. 点击继续

预配并连接到环境需要一些时间。如果您连接成功,即表示您已通过身份验证,且项目 ID 会被设为您的 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=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

创建部署清单

您将使用名为 nginx-deployment.yaml 的示例部署清单创建一个部署作业。这个部署作业配置为运行三个 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+O 组合键,然后按 Enter 键,保存修改后的文件。

  2. Ctrl+X 组合键,退出 nano 文本编辑器。

  3. 如需部署此清单,请执行以下命令:

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 状态正在更新。您可能需要点击刷新

在 Shell 中增加和减少 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.28.0

此命令会将部署中的容器映像更新为 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. 获取部署列表以验证变更:
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 version change to 1.28.0

触发部署回滚

如需回滚对象的发布,可以使用 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 version change to 1.28.0 3 注意:CHANGE-CAUSE 的最新更新内容为空白,因为我们没有使用 kubectl annotate 命令。
  1. 查看最新部署版本的详细信息:
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. 定义清单中的服务类型

在此项任务中,您将创建并验证一个控制应用入站流量的服务。服务可以配置为 ClusterIP、NodePort 或 LoadBalancer 类型。在此实验中,您将配置 LoadBalancer。

在清单中定义服务类型

一个名为 service-nginx.yaml 的清单文件已提供给您,用于部署 LoadBalancer 服务类型。此服务配置为在所有带有 app: nginx 标签的容器上,将 TCP 端口 60000 上的入站流量转发到端口 80。

  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+O 组合键,然后按 Enter 键,保存修改后的文件。

  2. Ctrl+X 组合键,退出 nano 文本编辑器。

  3. 要在 Cloud Shell 中部署清单,请执行如下命令:

kubectl apply -f ./service-nginx.yaml

此清单定义了一个服务,并将该服务应用于与选择器对应的 Pod。在本例中,该清单应用于您在任务 1 中部署的 nginx 容器。此服务也会应用于任何其他带有 app: nginx 标签的 Pod,包括任何在该服务之后创建的 Pod。

验证已创建 LoadBalancer

  1. 如需查看 nginx 服务的详细信息,请执行如下命令:
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 命令,直到该字段中填充数据。

点击“检查我的进度”,验证已完成以下目标: 部署清单文件以部署 LoadBalancer 服务类型

任务 5. 执行 Canary 部署

Canary 部署是一种用于测试应用新版本的独立部署。单个服务同时定位到 Canary 部署和普通部署,还会引导部分用户使用 Canary 版本,以降低新版本的风险。

在此任务中,您将创建一个 Canary 部署,该部署会运行一个 Pod,其中包含的 nginx 映像版本比主部署的版本更新。

  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+O 组合键,然后按 Enter 键,保存修改后的文件。

  2. Ctrl+X 组合键,退出 nano 文本编辑器。

您在上一个任务中部署的 nginx 服务的清单使用标签选择器来定位带有 app: nginx 标签的 Pod。常规部署和这个新的 Canary 部署都带有 app: nginx 标签。入站连接将由该服务分发到常规部署 Pod 和 Canary 部署 Pod。Canary 部署的副本数量(Pod 数)少于常规部署,因此可使用 Canary 部署的用户数也少于常规部署。

  1. 基于该配置文件创建 Canary 部署作业:
kubectl apply -f ./nginx-canary.yaml
  1. 部署完成后,确认 nginx 和 nginx Canary 部署都在列表中:
kubectl get deployments
  1. 切换回连接到外部 LoadBalancer 服务 IP 的浏览器标签页并刷新页面。您看到的应该仍是标准的 Welcome to nginx 页面。
  2. 切换回 Cloud Shell 并将主部署减至 0 个副本:
kubectl scale --replicas=0 deployment nginx-deployment
  1. 确认正在运行的唯一副本现在是 Canary 部署:
kubectl get deployments
  1. 切换回连接到外部 LoadBalancer 服务 IP 的浏览器标签页并刷新页面。您看到的应该仍是标准的 Welcome to nginx 页面,显示服务正自动将流量均衡分配至 Canary 部署。

点击“检查我的进度”,验证已完成以下目标: 创建 Canary 部署作业

会话亲和性

此实验使用的服务配置不能确保来自同一个客户端的所有请求始终连接到同一 Pod。每个请求都是单独处理的,可能连接到常规 nginx 部署,也可能连接到 nginx Canary 部署。

如果 Canary 版本中的功能发生重大变化,那么在不同版本之间切换可能会导致出现问题。如果您需要确保客户端的首次请求所连接的 Pod 被用于其所有后续连接,则可以在服务规范中将 sessionAffinity 字段设置为 ClientIP,从而实现会话亲和性。

例如:

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

结束实验

完成实验后,请点击结束实验。Google Cloud Skills Boost 会移除您使用过的资源并为您清理帐号。

系统会提示您为实验体验评分。请选择相应的星级数,输入评论,然后点击提交

星级数的含义如下:

  • 1 颗星 = 非常不满意
  • 2 颗星 = 不满意
  • 3 颗星 = 一般
  • 4 颗星 = 满意
  • 5 颗星 = 非常满意

如果您不想提供反馈,可以关闭该对话框。

如果要留言反馈、提出建议或做出更正,请使用支持标签页。

版权所有 2020 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。

准备工作

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

使用无痕浏览模式

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

登录控制台

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

此内容目前不可用

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

太好了!

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

一次一个实验

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

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

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