将工作负载迁移到新的计算实例


在某些情况下,您可能需要将工作负载从现有虚拟机实例 (VM) 迁移到较新的 VM。迁移到新虚拟机的原因包括:

  • 利用新的机器类型加快存储或网络速度。 例如,从 C2 升级到 H3 以提高网络带宽。
  • 与源虚拟机实例相比,获享更高的性价比。例如,从 N1 升级到 N4,以便在第 5 代 Intel Xeon 处理器上获得更高价值。
  • 使用仅在新虚拟机实例上提供的功能。例如,从 N4 升级到 C4,以利用额外的性能和维护选项。
  • 将虚拟机 (VM) 实例更改为裸机实例。
  • 将本地 SSD 磁盘添加到 C3 或 C3D 虚拟机实例。

升级到最新一代机器系列时,如果当前(源)虚拟机满足以下条件,您可以按照修改计算实例的机器类型中所述的较简单步骤进行操作:

  • 新机器系列支持的操作系统 (OS) 版本。
  • 新机器系列支持挂接到来源虚拟机的启动磁盘的磁盘类型。
  • 虚拟机不使用本地 SSD 存储空间。
  • 挂接了 GPU 的虚拟机使用 G2 机器类型。如需了解详情,请参阅添加或移除 GPU
  • 虚拟机仅使用新机器系列支持的功能。
  • 虚拟机不属于托管式实例组 (MIG)。
  • 虚拟机使用 gVNIC 网络接口。

准备工作

  • 如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以选择以下任一选项向 Compute Engine 进行身份验证:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

      如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证

所需的角色

如需获得修改或更改虚拟机所需的权限,请让管理员向您授予项目的以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

这些预定义角色包含修改或更改虚拟机所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

修改或更改虚拟机需要以下权限:

  • 更改机器类型:
    • 针对项目的 compute.instances.stop 权限
    • 针对项目的 compute.instances.create 权限
    • 针对项目的 compute.instances.start 权限
    • 针对实例的 compute.instances.setMachineType 权限
  • 如需创建磁盘的快照:
    • 针对项目的 compute.snapshots.create 权限
    • 针对磁盘的 compute.disks.createSnapshot 权限
  • 如需创建新的磁盘,请执行以下操作:
    • 针对项目的 compute.disks.list 权限
    • 针对项目的 compute.disks.create 权限
    • 针对项目的 compute.disks.update 权限
  • 如需将磁盘挂接到虚拟机:
    • 针对实例的 compute.instances.attachDisk 权限
    • 针对磁盘的 compute.disks.use 权限
  • 如需删除磁盘:针对项目的 compute.disks.delete 权限
  • 更改网络类型:
    • 针对项目的 compute.networks.list 权限
    • 针对项目的 compute.networks.update 权限

您也可以使用自定义角色或其他预定义角色来获取这些权限。

评估虚拟机迁移选项

从一种机器类型迁移到另一种机器类型取决于多个因素,包括:新机器类型在区域中的可用性,以及存储选项网络接口与源虚拟机的客户操作系统和新机器系列的兼容性。

计算要求

请查看针对当前实例和新机器类型的以下要求:

  • 浏览机器系列资源文档,确定哪些机器类型适合您的工作负载。考虑您的应用是否需要特定硬件(GPU)、高性能或更低的费用。
  • 查看新机器类型支持的磁盘类型的功能。Hyperdisk 支持 Persistent Disk 的大多数功能,但并非全部。不过,Hyperdisk 提供了 Persistent Disk 不提供的其他功能。
  • 查看预期机器系列的功能。新机器系列可能不支持当前机器系列使用的功能,例如自定义机器类型、本地 SSD 或安全强化型虚拟机
  • 查看区域和可用区,确保新机器系列在当前虚拟机的所有区域中均可用。您可能需要调整部署、高可用性和灾难恢复计划。
  • 查看您的操作系统迁移计划:
    • 如果新虚拟机需要较新版本的操作系统,请验证您的应用与新版本的操作系统兼容。
    • 如果您要迁移到 Arm,并且 Arm 映像不适用于您当前的操作系统版本,请选择新的操作系统或操作系统版本来运行应用,并验证应用与新操作系统兼容。
  • 您可以从 C3 虚拟机实例迁移到 C3 裸金属实例,前提是源 C3 虚拟机实例使用受支持的操作系统和网络驱动程序
  • 如果您要从除 C3 之外的机器系列迁移到裸机实例,则必须创建新实例。您可能需要运行自己的 Hypervisor;不过,只要 IDPF 驱动程序处于启用状态,您也可以运行任何受 C3 裸金属支持的操作系统。裸机实例使用 IDPF 网络接口,该接口仅作为实体函数(而非虚拟函数)呈现。

存储空间要求

请查看当前实例和新实例类型的以下存储空间要求:

  • 查看新机器系列支持的存储类型和存储接口。
    • 默认情况下,第一代和第二代机器系列仅使用 Persistent Disk 存储类型和 VirtIO-SCSI 接口。
    • 第三代及更新型号的机器系列(例如 M3、C3 和 N4)仅支持 NVMe 接口,其中一些机器仅支持 Hyperdisk 和本地 SSD 存储类型。
    • 裸金属实例(例如 C3 和 X4)仅支持 Hyperdisk。
  • 磁盘兼容性:
    • 如果启动磁盘使用的是新机器系列不支持的磁盘类型(例如 pd-standard),则您必须为新虚拟机创建新的启动磁盘。
    • 如果您要将操作系统升级到新版本,并且操作系统不支持就地升级,则必须创建新的启动磁盘。除非您将源启动盘上的数据复制到临时非启动盘,否则这些数据将会丢失。接下来,您需要创建一个新的启动磁盘,并将存储在临时非启动磁盘上的数据复制到新的启动磁盘。
    • 如果您不升级操作系统版本,则可以为当前的启动磁盘截取快照,并将其恢复为受支持的新磁盘类型。创建虚拟机时,您可以将此新磁盘用作启动磁盘。
    • 如果非启动磁盘使用新机器系列不支持的磁盘类型,您可以使用快照将源磁盘更改为新磁盘类型,如更改磁盘类型中所述。
  • 本地 SSD 磁盘无法移至新的虚拟机。您可以将一个足够大的磁盘挂接到当前虚拟机,然后使用快照将源磁盘更改为新磁盘类型,如更改磁盘类型中所述。创建挂接了本地 SSD 磁盘的虚拟机后,您可以将数据复制回本地 SSD 磁盘。
  • 如果当前虚拟机实例使用存储池中的磁盘,但您要将工作负载迁移到其他区域中的虚拟机,则必须在新区域中重新创建磁盘和存储池。
  • 如果新机器系列使用不同的磁盘接口(例如 NVMe 而非 SCSI),则客户机操作系统中的磁盘设备名称会有所不同。确保您的应用和脚本在引用已连接的磁盘时使用永久性设备名称符号链接

网络要求

请查看当前实例和新实例类型的以下网络要求:

  • 查看新虚拟机支持的网络接口。

    • 默认情况下,第一代和第二代机器系列仅使用 VirtIO 网络接口。
    • 第三代及更新型号的机器系列(例如 M3、C3 和 N4)仅支持 gVNIC 网络接口。
    • 裸金属实例仅支持 IDPF 网络接口
  • 确保您的应用和操作系统支持适用于相应机器系列的接口。

  • 查看虚拟机的网络配置,确定您是否需要保留分配的 IP 地址。如果是,您必须将 IP 地址升级为静态 IP 地址。

  • 如果您当前的虚拟机使用的是每个虚拟机的 Tier_1 网络性能,请确保新机器系列支持该功能或需要该功能。例如,您可以将 Tier_1 网络与 C2 机器类型搭配使用,但不需要与 H3 虚拟机搭配使用。

如需确定当前虚拟机的网络接口类型,请使用 gcloud compute instances describe 命令查看虚拟机的 nic-type

  gcloud compute instances describe VM_NAME --zone=ZONE

如果您的虚拟机的 nic-type 设置为 VIRTIO,则无法更改网络接口类型。您必须创建一个新虚拟机,并将网络接口类型设为 gVNIC

准备迁移现有虚拟机

完成评估部分后,下一步是准备迁移虚拟机实例,具体方法是请求新的虚拟机实例的资源并准备源虚拟机实例的备份。

准备计算资源

完成以下步骤,为将当前实例迁移到新实例做好准备:

  1. 在您计划迁移资源的区域和可用区中申请配额。如果您已有某种机器类型的配额,则可以申请迁移该配额。此过程需要几天才能完成。
  2. 为新的虚拟机实例创建预留,以确保新区域和可用区中有可用的机器资源。请务必了解预留资源的消耗方式,并测试您是否可以消耗预留资源
  3. 扩展高可用性和灾难恢复方案,以纳入新区域。
  4. 如果需要,请升级当前虚拟机上的操作系统。
    1. 如果操作系统供应商支持,请将操作系统就地升级到新机器系列支持的版本,并验证您的工作负载在新操作系统版本上是否按预期运行。
    2. 如果不支持操作系统的原位升级,那么在创建新的虚拟机时,您必须创建新的启动磁盘。确定您需要从当前启动磁盘复制哪些信息,并将其复制到非启动磁盘上的临时位置,以便将其传输到新虚拟机。如果当前虚拟机未挂接任何非启动磁盘,请执行以下操作:
  5. 如果适用于您的 Linux 发行版,请查看 /etc/udev/rules.d/ 下的 udev 规则。此文件可能包含与当前实例的硬件配置相关的条目,但不包含与新实例相关的条目。例如,以下条目可确保 virtio-pci 驱动程序 (VirtIO Net) 提供 eth0,从而阻止 gve 驱动程序 (gVNIC) 提供此接口。这可能会导致新实例中出现网络启动脚本和连接问题:
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="virtio-pci", ATTR{dev_id}=="0x0", KERNELS=="0000:00:04.0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

准备存储资源

完成以下步骤,为将挂接到当前实例的磁盘中的数据移至新实例做好准备:

  1. 在 Linux 系统上,请测试更新后的应用和脚本,确保它们使用的是永久性设备名称或符号链接,而不是磁盘设备名称
  2. 如果您要从运行 Microsoft Windows 的虚拟机迁移,请执行以下操作:
  3. 如果新虚拟机不支持与当前虚拟机相同的磁盘类型,您可能需要更新部署脚本或实例模板,以支持新机器系列。
  4. 如果当前虚拟机的启动磁盘使用了新机器系列不支持的磁盘类型,并且您要迁移具有相同配置的多个虚拟机,请创建一个自定义映像,以便在创建新虚拟机时使用:
    1. 为当前虚拟机的 pd-standard 启动磁盘创建快照
    2. 使用磁盘快照作为来源创建自定义映像
  5. 如果您需要移动本地 SSD 信息,请创建一个足够大的空白磁盘来备份本地 SSD 磁盘
    1. 请尽可能使用新虚拟机支持的磁盘类型。
    2. 如果当前虚拟机和新虚拟机都不支持任何磁盘类型,请使用当前虚拟机支持的磁盘类型创建临时磁盘。
    3. 将新磁盘挂接到当前虚拟机,然后格式化并装载磁盘
    4. 将数据从挂接到当前虚拟机的本地 SSD 磁盘复制到此临时磁盘。
  6. 更改当前虚拟机挂接的任何磁盘的类型,这些磁盘使用的是新虚拟机不支持的磁盘类型。如需将磁盘数据移至新磁盘,请为磁盘创建快照。或者,您也可以在虚拟机之间传输文件

    1. 您可以在虚拟机运行时截取快照,但在截取快照写入磁盘的任何数据都不会被捕获。由于快照是增量快照,因此您可以在停止虚拟机后再截取一次快照,以捕获所有最新更改。这种方法应该可以最大限度地缩短虚拟机在您切换到新虚拟机期间不可用的时长。
    2. 或者,您也可以在停止虚拟机后截取所有磁盘快照。我们建议您为挂接到虚拟机的所有磁盘创建快照,即使新机器系列支持相应磁盘类型也是如此。包含包含复制的本地 SSD 数据的所有临时磁盘。
    3. 创建磁盘快照所需的时间取决于多种因素,例如磁盘大小和磁盘中包含的数据量。例如,如果您对已满 85% 的 1 TiB 磁盘创建快照,则快照可能需要 5 分钟才能完成。但是,如果您对已满 85% 的 100 TiB 磁盘创建快照,则可能需要 11 分钟才能完成。我们建议您在开始迁移流程之前对磁盘执行测试快照,以了解创建快照所需的时间。
  7. 如果您有可离线的磁盘,则可以在源虚拟机仍可用时,使用以下方法将数据移至新磁盘:

    1. 从虚拟机分离磁盘
    2. 创建磁盘的快照
    3. 借助该快照,使用新机器系列支持的磁盘类型创建新磁盘。新磁盘的大小必须与来源磁盘相同或更大。

准备网络资源

请完成以下步骤,更新当前实例使用的网络配置以支持新实例:

  1. 如果您的当前虚拟机不使用 gVNIC,您必须创建一个使用 gVNIC 的网络接口的新实例。请参阅将 gVNIC 与 Compute Engine 虚拟机搭配使用的概览,了解创建新实例时需要执行的步骤。
  2. 如果您要在新区域中创建虚拟机,请在新区域中创建 VPC 网络和子网
  3. 如果您配置了自定义 NIC 队列计数,请参阅队列分配和更改机器类型
  4. 如果您想保留源虚拟机使用的 IP 地址,请将 IP 地址提升为静态 IP 地址
  5. 在停止源虚拟机之前,取消分配静态 IP 地址

准备 SUSE Enterprise Linux Server 操作系统

为避免出现硬件专用依赖项,请重新构建 initramfs(初始 RAM 文件系统)。这包括更多类型的驱动程序和模块,使操作系统与其他实例类型兼容。如果不执行此操作,您将遇到导致虚拟机无法正常启动的已知问题

在关闭系统之前,请以 root 身份运行以下命令,使用所有驱动程序重新构建 initramfs

  sudo dracut --force --no-hostonly

将工作负载迁移到新虚拟机

让虚拟机做好迁移准备后,下一步是将工作负载迁移到新虚拟机。

如果您要将虚拟机从第 1 代机器系列迁移到第 2 代机器系列,请参阅修改虚拟机的机器类型页面上的说明。如果您想更改现有虚拟机的名称,请参阅重命名虚拟机中的信息。

执行此任务所需的权限

您必须拥有以下权限才能执行此任务:

  • 针对虚拟机的 compute.instances.setMachineType 权限

本部分介绍了如何将工作负载从第 1 代或第 2 代虚拟机迁移到第 3 代(或更高版本)虚拟机。在此过程中,您需要创建一个新的虚拟机实例,然后将工作负载迁移到新虚拟机。

  1. 创建新虚拟机时,请选择一种受支持的磁盘类型作为启动磁盘,例如 Hyperdisk Balanced。

创建新的虚拟机

将工作负载从第一代或第二代虚拟机(例如 N1 或 N2)迁移到第三代或更高版本时,您必须先创建新的虚拟机,然后再迁移工作负载。

  1. 如果源虚拟机使用的非启动磁盘的磁盘类型受新机器系列支持,请将磁盘从虚拟机分离。
  2. 停止源虚拟机。
  3. 为仍挂接到来源虚拟机的所有磁盘创建快照。
  4. 使用公共映像配置为使用 gVNIC 的自定义映像创建新的计算虚拟机实例。创建新虚拟机时,请选择以下选项:
    • 从您选择的机器系列中选择机器类型。
    • 选择受支持的操作系统映像,或使用您之前创建的自定义映像。
    • 为启动磁盘选择受支持的磁盘类型。
    • 如果您根据原始磁盘的快照创建了新磁盘,请添加这些新磁盘。
    • 如果您要在其他区域创建实例,请指定新的 VPC 网络。
    • 如果新实例同时支持 VirtIO 和 gVNIC,请选择 gVNIC。
    • 如果您提升了来源虚拟机的临时 IP 地址,请指定静态 IP 地址。
  5. 启动新的虚拟机。

实例启动后

现在,新实例已创建并启动,请完成以下步骤以完成新实例的配置,并复制源实例中的所有数据。

  1. 将您从源虚拟机分离的磁盘挂接到新虚拟机。
  2. 对于挂接到来源虚拟机且使用新虚拟机不支持的磁盘类型的所有磁盘,请通过快照创建磁盘并将其挂接到新实例。创建新磁盘时,请选择新虚拟机支持的磁盘类型,并指定至少与原始磁盘一样大的大小。
  3. 如果原始虚拟机对为新虚拟机重新创建的任何磁盘使用了资源政策,您需要将资源政策添加到新磁盘。
  4. 如果您使用的是公共操作系统映像(而非自定义映像)创建的新虚拟机,请执行以下操作:
    1. 在新实例上配置必要的用户、驱动程序、软件包和文件目录,以支持您的工作负载。
    2. 在新虚拟机上安装修改后的应用和程序。 如有必要,请在新操作系统或架构上重新编译程序。
  5. 可选:如果您已将本地 SSD 磁盘的内容移至临时磁盘,并且新虚拟机已挂接本地 SSD 存储空间,则在格式化并装载磁盘后,您可以将数据从临时磁盘移至本地 SSD 磁盘。
  6. 将与源虚拟机关联的所有静态 IP 地址重新分配给新的虚拟机
  7. 完成使新虚拟机实现高可用性所需的所有其他任务,例如配置负载平衡器和更新转发规则
  8. 可选:根据需要,更新新虚拟机的 DNS 条目
  9. 建议:为新磁盘安排磁盘备份
  10. 建议:如果您将操作系统更改为其他版本或架构,请重新编译应用。

如果您在迁移工作负载时遇到问题,请与您的技术支持客户经理 (TAM) 或 Google 专业服务组织 (PSO) 联系以获取帮助。

将 n1-standard-8 迁移到 n4-standard-8 的示例

以下示例展示了将 n1-standard-8 虚拟机迁移到 n4-standard-8 虚拟机的过程。n1-standard-8 虚拟机有一个运行 Ubuntu1804 映像的 PD-SSD 启动磁盘和一个 PD-SSD 数据磁盘。您必须使用 CLI 或 REST API 执行此过程。

您可以通过以下两种方式将 N1 虚拟机升级为 N4 虚拟机:

选项 1:如果您的 N1 虚拟机使用 VirtIO 网络接口,则必须创建新的 N4 虚拟机。N4 仅支持 gvnic 网络接口和 Hyperdisk Balanced 磁盘。您可以创建 Persistent Disk 启动磁盘和数据磁盘的快照,然后根据这些快照创建 Hyperdisk Balanced 磁盘,挂接 Hyperdisk Balanced 磁盘,并使用 Hyperdisk Balanced 磁盘创建新的 N4 虚拟机。

您还可以选择使用较新版本的 Ubuntu OS 创建新的 Hyperdisk Balanced 启动磁盘。在此场景中,您可以根据启动磁盘快照创建新的 Hyperdisk Balanced 磁盘,但将该磁盘作为非启动磁盘挂接到 N4 虚拟机。然后,您可以将恢复的快照中的非系统数据复制到新的启动磁盘。

方法 2:如果您的 N1 虚拟机使用 gvnic 网络接口,操作系统具有 NVMe 存储设备驱动程序,没有任何已挂接的本地 SSD 磁盘或 GPU,并且不属于托管式实例组 (MIG),则您可以将机器类型从 N1 更改为 N4,但仍必须将 Persistent Disk 磁盘类型更改为 Hyperdisk Balanced 磁盘。您必须先分离 Persistent Disk 启动磁盘和数据磁盘,创建磁盘的快照,使用快照作为来源创建 Hyperdisk Balanced 磁盘,然后在更改机器类型后将新的 Hyperdisk Balanced 磁盘挂接到 N4 虚拟机。如果您的虚拟机已挂接 GPU,则必须先将其分离

创建磁盘快照所需的时间取决于多种因素,例如磁盘的总 TB 数。例如,如果您对已用空间达到 85% 的 1 TB 磁盘创建快照,则快照可能需要 5 分钟才能完成。但是,如果您对已满 85% 的 100 TB 磁盘创建快照,则可能需要 11 分钟才能完成。Google 建议您在开始迁移流程之前对磁盘执行测试快照,以了解创建快照所需的时间。

gcloud

选项 1:使用快照磁盘创建新的 N4 虚拟机

  1. 使用 gcloud compute instances stop 停止虚拟机:

    gcloud compute instances stop VM_NAME \
      --zone=ZONE
    

    替换以下内容:

    • VM_NAME 当前 n1-standard-8 虚拟机的名称。
    • ZONE:该虚拟机所在的可用区。
  2. 为磁盘创建快照。使用 gcloud compute snapshots create 为虚拟机挂接的 Persistent Disk 启动磁盘和数据磁盘创建快照。

    gcloud compute snapshots create SNAPSHOT_NAME \
        --source-disk=SOURCE_DISK_NAME \
        --source-disk-zone=SOURCE_DISK_ZONE
    

    替换以下内容:

    • SNAPSHOT_NAME:您要创建的快照的名称。
    • SOURCE_DISK_NAME:来源磁盘的名称。
    • SOURCE_DISK_ZONE:来源磁盘的可用区。
  3. 为数据磁盘创建新的 Hyperdisk Balanced 磁盘,方法是重复上一步并指定数据磁盘信息(而不是启动磁盘)。gcloud compute disks create

    gcloud compute disks create DISK_NAME \
        --project=PROJECT_NAME \
        --type=DISK_TYPE \
        --size=DISK_SIZE \
        --zone=ZONE \
        --source-snapshot=SNAPSHOT_NAME \
        --provisioned-iops=PROVISIONED_IOPS \
        --provisioned-throughput=PROVISIONED_THROUGHPUT
    
    

    替换以下内容:

    • DISK_NAME:您要根据快照磁盘创建的新磁盘的名称。
    • PROJECT_NAME:您的项目的名称。
    • DISK_TYPE:新磁盘类型 - 在此示例中,它是 Hyperdisk Balanced 磁盘。
    • DISK_SIZE:磁盘的大小(例如 100GB)。
    • ZONE:新磁盘所在的可用区。
    • SNAPSHOT_NAME:快照来源磁盘的名称。
    • 可选:PROVISIONED_IOPS:磁盘的 IOPS 性能(例如:3600)。
    • 可选:PROVISIONED_THROUGHPUT:预配磁盘的吞吐量性能(例如:290)。
  4. 每个已截取快照的磁盘重复上述步骤。

  5. 使用 gcloud compute instances create 创建 n4-standard-8 虚拟机并挂接 Hyperdisk Balanced 磁盘:

    gcloud compute instances create VM_NAME \
        --project=PROJECT_NAME \
        --zone=ZONE \
        --machine-type=NEW_MACHINE_TYPE \
        --boot-disk-device-name=BOOT_DISK_NAME \
        --disk=name=NON_BOOT_DISK_NAME, boot=no \
        --network-interface=nic-type=GVNIC
    

    替换以下内容:

    • VM_NAME:新虚拟机实例的名称。
    • PROJECT_NAME:您的项目的名称。
    • ZONE:新虚拟机所在的可用区。
    • NEW_MACHINE_TYPE:机器类型,在本例中为 n4-standard-8
    • BOOT_DISK_NAME 您根据附加到 n1-standard-8 虚拟机的来源磁盘快照创建的 Hyperdisk Balanced 启动磁盘的名称。
    • NON_BOOT_DISK_NAME 您根据挂接到 n1-standard-8 虚拟机的来源快照磁盘创建的 Hyperdisk Balanced 数据磁盘的名称。
  6. 使用 gcloud compute instances start 启动 n4-standard-8 虚拟机:

    gcloud compute instances start VM_NAME
    

    VM_NAME 替换为新虚拟机的名称。

方法 2:执行就地升级

只有在 N1 虚拟机使用 gvnic 网络接口、操作系统具有 NVMe 存储设备驱动程序、没有任何已挂接的本地 SSD 磁盘或 GPU,并且不属于托管式实例组 (MIG) 的情况下,此选项才可用。使用具有 VirtIO 网络接口的 N1 虚拟机执行此过程会生成 VM 不兼容错误。

  1. 停止虚拟机
  2. 从虚拟机分离磁盘
  3. 创建启动磁盘和数据磁盘的快照
  4. 使用磁盘快照作为每个磁盘的来源创建 Hyperdisk Balanced 启动磁盘和数据磁盘
  5. 机器类型设置为 N4 虚拟机。
  6. 挂接 Hyperdisk Balanced 启动磁盘和 Hyperdisk Balanced 数据磁盘
  7. 启动 N4 虚拟机

REST

选项 1:使用快照磁盘创建新的 N4 虚拟机

  1. 使用 instances.stop 方法停止虚拟机:

     POST https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/instances/VM_NAME/stop
    

    替换以下内容:

    • PROJECT_NAME:项目 ID。
    • ZONE:包含虚拟机的可用区。
    • VM_NAME:您当前 n1-standard-8 虚拟机的名称。
  2. 使用 disks.createSnapshot 方法为磁盘创建快照,以便为实例挂接的永久性磁盘启动磁盘和数据磁盘创建快照。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/disks/DISK_NAME/createSnapshot
    

    在请求正文中,添加新快照的 Persistent Disk 磁盘的名称。

    例如:

    {
        "name": "SNAPSHOT_NAME"
    }
    

    替换以下内容:

    • PROJECT_NAME:您的项目的名称。
    • ZONE:您的磁盘所在的可用区。
    • DISK_NAME:您计划截取快照的磁盘。
    • SNAPSHOT_NAME:快照的名称,例如 hdb-boot-diskhdb-data-disk
  3. 使用 disks.insert 方法创建 Hyperdisk Balanced 磁盘。您需要执行此步骤两次:第一次是添加 Hyperdisk Balanced 启动磁盘的 name;第二次是添加数据磁盘的 name。在请求正文中,使用新的 Hyperdisk Balanced 启动和数据磁盘的 sourceSnapshot、磁盘的 type (Hyperdisk Balanced),以及磁盘的 sizeGB

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONEdisks
    

    替换以下内容:

    • PROJECT_NAME:您的项目的名称。
    • ZONE:您的磁盘所在的可用区。

    在请求正文中,添加以下各项:

    例如:

    {
        "name": "my-hdb-boot-disk" or "my-hdb-data-disk",
        "sourceSnapshot": "projects/your-project/global/snapshots/SNAPSHOT_NAME",
        "type": "projects/your-project/zones/us-central1-a/diskTypes/hyperdisk-balanced",
        "sizeGb": "100"
    }'
    
  4. 使用 instances.insert 方法创建新的 N4 虚拟机。

    
    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/instances
    
    

    替换以下内容:

    • PROJECT_NAME:您的项目的名称。
    • ZONE:您的磁盘所在的可用区。

    在请求正文中,添加以下各项:

    
      {
        "machineType":"projects/your-project/zones/us-central1-a/machineTypes/n4-standard-8" "name":"VM_NAME",
        "disks": [
          {
            "boot": true,
            "deviceName": "my-hdb-boot-disk",
            "source": "projects/your-project/zones/us-central1-a/disks/my-hdb-boot-disk",
            "type": "PERSISTENT"
          },
    
          {
            "boot": false,
            "deviceName": "my-hdb-data-disk",
            "source": "projects/your-project/zones/us-central1-a/disks/my-hdb-data-disk",
            "type": "PERSISTENT"
          }
          ],
            "networkInterfaces":[
              {
                "network":"global/networks/NETWORK_NAME",
                "subnetwork":"regions/REGION/subnetworks/SUBNET_NAME",
                "nicType": "GVNIC"
              }
           ]
         }
    
    

    替换以下内容:

    • VM_NAME:虚拟机的名称。
    • NETWORK_NAME:网络的名称。
    • REGION:区域的名称。
    • SUBNET_NAME:子网的名称。
  5. 使用 instances.start 方法启动虚拟机:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/instances/VM_NAME/start
    

    替换以下内容:

    • PROJECT_NAME:您的项目的名称。
    • ZONE:虚拟机所在的可用区。
    • VM_NAME:虚拟机的名称。

方法 2:执行就地升级

只有在 N1 虚拟机使用 gvnic 网络接口、没有任何已挂接的本地 SSD 磁盘或 GPU,并且不属于代管式实例组 (MIG) 的情况下,此选项才可用。使用具有 VirtIO 网络接口的 N1 虚拟机执行此过程会生成 VM 不兼容错误。

  1. 使用 instances.stop 方法停止虚拟机。

  2. 使用 instances.detachDisk 方法将原始 Persistent Disk 启动磁盘从 N1 虚拟机分离。您还必须从虚拟机分离所有数据磁盘。

    https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/instances/VM_NAME/detachDisk?deviceName=DISK_NAME
    

    替换以下内容:

    • PROJECT_NAME:您的项目的名称。
    • ZONE:您的磁盘所在的可用区。
    • VM_NAME:源虚拟机的名称,其中挂接了 pd-ssd 磁盘。
    • DISK_NAME:您要分离的磁盘。
  3. 为磁盘创建快照。使用 disks.createSnapshot 方法为实例挂接的 Persistent Disk 启动磁盘和数据磁盘创建快照。

  4. 使用 disks.insert 方法创建 Hyperdisk Balanced 启动和数据磁盘,并在请求正文中添加 Hyperdisk Balanced 磁盘的 name、新的 Hyperdisk Balanced 磁盘的 sourceSnapshot、磁盘的 type (Hyperdisk Balanced),以及磁盘的 sizeGB

  5. 使用 instances.setMachineType 方法执行原地机器类型升级,并在请求正文中添加 machineType

    POST  https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONEinstances/VM_NAME/setMachineTypeMACHINE_TYPE
    

    替换以下内容:

    • PROJECT_NAME:您的项目的名称。
    • ZONE:您的磁盘所在的可用区。
    • VM_NAME:要升级的虚拟机的名称。
    • MACHINE_TYPE:新机器类型。

    在请求正文中,添加以下各项:

    
    {
     "machineType": "projects/PROJECT_NAME/zones/ZONE/machineTypes/MACHINE_TYPE",
    }
    
    
  6. 使用 instances.attachDisk 方法将新的 Hyperdisk Balanced 启动磁盘和 Hyperdisk Balanced 数据磁盘挂接到 N4 虚拟机。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/instancesVM_NAMEattachDiskDISK_NAME
    

    替换以下内容:

    • PROJECT_NAME:您的项目的名称。
    • ZONE:您的磁盘所在的可用区。
    • VM_NAME:源虚拟机实例的名称,其中挂接了 pd-ssd 磁盘。
    • DISK_NAME 您要挂接的磁盘。

    在请求正文中,添加以下各项:

    {
    "source": "projects/your-project/zones/us-central1-a/disks/my-hdb-boot-disk",
    "deviceName":"my-hdb-boot-disk","boot":true
    }
    
    {
    "source": "projects/your-project/zones/us-central1-a/disks/my-hdb-data-disk",
    "deviceName":"my-hdb-data-disk","boot":false
    }
    
  7. 使用 instances.start 方法启动 N4 虚拟机。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONEinstances/VM_NAME/start
    

    替换以下内容:

    • PROJECT_NAME:您的项目的名称。
    • ZONE:您的磁盘所在的可用区。
    • VM_NAME:虚拟机的名称。

清理

确认您可以连接到新虚拟机,并且工作负载在新虚拟机上按预期运行后,您可以移除不再需要的资源:

  1. 您为挂接到来源虚拟机的磁盘创建的快照。
  2. 挂接到来源虚拟机的磁盘的任何快照时间表。
  3. 创建的临时磁盘,用于将本地 SSD 数据复制到新虚拟机。
  4. 来源虚拟机和所有已挂接的磁盘。

后续步骤