作者:MeshCloud脉时云公有云架构师周宽
Migrate to Virtual Machines使你能够将你的虚拟机(VM)从你的源环境迁移(直接原样迁移)到Google Compute Engine,并进行少量的自动修改。Migrate to Virtual Machines使用数据复制技术,该技术将磁盘数据从源虚拟机持续复制到Google Cloud,而不会造成源虚拟机的任何停机。然后,你从复制的数据中创建虚拟机克隆,用于测试,并执行可预测的虚拟机切换到你在Google Cloud上运行的最终工作负载。
数据复制允许Migrate to Virtual Machines对源虚拟机的数据进行初始复制,这样你就可以快速克隆和测试迁移的虚拟机。然而,由于在迁移过程中,包括在测试过程中,源虚拟机会继续运行,Migrate to Virtual Machines会继续复制数据,直到你对迁移后的虚拟机进行最终切割。
迁移过程简介
Migrate to Virtual Machines为你提供了一个简单的路径,让你把你的虚拟机迁移到Compute Engine。迁移过程分为以下几个不同的阶段:
- 添加:选择要迁移的源虚拟机。
- 复制:将数据从源虚拟机复制到Google Cloud。数据复制是一个持续的过程,在后台进行,直到最后切换或删除迁移为止。
- 设置虚拟机目标详情: 为迁移的虚拟机配置Compute Engine设置,如项目、实例类型、内存、网络等。
- 测试克隆: 可选。从复制数据中创建一个源虚拟机的Compute Engine克隆,并在Google Cloud上进行测试。
- 切换: 将源虚拟机迁移到 Compute Engine。此过程包括停止源虚拟机,完成最后的复制,并从源虚拟机创建生产的Compute Engine实例。
- 完成: 迁移成功后,执行最后的清理工作。
下面的图片显示了这些阶段:
版本说明
https://cloud.google.com/migrate/virtual-machines/docs/5.0/concepts/comparison?hl=zh-cn
4.x 版: Migrate for Compute Engine
5.0 版: Migrate to Virtual Machines
相比较4.x版,5.0迁移aws EC2 机器配置更加简单化,不用再配置vpn,直接使用公网迁移,支持来源包括:AWS、Azure、vSphere、物理服务器(4.x版)。
本文档操作过程使用5.0版本,同时也是GCP console上现有默认版本。
EC2 VM 和AWS权限准备
- EC2 VM 迁移前准备
- 关闭selinux,必须是配置文件中 disabled 才行。
- 确认磁盘是否加密,EC2 vm大多数云盘为 gp3 ssd。如果加密,则稍后权限配置AWS IAM 权限是需要提供磁盘加密的key
- 如果需要保留vm 内网ip,则需要提前统计 vpc网段,网关,各vm 的私有ip地址。在GCP 新建同样的vpc网段。
- (可选)。给需要迁移的vm打上tag ,比如: migration:yes,方便选取。
- AWS 账号和权限
2.1迁移所用的账号和权限
- 如果是客户项目,则需要客户提供具有一定权限账号的 AKSK 秘钥对
- 在 gcp console中配置 Migrate to Virtual Machines 新建 AWS source 时会要求填入一个 AWS 账号的AKSK 秘钥对,要求此账号一定权限,可以操作vm快照。
2.2新建权限policy
AWS console -> IAM -> 访问管理 -> 策略 -> 创建策略 ->:
选择json ,输入以下json内容
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:DescribeInstances",
"ec2:DescribeVolumes",
"ec2:DescribeInstanceTypes",
"ec2:DescribeSnapshots",
"ec2:CreateTags",
"ec2:CreateSnapshots",
"ec2:StopInstances"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ebs:ListSnapshotBlocks",
"ebs:ListChangedBlocks",
"ebs:GetSnapshotBlock",
"ec2:DeleteSnapshot",
"ec2:DeleteTags"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/m2vm-resource": "snapshot"
}
}
}
]
}
如果使用加密磁盘,则需要增加如下部分。
- 需要提供 kms key
{
"Effect": "Allow",
"Action": [
"kms:Decrypt",
"kms:DescribeKey"
],
"Resource": "<<KMS key ARN>>"
}
点击下一步:
- 标签可不选
输出名称,创建策略:
2.3 新建账号(可选)
可新建用于迁移的专用cli账号,也可使用已有账号
AWS console : IAM -> 用户 -> 创建用户
如果只用于迁移,则可以不提供 AWS 管理控制台的访问权限
选择权限: 直接附加策略,选择新建的用于迁移的权限策略
点击创建:
2.4 将新建的策略绑定到已有账号
AWS console -> 策略 -> 搜索刚才新建的策略 -> 选择策略,点击操作。附加。
选择用户,附加策略
2.5生成AKSK秘钥对
AWS console -> 用户 -> 选择用户 -> 安全凭证 -> 访问秘钥
选择命令行CLI
创建完成:注意复制保存 此访问秘钥 和 私钥。
自此,权限配置完成。
- 给待迁移VM打上标签
EC2 中选择vm -> 标签 -> 管理标签
加上标签比如: migration : yes
GCP项目准备
- 操作账号权限
### 为您的用户帐号授予宿主项目的 vmmigration.admin 角色:
gcloud projects add-iam-policy-binding HOST_PROJECT_ID --member=user:USER_EMAIL_ADDRESS --role=roles/vmmigration.admin
###为您的用户帐号授予目标项目的 resourcemanager.projectIamAdmin 角色:
gcloud projects add-iam-policy-binding TARGET_PROJECT_ID --member=user:USER_EMAIL_ADDRESS --role=roles/resourcemanager.projectIamAdmin
- 启用Migration API
gcloud services enable servicemanagement.googleapis.com servicecontrol.googleapis.com iam.googleapis.com cloudresourcemanager.googleapis.com compute.googleapis.com
- 配置service accout所需权限
获取migration service account:
GCP console -> Compute Engine -> Migrate to Virtual Machines -> target -> 复制migration默认service account
授权migration service account 具有 compute engine 默认service account的 iam.serviceAccountUser 权限。
- 新建vpc 和 subnet
根据要求的vm网段和网关,新建vpc和subnet
如果要求vm私网地址一致,则需要提前reserve 私网IP地址。
创建Migrate to Virtual Machines
- 初始配置虚拟机
迁移的第一阶段是初始配置源虚拟机。例如,AWS中可能包含数十、数百甚至数千个虚拟机。您仅需要初始配置要迁移的虚拟机。
每个宿主项目和区域一次最多可以同时迁移 200 个虚拟机(不包括完成阶段的迁移)。
GCP console -> Computer Engine -> Migrate to Virtual Machines -> SOURCES -> ADD SOURCE -> AWS SOURCE
其中 :
- GCP region 和 AWS region 根据vm所在的区域和目标填写
- Access key ID 和 Secret access key 填写 AWS 账号的访问秘钥。
- TAG 根据AWS EC2里新建的tag填写,也可以不填,主要是方便区分选择。
创建成功之后,等待几分钟,在Source VM list里面就可以看到待迁移的EC2 vm列表了。
- 开始复制来源虚拟机
初始配置源虚拟机后,开始将源虚拟机中的磁盘数据复制到 Google Cloud。此过程在后台进行,不影响本地工作负载。
数据复制包括两个步骤:
首次复制步骤:Migrate to Virtual Machines 会创建来源虚拟机数据磁盘的初始快照,并将快照数据复制到 Google Cloud。首次复制可能需要几分钟或几小时才能完成,具体取决于源虚拟机上的磁盘数据量。
增量复制步骤:成功执行首个复制步骤后,系统会在设置的时间间隔(默认为每两个小时)执行增量复制步骤。在每个步骤中,系统会为每个数据磁盘创建一个新的快照。 利用块修改跟踪 (CBT) 机制,只有在上一步骤之后发生的数据更新才会被复制到 Google Cloud。
- 配置目标详情
选择目标虚拟机,可以配置目标项目、实例类型、磁盘类型、保留IP地址 以及 定时复制间隔时间。
- 测试克隆(可选)
测试克隆将会根据当前的复制过来的磁盘快照生成VM实例,可以检查VM实例启动,IP保留,进程启动,数据等是否正常。
- 切换
在切换阶段,您将控制权转移至 Google Cloud 上生产环境中的 Compute Engine 实例中运行的迁移后虚拟机。
切换过程:
- 等待数据复制完成。
- 关停源虚拟机。
- 执行最终数据复制。
- 停止复制。
- 根据最终复制的数据创建 Compute Engine 实例。
- 完成迁移
切换后系统会保留用于创建 Compute Engine 虚拟机的复制数据,以便您从上一个复制快照恢复复制。
删除迁移
删除迁移将移除:
- 存储在 Google Cloud 中的虚拟机复制数据
- Compute Engine 配置信息
- 监控历史记录
- 与迁移虚拟机关联的所有其他数据
- 迁移标签页上的已初始配置虚拟机列表中的虚拟机
- 虚拟机群组中的虚拟机
官网参考文档:
- https://cloud.google.com/migrate/virtual-machines/docs/5.0/how-to/create-an-aws-source
- https://cloud.google.com/migrate/virtual-machines/docs/5.0/how-to/migrating-vms