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

将单体式网站迁移到 Google Kubernetes Engine 上的微服务

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

GSP699

Google Cloud 自学实验的徽标

概览

为什么要从单体式应用迁移到微服务架构?将应用分解为微服务具有以下优势,而这些优势大多源于微服务松散耦合的特性:

  • 微服务可以独立测试和部署。部署单元越小,部署就越简单。
  • 微服务能够以不同的语言和框架实现。对于每个微服务,您可以随意选择最适合特定用例的技术。
  • 微服务可以由不同团队管理。微服务之间具有边界,因此您可以更轻松地为一个或多个微服务安排专属团队。
  • 通过迁移到微服务,您可以解除团队之间的依赖。每个团队只需关注其所依赖的微服务的 API 即可。团队无需考虑这些微服务的实现方式以及发布周期等方面。
  • 您可以更轻松地设计故障预防机制。在服务之间划分明确边界,有助于确定服务出现故障时的应对策略。

与单体式应用相比,微服务具有以下缺点:

  • 由于基于微服务的应用是由不同服务组成的网络,而且这些服务通常以不明显的方式进行交互,因此系统的整体复杂性往往会增加。
  • 与单体式应用的内部通信不同,微服务通过网络进行通信。在某些情况下,这可能会被视为安全问题。Istio 通过自动加密微服务之间的流量来解决此问题。
  • 由于服务之间存在延迟,可能难以达到与单体式应用方法相同水平的性能。
  • 系统的行为不是由单个服务引起的,而是由许多服务及服务交互引起的。因此,了解您的系统在生产环境中的行为方式(即可观测性)变得更加困难。Istio 也可以解决这一问题。

在本实验中,您将把现有的单体式应用部署到 Google Kubernetes Engine 集群,然后将其分解为微服务。Kubernetes 是一个用于管理、托管、扩缩和部署容器的平台。容器是一种可移植的代码封装和运行方式。它们非常适合微服务模式,使用容器时,每个微服务可以在各自的容器中运行。

微服务架构图

首先,将单体式应用分解为三个微服务,一次分解一个。这三个微服务包括 Orders、Products 和 Frontend。使用 Cloud Build 为每个微服务构建 Docker 映像,然后使用 Kubernetes 服务类型 LoadBalancer 在 Google Kubernetes Engine (GKE) 上部署并公开微服务。您将为每项服务执行此操作,同时将它们从单体式应用中重构出来。在此过程中,单体式应用和微服务将同时运行,直至您最后能够删除单体式应用。

学习内容

  • 如何将单体式应用分解为微服务
  • 如何创建 Google Kubernetes Engine 集群
  • 如何创建 Docker 映像
  • 如何将 Docker 映像部署到 Kubernetes

设置和要求

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

请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 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 概览指南

设置默认可用区和项目配置:

gcloud config set compute/zone {{{project_0.default_zone | (zone)}}}

任务 1. 克隆源代码库

您将使用一个现有的单体式应用,该应用是一个虚构的电子商务网站,其中包含一个简单的欢迎页面、一个产品页面和一个订单历史记录页面。我们只需从 Git 代码库克隆源代码,以便专注于将其分解为微服务并部署到 Google Kubernetes Engine (GKE)。

  • 运行以下命令,将 Git 代码库克隆到 Cloud Shell 实例,并切换到相应的目录。您还将安装 NodeJS 依赖项,以便在部署之前测试单体式应用:
cd ~ git clone https://github.com/googlecodelabs/monolith-to-microservices.git cd ~/monolith-to-microservices ./setup.sh

此脚本可能需要几分钟才能运行完毕。

任务 2. 创建 GKE 集群

现在您已经有了可用的开发者环境,接下来需要一个 Kubernetes 集群来部署单体式应用,最终还要部署微服务!在创建集群之前,请确保已启用正确的 API。

  1. 运行以下命令以启用 Containers API,以便使用 Google Kubernetes Engine:
gcloud services enable container.googleapis.com
  1. 运行以下命令,创建一个名为 fancy-cluster 且包含 3 个节点的 GKE 集群:
gcloud container clusters create fancy-cluster --num-nodes 3 --machine-type=e2-standard-4 警告:如果出现错误提示未指定区域/可用区,请参阅环境设置部分,确认已设置默认计算可用区。

此集群可能需要几分钟才能完成创建。

  1. 命令完成后,运行以下命令以查看集群的三个工作器虚拟机实例:
gcloud compute instances list

输出:

NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS gke-fancy-cluster-default-pool-ad92506d-1ng3 {{{project_0.default_zone | (zone)}}} e2-standard-4 10.150.0.7 XX.XX.XX.XX RUNNING gke-fancy-cluster-default-pool-ad92506d-4fvq {{{project_0.default_zone | (zone)}}} e2-standard-4 10.150.0.5 XX.XX.XX.XX RUNNING gke-fancy-cluster-default-pool-ad92506d-4zs3 {{{project_0.default_zone | (zone)}}} e2-standard-4 10.150.0.6 XX.XX.XX.XX RUNNING

您还可以在 Cloud 控制台中查看 Kubernetes 集群和相关信息。在导航菜单中,向下滚动到 Kubernetes Engine,然后点击集群

此时应该会看到名为 fancy-cluster 的集群。

恭喜!您刚刚创建了第一个 Kubernetes 集群!

点击“检查我的进度”以验证是否完成了以下目标: 创建 GKE 集群

任务 3. 部署现有的单体式应用

由于本实验的重点是将单体式应用分解为微服务,因此您需要先让单体式应用正常运行。

  • 运行以下脚本,将单体式应用部署到 GKE 集群:
cd ~/monolith-to-microservices ./deploy-monolith.sh

访问单体式应用

  1. 如需查找单体式应用的外部 IP 地址,请运行以下命令:
kubectl get service monolith

您将看到如下所示的输出:

NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE monolith 10.3.251.122 203.0.113.0 80:30877/TCP 3d
  1. 如果输出将外部 IP 列为 <pending>,请稍等片刻,然后再次运行该命令。

  2. 确定单体式应用的外部 IP 地址后,请复制该 IP 地址。将浏览器指向此网址(例如 http://203.0.113.0)以检查您的单体式应用是否可访问。

注意:请记住此 IP 地址,因为您将在后续操作中继续使用它。您随时可以通过同一命令再次找到它。

您应该会看到单体式网站的欢迎页面。欢迎页面是一个静态页面,稍后将由 Frontend 微服务提供。现在,您的单体式网站已完全在 Kubernetes 上运行!

点击“检查我的进度”以验证是否完成了以下目标: 部署现有的单体式应用

任务 4. 将 Orders 迁移到微服务

现在,您已经在 GKE 上运行了一个单体式网站,接下来要将每个服务分解为一个微服务。具体分解哪些服务,通常需要提前做好计划,通常围绕应用的具体部分(如业务领域)进行分解。

在本实验中,您将创建一个示例,并围绕业务领域(订单、产品和前端)分解各项服务。代码已为您迁移完毕,因此您可以专注于在 Google Kubernetes Engine (GKE) 上构建和部署服务。

创建 Orders 微服务

首先要分解的是 Orders 服务。使用提供的单独代码库,并为此服务创建一个单独的 Docker 容器。

使用 Cloud Build 创建 Docker 容器

由于代码库已可用,因此您首先需要使用 Cloud Build 创建 Orders 服务的 Docker 容器。

通常,这需要两个步骤:构建 Docker 容器,然后将其推送到注册表,以便 GKE 从中拉取存储的映像。使用 Cloud Build,只需一个命令即可构建 Docker 容器将映像放入 Artifact Registry!

Google Cloud Build 会压缩目录中的文件,并将它们移至 Cloud Storage 存储桶。然后,构建流程会从存储桶中提取所有文件,并使用 Dockerfile 运行 Docker 构建流程。由于为 Docker 映像指定了 --tag 标志并将主机设置为 gcr.io,生成的 Docker 映像将推送到 Artifact Registry。

  1. 运行以下命令来构建 Docker 容器并将其推送到 Artifact Registry:
cd ~/monolith-to-microservices/microservices/src/orders gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/orders:1.0.0 .

此过程需要大约一分钟时间,完成后,终端中将显示类似以下内容的输出:

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ID CREATE_TIME DURATION SOURCE IMAGES STATUS 1ae295d9-63cb-482c-959b-bc52e9644d53 2019-08-29T01:56:35+00:00 33S gs://_cloudbuild/source/1567043793.94-abfd382011724422bf49af1558b894aa.tgz gcr.io//orders:1.0.0 SUCCESS
  1. 如需查看构建记录或实时监控构建过程,请在控制台中搜索 Cloud Build,然后点击 Cloud Build 搜索结果。

  2. 历史记录页面上,您可以看到所有 build 的列表;其中应该只有您刚刚创建的 build。点击 build ID,即可查看 build 的所有详细信息,包括日志输出。

  3. 在“build 详情”页面中,如需查看已创建的容器映像,请点击右侧的执行详细信息标签页,然后查看该映像。

将容器部署到 GKE

现在,您已经将网站容器化并将容器推送到了 Artifact Registry,接下来就可以部署到 Kubernetes 了!

Kubernetes 将应用表示为 Pod,这是表示一个容器(或一组紧密耦合的容器)的单元。Pod 是 Kubernetes 中最小的可部署单元。在本教程中,每个 Pod 仅包含您的微服务容器。

如需在 GKE 集群上部署和管理应用,您必须与 Kubernetes 集群管理系统进行通信。您通常使用 Cloud Shell 中的 kubectl 命令行工具执行此操作。

首先,创建 Deployment 资源。Deployment 管理应用的多个运行实例(称为副本),并安排这些副本在集群中的各个节点上运行。在本例中,Deployment 将只运行应用的一个 Pod。Deployment 通过创建 ReplicaSet 来确保这一点。ReplicaSet 负责确保指定数量的副本始终处于运行状态。

下面的 kubectl create deployment 命令会让 Kubernetes 在您的集群中创建一个名为 Orders 的 Deployment,其中包含 1 个副本。

  • 运行以下命令以部署应用:
kubectl create deployment orders --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/orders:1.0.0 注意:根据最佳实践,建议使用 YAML 文件来声明对 Kubernetes 集群的更改(例如创建或修改 Deployment 或服务),并使用 GitHub 等源代码控制系统来存储这些更改。您可以通过 Kubernetes Deployment 文档了解更多信息。

验证 Deployment

  • 如需验证 Deployment 是否已成功创建,请运行以下命令:
kubectl get all

Pod 状态可能需要一段时间才能变为“正在运行”。

输出:

NAME READY STATUS RESTARTS AGE pod/monolith-779c8d95f5-dxnzl 1/1 Running 0 15h pod/orders-5bc6969d76-kdxkk 1/1 Running 0 21s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.39.240.1 443/TCP 19d service/monolith LoadBalancer 10.39.241.130 34.74.209.57 80:30412/TCP 15h NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/monolith 1/1 1 1 15h deployment.apps/orders 1/1 1 1 21s NAME DESIRED CURRENT READY AGE replicaset.apps/monolith-779c8d95f5 1 1 1 15h replicaset.apps/orders-5bc6969d76 1 1 1 21s

您可以看到 Deployment 已处于最新状态、replicaset 设定的期望 Pod 数量为 1,并且 Pod 正在运行。看来一切都已成功创建!

您还可以在 Cloud 控制台中查看 Kubernetes Deployment,方法是依次打开导航菜单 > Kubernetes Engine > 工作负载

公开 GKE 容器

您已在 GKE 上部署了应用,但无法从集群外部访问该应用。默认情况下,您在 GKE 上运行的容器无法通过互联网访问,因为这些容器没有外部 IP 地址。您必须通过 Service 资源明确公开应用,以便允许来自互联网的流量访问。Service 为应用的 Pod 提供网络和 IP 支持。GKE 会创建外部 IP 地址和负载均衡器。

为便于本实验开展,我们简化了公开服务的方式。通常,您会使用 API 网关来保护公共端点。

部署 Orders 服务时,您通过 Kubernetes Deployment 在内部将该服务公开在端口 8081 上。为了从外部公开该服务,您需要创建一个类型为 LoadBalancer 的 Kubernetes 服务,以将外部端口 80 的流量路由到内部端口 8081。

  • 运行以下命令,将您的网站公开到互联网:
kubectl expose deployment orders --type=LoadBalancer --port 80 --target-port 8081

访问服务

GKE 会将外部 IP 地址分配给 Service 资源,而不是 Deployment。

  • 如需查找 GKE 为应用预配的外部 IP,可以使用 kubectl get service 命令检查 Service:
kubectl get service orders

输出:

NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE orders 10.3.251.122 203.0.113.0 80:30877/TCP 3s

确定应用的外部 IP 地址后,请复制该 IP 地址。保存此信息,以便在下一步修改单体式应用,使其指向新的 Orders 服务时使用!

重新配置单体式应用

由于您已从单体式应用中移除 Orders 服务,因此必须修改单体式应用,使其指向新的外部 Orders 微服务。

在分解单体式应用时,您需要将代码段从单个代码库中移除,然后将其分别部署到多个微服务中。由于微服务在不同的服务器上运行,您不能再将服务网址作为绝对路径引用,而是需要将其路由到 Orders 微服务服务器地址。这需要单体式服务停用一段时间,以便更新已分解出的每个服务的网址。在微服务迁移过程中,当规划将微服务和单体式应用迁移到生产环境时,应考虑到这一点。

您需要更新单体式应用中的配置文件,以指向新的 Orders 微服务的 IP 地址。

  1. 使用 nano 编辑器将本地网址替换为 Orders 微服务的 IP 地址:
cd ~/monolith-to-microservices/react-app nano .env.monolith

编辑器打开后,您的文件应如下所示:

REACT_APP_ORDERS_URL=/service/orders REACT_APP_PRODUCTS_URL=/service/products
  1. REACT_APP_ORDERS_URL 替换为新格式,同时替换为您的 Orders 微服务的 IP 地址,使其如下所示:
REACT_APP_ORDERS_URL=http://<ORDERS_IP_ADDRESS>/api/orders REACT_APP_PRODUCTS_URL=/service/products
  1. CTRL+O,再按 ENTER 键,然后按 CTRL+X,即可在 nano 编辑器中保存文件。

  2. 访问您刚刚在文件中设置的网址,以此测试新的微服务。网页应返回来自 Orders 微服务的 JSON 响应。

  3. 接下来,重建单体式应用前端,并重复构建流程来构建单体式应用的容器,然后将其重新部署到 GKE 集群:

npm run build:monolith
  1. 使用 Cloud Build 创建 Docker 容器:
cd ~/monolith-to-microservices/monolith gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 .
  1. 将容器部署到 GKE:
kubectl set image deployment/monolith monolith=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0
  1. 在浏览器中前往单体式应用,并导航到“Orders”(订单)页面,验证应用是否已接入 Orders 微服务。所有订单 ID 都应以 -MICROSERVICE 为后缀,如下所示:

订单表,其中包含订单 ID、日期、商品总数和费用列。订单 ID 的格式如下:ORD-000001-MICROSERVICE

  1. 点击“检查我的进度”以验证是否完成了以下目标: 将 Orders 迁移到微服务

任务 5. 将 Products 迁移到微服务

创建新的 Products 微服务

接下来迁移 Products 服务,继续分解服务。按照之前的流程操作。运行以下命令来构建 Docker 容器、部署容器,并通过 Kubernetes 服务公开容器。

  1. 使用 Cloud Build 创建 Docker 容器:
cd ~/monolith-to-microservices/microservices/src/products gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/products:1.0.0 .
  1. 将容器部署到 GKE:
kubectl create deployment products --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/products:1.0.0
  1. 公开 GKE 容器:
kubectl expose deployment products --type=LoadBalancer --port 80 --target-port 8082
  1. 按照查找 Orders 服务公共 IP 地址的方式,查找 Products 服务的公共 IP 地址:
kubectl get service products

输出:

NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE products 10.3.251.122 203.0.113.0 80:30877/TCP 3d

在下一步中,您将使用该 IP 地址重新配置单体式应用,使其指向新的 Products 微服务。

重新配置单体式应用

  1. 使用 nano 编辑器将本地网址替换为新 Products 微服务的 IP 地址:
cd ~/monolith-to-microservices/react-app nano .env.monolith

编辑器打开后,您的文件应如下所示:

REACT_APP_ORDERS_URL=http://<ORDERS_IP_ADDRESS>/api/orders REACT_APP_PRODUCTS_URL=/service/products
  1. REACT_APP_PRODUCTS_URL 替换为新格式,同时替换为您的 Products 微服务的 IP 地址,使其如下所示:
REACT_APP_ORDERS_URL=http://<ORDERS_IP_ADDRESS>/api/orders REACT_APP_PRODUCTS_URL=http://<PRODUCTS_IP_ADDRESS>/api/products
  1. CTRL+O,再按 ENTER 键,然后按 CTRL+X 以保存文件。

  2. 访问您刚刚在文件中设置的网址,以此测试新的微服务。网页应返回来自 Products 微服务的 JSON 响应。

  3. 接下来,重建单体式应用前端,并重复构建流程来构建单体式应用的容器,然后将其重新部署到 GKE 集群。运行以下命令来完成这些步骤:

  4. 重建单体式应用配置文件:

npm run build:monolith
  1. 使用 Cloud Build 创建 Docker 容器:
cd ~/monolith-to-microservices/monolith gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:3.0.0 .
  1. 将容器部署到 GKE:
kubectl set image deployment/monolith monolith=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:3.0.0
  1. 在浏览器中前往单体式应用,并导航到“Products”(产品)页面,验证应用是否已接入新的 Products 微服务。所有产品名称都应以 MS- 为前缀,如下所示:

图片块,每张图片都采用以下格式标注:MS-图片名称-价格。示例:MS-Vintage Typewriter-$67.99。

  1. 点击“检查我的进度”以验证是否完成了以下目标: 将 Products 迁移到微服务

任务 6. 将 Frontend 迁移到微服务

迁移过程的最后一步是将 Frontend 代码移至微服务并关闭单体式应用。完成此步骤后,您就成功将单体式应用迁移到了微服务架构。

创建新的 Frontend 微服务

按照与前两个步骤相同的流程,创建新的 Frontend 微服务。

之前,您在重建单体式应用时更新了配置,以指向单体式应用。现在,您需要为 Frontend 微服务使用相同的配置。

  1. 运行以下命令,将微服务网址配置文件复制到 Frontend 微服务代码库:
cd ~/monolith-to-microservices/react-app cp .env.monolith .env npm run build
  1. 完成后,按照与之前步骤相同的流程操作。运行以下命令来构建 Docker 容器、部署容器,并通过 Kubernetes 服务公开容器。

  2. 使用 Google Cloud Build 创建 Docker 容器:

cd ~/monolith-to-microservices/microservices/src/frontend gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/frontend:1.0.0 .
  1. 将容器部署到 GKE:
kubectl create deployment frontend --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/frontend:1.0.0
  1. 公开 GKE 容器:
kubectl expose deployment frontend --type=LoadBalancer --port 80 --target-port 8080
  1. 点击“检查我的进度”以验证是否完成了以下目标: 将 Frontend 迁移到微服务

删除单体式应用

现在所有服务都作为微服务运行,请删除单体式应用!在实际迁移中,您还需要进行 DNS 更改等操作,以使现有域名指向应用的新 Frontend 微服务。

  • 运行以下命令以删除单体式应用:
kubectl delete deployment monolith kubectl delete service monolith

测试您的成果

要验证系统是否正常运作,请检查以下两点:单体式服务的旧 IP 地址此时应无法访问,而 Frontend 服务的新 IP 地址上应运行新应用。

  • 如需查看所有服务和 IP 地址的列表,请运行以下命令:
kubectl get services

您的输出应如下所示:

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE frontend LoadBalancer 10.39.246.135 35.227.21.154 80:32663/TCP 12m kubernetes ClusterIP 10.39.240.1 443/TCP 18d orders LoadBalancer 10.39.243.42 35.243.173.255 80:32714/TCP 31m products LoadBalancer 10.39.250.16 35.243.180.23 80:32335/TCP 21m

确定 Frontend 微服务的外部 IP 地址后,请复制该 IP 地址。将浏览器指向此网址(例如 http://203.0.113.0)以检查您的 Frontend 微服务是否可访问。您的网站应该与将单体式应用分解为微服务之前的网站相同!

恭喜!

您已成功将单体式应用分解为微服务,并将其部署到 Google Kubernetes Engine 上!

后续步骤 / 其他资源

Google Cloud 培训和认证

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

本手册的最后更新时间:2024 年 4 月 26 日

本实验的最后测试时间:2023 年 9 月 20 日

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

准备工作

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

使用无痕浏览模式

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

登录控制台

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

此内容目前不可用

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

太好了!

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

一次一个实验

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

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

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