迁移单体式虚拟机 - 概览和设置
在本教程中,您将了解一个尚未完全进行现代化改造的示例应用,并完成将其所有服务迁移到 GKE 所需的步骤。此应用会在 GKE 集群中运行其部分服务,而将其余服务作为虚拟机中的单体式应用运行。
本教程分为以下四个部分:
-
在本部分中,您将了解本教程所基于的上下文,并设置学习本教程其余部分所需的基础架构和工具。
-
接下来,您将使用发现工具来评估您的虚拟机是否适合迁移,并创建处理集群以为迁移做好准备。
-
完成评估后,您将了解如何为单体式虚拟机创建迁移计划、继续对映像和数据进行完整迁移,并将新创建的工件部署到 Kubernetes 中。
-
最后,您会学习如何快速将源代码更改部署到容器化环境中,并了解微服务、可观测性和现代化改造最佳做法。
Context
到目前为止,大型企业中的大多数旧式应用都是单体式应用,并在专有技术栈或计算密集型虚拟机 (VM) 上运行。这些服务通常对于大型应用的运营至关重要,但会产生大量运营费用,例如运维和许可费用。但是,由于其性质,虚拟机可能难以迁移到轻量级解决方案,例如 GKE 集群中的容器。
在本教程中,您将学习如何利用 Migrate to Containers,无需更改任何代码即可轻松地将单体式服务及其数据库从虚拟机迁移到 GKE 环境,从而减少运营费用并免去开发麻烦。然后,您将了解如何部署源代码更改和现代化改造最佳做法,从而利用新迁移的工作负载。
使用的示例应用是 Bank of Anthos(一种零售银行服务模拟),其拥有自己的事务处理网络和数据库。
Bank of Anthos 的 Web 前端、用户和联系人服务以及帐号数据库都已部署为在 GKE 的容器中运行的容器化微服务。但是,其单体式事务分类记录器和事务数据库仍在单个虚拟机上运行。如需在不中断当前工作流的情况下降低运营费用,您需要能够轻松将此虚拟机迁移到 GKE 的解决方案。
费用
本教程使用 Google Cloud 的以下收费组件:
您可使用价格计算器根据您的预计使用情况来估算费用。
完成本教程后,您可以删除所创建的资源以避免继续计费。如需了解详情,请参阅清理。
所需工具
您可以使用 Cloud Shell 来执行本教程中所述的操作,该环境中预装了本教程中用到的 gcloud
、kubectl
、git
和 migctl
命令行工具。借助 Cloud Shell,您将无需在工作站上单独安装这些命令行工具。
如需使用 Cloud Shell,请执行以下操作:
- 前往 Google Cloud Console。
点击控制台窗口顶部的激活 Cloud Shell
按钮。
一个 Cloud Shell 会话随即会在控制台底部的新框内打开,并显示命令行提示符。
必需的 API
启用对 Compute Engine 的支持
- 登录您的 Google Cloud 帐号。如果您是 Google Cloud 新手,请创建一个帐号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
-
在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目。
-
确保您的 Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能。
-
在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目。
-
确保您的 Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能。
- 启用 Compute Engine API。
启用并配置 GKE
在开始之前,请确保您已执行以下任务:
- 启用 Google Kubernetes Engine API。 启用 Google Kubernetes Engine API
- 如果您要使用 Google Cloud CLI 执行此任务,请安装并初始化 gcloud CLI。
部署 Bank of Anthos
在本部分中,您会将分类记录器单体式虚拟机部署到 Compute Engine 中,并创建用于运行其余 Bank of Anthos 服务的 GKE 集群。
设置 Bank of Anthos 单体式部署所需的环境变量。
export PROJECT_ID=PROJECT_ID
export ZONE=COMPUTE_ZONE
将 Bank of Anthos 代码库克隆到主目录。
git clone https://github.com/GoogleCloudPlatform/bank-of-anthos ${HOME}/bank-of-anthos
将 Bank of Anthos 分类记录器单体式应用部署到 Compute Engine。
cd ${HOME}/bank-of-anthos
make monolith-deploy
此命令会使用 Bank of Anthos 分类记录器单体式应用映像在 Compute Engine 中创建虚拟机。
创建一条防火墙规则,以允许通过端口 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
创建一个 GKE 集群来托管其余的 Bank of Anthos 服务。
gcloud container clusters create boa-cluster \ --project=PROJECT_ID --zone=COMPUTE_ZONE \ --machine-type=e2-standard-4 --num-nodes=4 \ --enable-stackdriver-kubernetes --subnetwork=default
创建集群后,提取其凭据并将 Kubernetes 上下文设置为指向该集群。
gcloud container clusters get-credentials boa-cluster --zone COMPUTE_ZONE
使用项目 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
在集群上应用各种 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
将所有 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
最后,您可以打开浏览器并使用上文中找到的外部 IP 地址访问网页(请务必使用 HTTP,而非 HTTPS)。
http://EXTERNAL_IP
您应能使用默认凭据登录,并在信息中心上查看事务。列出的事务来自当前托管在虚拟机中的分类记录器单体式应用。
后续步骤
您已经启用了所需的 API 并部署了 Bank of Anthos 设置,现在您可以继续学习本教程的下一部分,即发现和评估;在该部分,您将学习如何使用迁移发现工具来评估您的虚拟机是否适合使用 Migrate to Containers 工具来进行迁移。
如果您至此结束本教程的学习,请务必清理您的 Google Cloud 项目和资源。
清理
为避免产生不必要的 Google Cloud 费用,您应该在完成本教程后立即删除用于本教程的资源。这些资源包括:
boa-cluster
GKE 集群ledgermonolith-service
Compute Engine 虚拟机
您可以手动删除这些资源,也可以按照下面的步骤删除项目,这也将移除所有资源。