Create a Kubernetes Cluster

检查我的进度

/ 5

Build and Deploy Nodejs App (hello-node)

检查我的进度

/ 5

Allow external traffic to hello-node deployment

检查我的进度

/ 5

此实验可能会提供 AI 工具来支持您学习。

GSP015

Google Cloud 自学实验

概览

Google Kubernetes Engine 可让您轻松在云端运行 Docker 容器。Google Kubernetes Engine 使用开源容器调度器 Kubernetes,确保您的集群始终严格按照您期望的方式运行。

在本实验中,您将学习如何在 Google Kubernetes Engine 上启动容器以及该容器的副本。

设置和要求

点击“开始实验”按钮前的注意事项

请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 Google Cloud 资源可供您使用多长时间。

此实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。为此,我们会向您提供新的临时凭据,您可以在该实验的规定时间内通过此凭据登录和访问 Google Cloud。

为完成此实验,您需要:

  • 能够使用标准的互联网浏览器(建议使用 Chrome 浏览器)。
注意:请使用无痕模式(推荐)或无痕浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。
  • 完成实验的时间 - 请注意,实验开始后无法暂停。
注意:请仅使用学生账号完成本实验。如果您使用其他 Google Cloud 账号,则可能会向该账号收取费用。

如何开始实验并登录 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 产品和服务,请点击导航菜单,或在搜索字段中输入服务或产品的名称。 “导航菜单”图标和“搜索”字段

激活 Cloud Shell

Cloud Shell 是一种装有开发者工具的虚拟机。它提供了一个永久性的 5GB 主目录,并且在 Google Cloud 上运行。Cloud Shell 提供可用于访问您的 Google Cloud 资源的命令行工具。

  1. 点击 Google Cloud 控制台顶部的激活 Cloud Shell “激活 Cloud Shell”图标

  2. 在弹出的窗口中执行以下操作:

    • 继续完成 Cloud Shell 信息窗口中的设置。
    • 授权 Cloud Shell 使用您的凭据进行 Google Cloud API 调用。

如果您连接成功,即表示您已通过身份验证,且项目 ID 会被设为您的 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 自动补全功能。

  1. (可选)您可以通过此命令列出活跃账号名称:
gcloud auth list
  1. 点击授权

输出:

ACTIVE: * ACCOUNT: {{{user_0.username | "ACCOUNT"}}} To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (可选)您可以通过此命令列出项目 ID:
gcloud config list project

输出:

[core] project = {{{project_0.project_id | "PROJECT_ID"}}} 注意:如需查看在 Google Cloud 中使用 gcloud 的完整文档,请参阅 gcloud CLI 概览指南

任务 1. 创建集群

在本部分中,您将创建一个 Google Kubernetes Engine 集群。

设置计算可用区

Cloud Shell 是一个基于浏览器的虚拟机终端,该虚拟机上安装了 Google Cloud 工具和一些额外的工具(如编辑器和编译器),这些工具在开发或调试云应用时非常有用。

您将使用 gcloud 命令创建集群。首先,设置计算可用区,以便在正确的区域创建集群中的虚拟机。请使用 gcloud config set compute/zone 完成这项操作。

  • 在 Cloud Shell 中输入以下命令:
gcloud config set compute/zone {{{project_0.default_zone|ZONE}}}

了解区域和可用区

某些 Compute Engine 资源位于区域或可用区内。区域是指某一块地理位置,您可以在其中运行自己的资源。每个区域包含一个或多个可用区。例如,us-central1 区域表示美国中部的一个区域,该区域包含的可用区有 us-central1-aus-central1-bus-central1-cus-central1-f

区域 可用区
美国西部 us-west1-a、us-west1-b
美国中部 us-central1-a、us-central1-b、us-central1-d、us-central1-f
美国东部 us-east1-b、us-east1-c、us-east1-d
西欧 europe-west1-b、europe-west1-c、europe-west1-d
东亚 asia-east1-a、asia-east1-b、asia-east1-c

可用区内的资源称为可用区级资源,例如可用区内的虚拟机实例和永久性磁盘。要将永久性磁盘附加到虚拟机实例,这两项资源必须位于同一可用区内。同理,如果要为某个实例分配一个静态 IP 地址,则该实例与该静态 IP 必须位于同一区域内。

请参阅 Compute Engine 页面中的“区域和可用区”文档,详细了解区域和可用区,并查看完整列表。

创建新集群

  • 使用 gcloud 命令创建一个新的容器集群,如下所示:
gcloud container clusters create hello-world

此命令会创建一个名为 hello-world 的新集群,其中包含三个节点(虚拟机)。您可以在此命令中添加其他标志,以更改节点数量、默认权限和其他变量。如需了解详情,请参阅 gcloud container clusters create 参考文档

注意:如果在运行 gcloud container clusters create 时出现错误,请确保您已同时启用 Google Kubernetes Engine API 和 Compute Engine API。

启动集群可能需要几分钟时间。启动后,您应该会在 Cloud Shell 中看到类似以下内容的输出:

NAME LOCATION MASTER_VERSION MASTER_IP MACHINE_TYPE NODE_VERSION NUM_NODES STATUS hello-world {{{project_0.default_zone|ZONE}}} 1.12.7-gke.10 35.239.64.154 e2-medium 1.12.7-gke.10 3 RUNNING

验证您已完成的任务

点击检查我的进度,验证您已执行的任务。如果您成功完成了任务,系统会给出评分。

创建 Kubernetes 集群。

任务 2. 构建并发布 Hello World 应用

接下来,构建并发布包含您的代码的容器。您将使用 Docker 构建容器,并使用 Google Artifact Registry 安全地发布容器。

设置项目 ID

在本实验中,您将在许多命令中使用项目 ID。项目 ID 存储在 Cloud Shell 的环境变量中,方便您随时调用。您可以通过以下命令查看项目 ID:

echo $DEVSHELL_PROJECT_ID

任务 3. 获取示例代码

  1. 运行以下命令来克隆示例代码:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
  1. 更改目录:
cd kubernetes-engine-samples/quickstarts/hello-app

构建容器

Docker 容器是使用 Dockerfile 构建的。示例代码提供了一个基础的 Dockerfile 供我们使用。

cat Dockerfile

以下是该文件的内容:

... FROM golang:1.26.2 AS builder WORKDIR /app RUN go mod init hello-app COPY *.go ./ RUN CGO_ENABLED=0 GOOS=linux go build -o /hello-app FROM gcr.io/distroless/static-debian12 WORKDIR / COPY --from=builder /hello-app /hello-app ENV PORT=8080 USER nonroot:nonroot CMD ["/hello-app"]
  • 请运行以下命令来构建容器:
docker build -t gcr.io/$DEVSHELL_PROJECT_ID/hello-app:1.0 .

这将构建一个存储在本地的 Docker 容器映像。

发布容器

为了让 Kubernetes 能够访问您的映像,您需要将其存储在 Artifact Registry 中。

  • 运行以下命令来发布容器映像:
gcloud docker -- push gcr.io/$DEVSHELL_PROJECT_ID/hello-app:1.0

任务 4. 部署 Hello World 应用

现在,集群已在运行,应用也已构建完毕,接下来可以部署应用了。

创建 Deployment

Deployment 是 Kubernetes 的核心组件,可确保您的应用始终处于运行状态。Deployment 会在集群中调度和管理一组 Pod。Pod 是一个或多个“结伴同行”的容器。这些容器可能需要一同接受管理,或有相同的网络要求。本实验中的 Pod 只有一个容器。

通常,您需要创建一个包含 Deployment 配置的 yaml 文件。在本实验中,我们将跳过此步骤,直接在命令行中创建 Deployment。

  1. 使用 kubectl 创建 Pod:
kubectl create deployment hello-app --image=gcr.io/$DEVSHELL_PROJECT_ID/hello-app:1.0 注意:您可以放心忽略任何有关命令弃用的警告。

此命令会在集群中的一个节点上启动 Docker 映像的一个副本。

验证您已完成的任务

点击检查我的进度,验证您已执行的任务。如果您成功完成了任务,系统会给出评分。

构建并部署 Hello World 应用 (hello-app)
  1. 运行以下命令,查看使用 kubectl 创建的 Deployment:
kubectl get deployments

您得到的结果应该类似于:

NAME READY UP-TO-DATE AVAILABLE AGE hello-app 1/1 1 1 30s
  1. 您还可以使用 kubectl 查看正在运行的 Pod:
kubectl get pods

您得到的结果应该类似于:

NAME READY STATUS RESTARTS AGE hello-app-3375482827-7hs3q 1/1 Running 0 1m

允许外部流量

默认情况下,Pod 只能由集群内的其他机器访问。为了能够使用已创建的应用容器,您需要将其作为 Service 公开。

通常,您需要创建一个包含 Service 配置的 yaml 文件。在本实验中,我们将跳过此步骤,直接在命令行中创建 Deployment。

  1. 运行以下命令,使用 kubectl expose 命令公开 Deployment:
kubectl expose deployment hello-app --name=hello-app --type=LoadBalancer --port=80 --target-port=8080

kubectl expose 会创建一个 Service、负载均衡器的转发规则以及允许将外部流量发送到 Pod 的防火墙规则。--type=LoadBalancer 标志会创建一个 Google Cloud 网络负载均衡器,用于接受外部流量。

  1. 如需获取 Service 的 IP 地址,请运行以下命令:
kubectl get svc hello-app

您得到的结果应该类似于:

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello-app LoadBalancer 10.3.247.85 104.198.151.208 80/TCP 8m 注意External-IP 可能需要一分钟左右的时间才会显示。如果 External-IP 显示为 <pending>,请等待 30 秒,然后重试。

验证您已完成的任务

点击检查我的进度,验证您已执行的任务。如果您成功完成了任务,系统会给出评分。

允许外部流量访问 hello-app Deployment。

验证 Deployment

打开新的浏览器窗口或标签页,然后导航到上一步中的外部 IP 地址。您应该会看到示例代码正在运行!

网页会显示以下文本:Hello Kubernetes!

任务 5. 检验您的掌握情况

下方选择题可加强您对本实验所涉概念的理解。请尽您所能回答。

恭喜!

借助 Google Kubernetes Engine,您能够以强大且灵活的方式在 Google Cloud 上运行容器。Kubernetes 也可以在您自己的硬件或其他云平台上使用。

本实验虽然只涉及单个容器,但要设置多容器环境或单个容器的多个实例也很简单。

本实验的内容

  • Google Kubernetes Engine
  • 如何在 Google Kubernetes Engine 上构建和启动简单的容器化应用

参与下一项实验

不妨试试其他实验,例如:

后续步骤/了解详情

Google Cloud 培训和认证

…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。

上次更新手册的时间:2024 年 12 月 11 日

上次测试实验的时间:2024 年 12 月 11 日

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

准备工作

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

使用无痕浏览模式

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

登录控制台

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

此内容目前不可用

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

太好了!

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

一次一个实验

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

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

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