迁移单体式虚拟机 - 概览和设置

在本教程中,您将了解一个尚未完全进行现代化改造的示例应用,并完成将其所有服务迁移到 GKE 所需的步骤。此应用会在 GKE 集群中运行其部分服务,而将其余服务作为虚拟机中的单体式应用运行。

本教程分为以下四个部分:

  1. 概览和设置

    在本部分中,您将了解本教程所基于的上下文,并设置学习本教程其余部分所需的基础架构和工具。

  2. 发现和评估(第 0 天)

    接下来,您将使用发现工具来评估您的虚拟机是否适合迁移,并创建处理集群以为迁移做好准备。

  3. 迁移和部署(第 1 天)

    完成评估后,您将了解如何为单体式虚拟机创建迁移计划、继续对映像和数据进行完整迁移,并将新创建的工件部署到 Kubernetes 中。

  4. 优化(第 2 天)

    最后,您会学习如何快速将源代码更改部署到容器化环境中,并了解微服务、可观测性和现代化改造最佳做法。

Context

到目前为止,大型企业中的大多数旧式应用都是单体式应用,并在专有技术栈或计算密集型虚拟机 (VM) 上运行。这些服务通常对于大型应用的运营至关重要,但会产生大量运营费用,例如运维和许可费用。但是,由于其性质,虚拟机可能难以迁移到轻量级解决方案,例如 GKE 集群中的容器。

在本教程中,您将学习如何利用 Migrate to Containers,无需更改任何代码即可轻松地将单体式服务及其数据库从虚拟机迁移到 GKE 环境,从而减少运营费用并免去开发麻烦。然后,您将了解如何部署源代码更改和现代化改造最佳做法,从而利用新迁移的工作负载。

使用的示例应用是 Bank of Anthos(一种零售银行服务模拟),其拥有自己的事务处理网络和数据库。

Bank of Anthos 的 Web 前端、用户和联系人服务以及账号数据库都已部署为在 GKE 的容器中运行的容器化微服务。但是,其单体式事务分类记录器和事务数据库仍在单个虚拟机上运行。如需在不中断当前工作流的情况下降低运营费用,您需要能够轻松将此虚拟机迁移到 GKE 的解决方案。

Bank of Anthos 架构图

费用

在本文档中,您将使用 Google Cloud 的以下收费组件:

您可使用价格计算器根据您的预计使用情况来估算费用。 Google Cloud 新用户可能有资格申请免费试用

完成本文档中描述的任务后,您可以通过删除所创建的资源来避免继续计费。如需了解详情,请参阅清理

所需工具

您可以使用 Cloud Shell 来执行本教程中所述的操作,该环境中预装了本教程中用到的 gcloudkubectlgitmigctl 命令行工具。借助 Cloud Shell,您将无需在工作站上单独安装这些命令行工具。

如需使用 Cloud Shell,请执行以下操作:

  1. 前往 Google Cloud 控制台
  2. 点击 Google Cloud 控制台窗口顶部的激活 Cloud Shell 激活 Shell 按钮 按钮。

    一个 Cloud Shell 会话随即会在 Google Cloud 控制台底部的新框内打开,并显示命令行提示符。

    Cloud Shell 会话

必需的 API

启用对 Compute Engine 的支持

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  3. 确保您的 Google Cloud 项目已启用结算功能

  4. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  5. 确保您的 Google Cloud 项目已启用结算功能

  6. 启用 Compute Engine API。

    启用 API

启用并配置 GKE

在开始之前,请确保您已执行以下任务:

  • 启用 Google Kubernetes Engine API。
  • 启用 Google Kubernetes Engine API
  • 如果您要使用 Google Cloud CLI 执行此任务,请安装初始化 gcloud CLI。 如果您之前安装了 gcloud CLI,请运行 gcloud components update 以获取最新版本。

部署 Bank of Anthos

在本部分中,您会将分类记录器单体式虚拟机部署到 Compute Engine 中,并创建用于运行其余 Bank of Anthos 服务的 GKE 集群。

  1. 设置 Bank of Anthos 单体式部署所需的环境变量。

    export PROJECT_ID=PROJECT_ID
    export ZONE=COMPUTE_ZONE
    
  2. 将 Bank of Anthos 代码库克隆到主目录。

    git clone https://github.com/GoogleCloudPlatform/bank-of-anthos ${HOME}/bank-of-anthos
    
  3. 将 Bank of Anthos 分类记录器单体式应用部署到 Compute Engine。

    cd ${HOME}/bank-of-anthos
    make monolith-deploy
    

    此命令会使用 Bank of Anthos 分类记录器单体式应用映像在 Compute Engine 中创建虚拟机。

  4. 创建一条防火墙规则,以允许通过端口 8080 向虚拟机实例发送请求,前端服务会使用该端口与分类记录器单体式应用进行通信。

    gcloud compute --project=PROJECT_ID firewall-rules create default-allow-http \
      --direction=INGRESS --priority=1000 --network=default --action=ALLOW \
      --rules=tcp:8080 --source-ranges=0.0.0.0/0 --target-tags=monolith
    
  5. 创建一个 GKE 集群来托管其余的 Bank of Anthos 服务。

    gcloud container clusters create boa-cluster \
      --zone COMPUTE_ZONE --project=PROJECT_ID \
      --machine-type=e2-standard-4 --num-nodes=4 \
      --subnetwork=default
    
  6. 创建集群后,提取其凭据并将 Kubernetes 上下文设置为指向该集群。

    gcloud container clusters get-credentials boa-cluster \
      --zone COMPUTE_ZONE --project=PROJECT_ID
    
  7. 使用项目 ID 替换用于描述 GKE 服务如何与分类记录器单体式虚拟机进行通信的 ConfigMap。

    sed -i 's/\[PROJECT_ID\]/'PROJECT_ID'/g' ${HOME}/bank-of-anthos/src/ledgermonolith/config.yaml
    

    查看此文件,以确保所做更改已成功应用。

    cat ${HOME}/bank-of-anthos/src/ledgermonolith/config.yaml | grep ADDR
    

    您应该会看到项目 ID 已插入到分类记录器服务主机中。

    TRANSACTIONS_API_ADDR: "ledgermonolith-service.c.PROJECT_ID.internal:8080"
    BALANCES_API_ADDR: "ledgermonolith-service.c.PROJECT_ID.internal:8080"
    HISTORY_API_ADDR: "ledgermonolith-service.c.PROJECT_ID.internal:8080"
    CONTACTS_API_ADDR: "contacts:8080"
    USERSERVICE_API_ADDR: "userservice:8080
    
  8. 在集群上应用各种 Bank of Anthos 服务。

    cd ${HOME}/bank-of-anthos/
    kubectl apply -f src/ledgermonolith/config.yaml
    kubectl apply -f extras/jwt/jwt-secret.yaml
    kubectl apply -f kubernetes-manifests/accounts-db.yaml
    kubectl apply -f kubernetes-manifests/userservice.yaml
    kubectl apply -f kubernetes-manifests/contacts.yaml
    kubectl apply -f kubernetes-manifests/frontend.yaml
    kubectl apply -f kubernetes-manifests/loadgenerator.yaml
    

    您可以使用以下命令验证 Pod 状态:

    kubectl get pods
    

    可能需要几分钟时间才能启动并运行所有 Pod。

    NAME                           READY   STATUS    RESTARTS   AGE
    accounts-db-0                  1/1     Running   0          51s
    contacts-d5dcdc87c-5l9xf       1/1     Running   0          50s
    frontend-5768bd978-s6vkq       1/1     Running   0          50s
    loadgenerator-8485dfd-wjvst    1/1     Running   0          50s
    userservice-8477dfcb46-htw96   1/1     Running   0          51s
    
  9. 将所有 Pod 设置为 Running 后,您便可以找到 frontend LoadBalancer 服务的外部 IP 地址。

    kubectl get service frontend
    
    NAME       TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)        AGE
    frontend   LoadBalancer   10.79.248.161   ##.##.##.##.    80:31304/TCP   4m
    
  10. 最后,您可以打开浏览器并使用上文中找到的外部 IP 地址访问网页(请务必使用 HTTP,而非 HTTPS)。

    http://EXTERNAL_IP
    

    您应能使用默认凭据登录,并在信息中心上查看事务。列出的事务来自当前托管在虚拟机中的分类记录器单体式应用。

    Bank of Anthos 的屏幕截图

清理

为避免产生不必要的 Google Cloud 费用,您应该在完成本教程后立即删除用于本教程的资源。这些资源包括:

  • boa-cluster GKE 集群
  • ledgermonolith-service Compute Engine 虚拟机

您可以手动删除这些资源,也可以按照下面的步骤删除项目,这也将移除所有资源。

  • 在 Google Cloud 控制台中,进入管理资源页面。

    转到“管理资源”

  • 在项目列表中,选择要删除的项目,然后点击删除
  • 在对话框中输入项目 ID,然后点击关闭以删除项目。
  • 后续步骤

    您已经启用了所需的 API 并部署了 Bank of Anthos 设置,现在您可以继续学习本教程的下一部分,即发现和评估;在该部分,您将学习如何使用迁移发现工具来评估您的虚拟机是否适合使用 Migrate to Containers 工具来进行迁移。

    如果您至此结束本教程的学习,请务必清理您的 Google Cloud 项目和资源。