迁移单体式虚拟机 - 迁移和部署

设置完处理集群并安装 Migrate for Anthos and GKE 后,您便可以开始执行迁移。首先,您需要为处理集群添加相关的迁移来源,并为虚拟机生成迁移计划。查看计划并根据您的需要自定义计划后,您便可以生成 Kubernetes 工件,并将其部署到 GKE 集群(您的应用的其余部分已在该集群上运行)。

目标

在本教程结束时,您将了解如何执行以下操作:

  • 添加迁移来源。
  • 根据您的虚拟机工作负载创建迁移计划。
  • 查看并自定义迁移计划。
  • 生成迁移工件并将其部署到 GKE 集群。

准备工作

本教程是对发现和评估教程的后续教程。在开始本教程之前,请按照该页面上的说明在单体式虚拟机上运行发现工具并创建处理集群。

停止单体式虚拟机

在执行迁移之前,您必须停止单体式虚拟机,以避免在数据迁移过程中因数据移动而导致发生意外中断或数据损坏。

  1. 在 Google Cloud Console 中,转到虚拟机实例页面。

    转到“虚拟机实例”页面

  2. 选中 ledgermonolith-service 虚拟机所在行左端的复选框。

  3. 在页面顶部,点击停止按钮以停止该虚拟机。

  4. 等待虚拟机完全停止。此过程可能需要 1 至 2 分钟时间。

迁移虚拟机

现在,迁移候选虚拟机已完全停止,您可以开始准备迁移并执行该迁移过程。首先,您需要创建一个来源,以将您的处理集群指定为 Compute Engine 迁移的指定集群。之后,您便可以启动虚拟机的完整迁移。

添加来源

  1. 在 Cloud Console 中打开 Migrate for Anthos and GKE 页面。

    转到 Migrate for Anthos and GKE 页面

  2. 来源标签页中,点击添加来源

  3. 从下拉列表中选择 migration-processing 集群,然后点击下一步

  4. 将迁移的名称指定为 ledgermonolith-source

  5. 来源类型设置为 Compute Engine,然后点击下一步

  6. 确保选择正确的项目作为源项目。

  7. 通过选择创建新服务帐号来创建服务帐号,以便将 Compute Engine 用作迁移来源。

  8. 点击下一步,然后点击添加来源

创建迁移

  1. 在 Cloud Console 中打开 Migrate for Anthos and GKE 页面。

    转到 Migrate for Anthos and GKE 页面

  2. 迁移标签页中,点击创建迁移

  3. 迁移名称设置为 ledgermonolith-migration

  4. 选择您在上一步中创建的迁移来源:ledgermonolith-source

  5. 虚拟机操作系统类型设置为 Linux

  6. 将来源实例名称设置为 ledgermonolith-service

  7. 迁移意图设置为 Image & Data

  8. 点击创建迁移。 此过程可能需要 1 至 2 分钟时间。

    迁移完成后,状态列会显示已生成迁移计划

  9. 在该表中,点击迁移的名称 ledgermonolith-migration,以打开详情页面。

  10. 选择 YAML 标签页。

  11. 迁移计划中的 dataVolumes 下,将占位符 <folder> 替换为虚拟机的 PostgreSQL 数据库的位置 /var/lib/postgresql。该对象应如下所示:

    ...
    dataVolumes:
      # Folders to include in the data volume, e.g. "/var/lib/mysql"
      # Included folders contain data and state, and therefore are automatically   excluded from a generated container image
      # Replace the placeholder with the relevant path and add more items if needed
      - folders:
        - /var/lib/postgresql
    ...
    

    这将确保您在迁移过程中始终保留该数据库。

  12. 在迁移计划中的 deployment 下,确保已为您的服务设置名称 ledgermonolith-service、端口 8080 和协议 TCP。该对象应如下所示:

    ...
    endpoints:
      - name: ledgermonolith-service
        port: 8080
        protocol: TCP
    ...
    
  13. 点击保存并生成工件,开始迁移过程。此过程大约需要 7 至 8 分钟时间。

    Migrate for Anthos and GKE 为此虚拟机生成的工件包括:

    • 虚拟机进程的 Docker 映像。
    • 用于运行新迁移的进程的 StatefulSet 和 Service。
    • 用于存放容器运行时的 Namespace 和 DaemonSet。
    • 用于存放 PostgreSQL 数据库的 PersistentVolumeClaim 和 PersistentVolume。

部署迁移后的工作负载

在上一部分中,您已成功将单体式虚拟机迁移到一组可以部署在集群中的 Kubernetes 资源。现在,您可以将这些资源部署到 Bank of Anthos 集群,重新配置应用以与新迁移的分类记录器服务的正确端点进行通信,并验证该服务是否正常运行。

  1. 迁移工件现已生成,您可以连接到处理集群并将工件下载到您的 Cloud Shell 环境。

    gcloud container clusters get-credentials migration-processing --zone COMPUTE_ZONE --project PROJECT_ID
    migctl migration get-artifacts ledgermonolith-migration
    
  2. 连接到 Bank of Anthos 集群并部署生成的 Kubernetes 资源。此外,请使用 migctl 为您的集群安装容器运行时,以便能够运行新迁移的 Pod。

    gcloud container clusters get-credentials boa-cluster --zone COMPUTE_ZONE
    migctl setup install --runtime
    kubectl apply -f deployment_spec.yaml
    
    Fetching cluster endpoint and auth data.
    kubeconfig entry generated for boa-cluster.
    
    applying resources to the cluster
    namespace/v2k-system created
    daemonset.apps/runtime-deploy-node created
    
    statefulset.apps/ledgermonolith-service created
    service/ledgermonolith-service-java created
    persistentvolumeclaim/data-pvc-0-4e1b2e0e-021f-422a-8319-6da201a960e5 created
    persistentvolume/pvc-4d41e0f2-569e-415d-87d9-019490f18b1c created
    
  3. 修改包含分类记录器主机的 ConfigMap,以指向新的 Kubernetes Pod,而不是不再处于服务状态的分类记录器单体式虚拟机。

    sed -i 's/'.c.PROJECT_ID.internal'//g' ${HOME}/bank-of-anthos/src/ledgermonolith/config.yaml
    kubectl apply -f ${HOME}/bank-of-anthos/src/ledgermonolith/config.yaml
    
  4. 删除所有 Pod,以使用新配置重新创建。

    kubectl delete pods --all
    

    您可以使用以下命令查看 Pod 的状态:

    kubectl get pods
    

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

    NAME                           READY   STATUS    RESTARTS   AGE
    accounts-db-0                  1/1     Running   0          5m43s
    contacts-d5dcdc87c-jbrhf       1/1     Running   0          5m44s
    frontend-5768bd978-xdvpl       1/1     Running   0          5m44s
    ledgermonolith-service-0       1/1     Running   0          5m44s
    loadgenerator-8485dfd-582xv    1/1     Running   0          5m44s
    userservice-8477dfcb46-rzw7z   1/1     Running   0          5m43s
    
  5. 将所有 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   46m
    
  6. 打开浏览器并使用上文中找到的外部 IP 地址访问网页(请务必使用 HTTP,而非 HTTPS)。

    http://EXTERNAL_IP
    

    您应能使用默认凭据登录并查看事务。您看到的事务来自现已迁移到 Kubernetes 容器的分类记录器单体式应用。

    Bank of Anthos 的屏幕截图

总结

您已通过一个由多项服务组成的实际应用学习本教程,该应用中的部分服务位于 GKE 集群中,其余服务则位于 Compute Engine 中的虚拟机上。只需几步简单操作,无需更改任何代码或进行复杂的重构,即可将单体式服务及其数据库从虚拟机成功迁移到 GKE 集群,从而降低计算费用并简化开发工作。

清除数据

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

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

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

  • 在 Cloud Console 中,转到管理资源页面。

    转到“管理资源”

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