在可用区或区域之间移动虚拟机实例


本文档介绍如何在可用区或区域之间移动虚拟机 (VM) 实例。

准备工作

要求

本部分列出了在可用区和区域之间移动虚拟机的要求:

  • 项目配额。您的项目必须具有足够的配额才能执行以下操作:

    • 创建新快照。
    • 升级任何临时外部 IP 地址。
    • 在目标区域中创建新的虚拟机和磁盘。

      例如,如果您要移动的虚拟机挂接了三个磁盘,则需要足够的配额来创建三个临时永久性磁盘快照和三个新磁盘。创建新磁盘后,您可以删除临时快照。

    查看配额页面,确保您有足够的配额用于上述资源。如需了解详情,请参阅了解配额

  • Persistent Disk。挂接到要移动的虚拟机的永久性磁盘未挂接到其他虚拟机。

  • 本地 SSD。本地 SSD 用于临时存储,本地 SSD 上的数据不会通过手动虚拟机终止来保留。如果您需要保留本地 SSD 数据,请使用永久性磁盘等持久性存储选项对其进行复制。

  • GPU。如果您的虚拟机包含 GPU,请验证并确保您要使用的 GPU 在虚拟机的目标可用区中可用。有关 GPU 及其相应可用可用区的列表,请参阅 Compute Engine 上的 GPU

  • 子网。如果您要在区域之间移动虚拟机,例如在 us-west1-aasia-south1-b 之间,并且您的虚拟机属于子网,则必须为虚拟机选择新的子网。如需了解如何创建子网,请参阅添加子网

即使存在以下某种场景,您也可以移动虚拟机:

限制

如果您跨区域移动虚拟机,则无法保留虚拟机的临时内部或外部 IP 地址。您必须在重新创建虚拟机时选择新的 IP 地址。

资源属性

如需移动虚拟机,您必须关停该虚拟机,将其移至目标可用区或区域,然后重启。移动虚拟机后,请更新您对原始资源的任何引用,例如指向旧虚拟机的任何目标虚拟机或目标池。

在移动过程中,虚拟机和磁盘的某些服务器生成的属性会发生变化。

针对虚拟机更改的属性

下表介绍了针对虚拟机更改的属性:

属性名称 更改
内部 IP 地址 系统通常会分配新的内部 IP 地址,但虚拟机可能会保留原始的内部 IP 地址。
外部 IP 地址 如果在同一区域内的可用区之间移动虚拟机,则外部 IP 地址将保持不变。否则,请为虚拟机实例选择其他 IP 地址。
CPU 平台 根据目标可用区中的可用 CPU 平台,您的虚拟机在移动后可能具有不同的 CPU 平台。如需查看各地区中 CPU 平台的完整列表,请参阅可用区域和地区
网络/子网 如果您的虚拟机属于某个子网,并且您要跨区域移动虚拟机,则必须为虚拟机选择新的子网。在同一区域内跨可用区移动的虚拟机保留相同的子网。

针对磁盘更改的属性

下表介绍了针对磁盘更改的属性:

属性名称 更改
来源快照 新磁盘的来源快照设置为移动期间创建的临时快照。
来源快照 ID 来源快照 ID 设置为临时快照的 ID。
来源映像 来源映像字段为空。
映像 ID 映像 ID 为空。
上次分离时间戳 上次分离时间戳为空。
上次附加时间戳 上次挂接时间戳更改为新磁盘挂接到新实例时的时间戳。

针对虚拟机和磁盘更改的属性

下表介绍了针对虚拟机和磁盘更改的属性:

属性名称 更改
ID 生成新的资源 ID。
创建时间戳 生成新的创建时间戳。
地区资源网址 所有地区资源网址都会更改,以反映目标地区。下面的列表显示了更改的资源网址:
  • 虚拟机的来源磁盘网址
  • 虚拟机的机器类型网址
  • 页内链接网址
  • 地区网址
  • 磁盘类型网址
  • 磁盘的 users[] 列表中所列虚拟机的任何网址

移动虚拟机

如需跨可用区或区域移动虚拟机,您可以执行以下操作:

  1. 创建来源虚拟机的机器映像
  2. 通过位于其他可用区或区域的机器映像创建虚拟机。

以下示例详细介绍了如何移动虚拟机。在本示例中,您具有一个名为 myinstance 的虚拟机,该虚拟机具有两个名为 mybootdiskmydatadisk 的永久性磁盘,从 europe-west1-c 移动到 us-west1-b

来源虚拟机具有以下属性:

gcloud compute instances list
NAME       ZONE           MACHINE_TYPE  INTERNAL_IP    EXTERNAL_IP     STATUS
myinstance europe-west1-c n1-standard-4 10.240.116.177 146.148.112.106 RUNNING

如需将虚拟机移动到另一个可用区,请执行以下操作:

  1. 找出与您要移动的虚拟机关联的磁盘。

    转到“磁盘”

    在此示例中,您将找到 myinstance 虚拟机的以下两个关联磁盘:

    • 名为 mybootdisk 的启动磁盘
    • 名为 mydatadisk 的数据磁盘
  2. mybootdiskmydatadisk 的自动删除状态设置为 false,以确保在删除虚拟机时不会自动删除磁盘。

    gcloud compute instances set-disk-auto-delete myinstance --zone europe-west1-c \
        --disk mybootdisk --no-auto-delete
    

    如果状态已更新,则 gcloud compute 将返回响应 Updated [...]。如果自动删除状态原来已设置为 false,则 gcloud compute 将返回以下响应:

    No change requested; skipping update for [myinstance].
  3. (可选)保存虚拟机元数据。

    删除虚拟机时,虚拟机元数据也将一并移除。您可以将该信息保存在单独的文件中,然后将虚拟机元数据重新应用到新虚拟机。

    按照以下方式描述虚拟机的元数据:

    gcloud compute instances describe myinstance --zone europe-west1-c
    

    将内容保存到单独文件中。

  4. 创建数据的备份。

    为保险起见,请在永久性磁盘仍挂接到虚拟机时使用永久性磁盘快照创建数据的备份。在截取快照之前,请务必遵循快照最佳做法,确保快照与永久性磁盘的状态一致。

    清空磁盘缓冲区后,按如下所示创建快照:

    gcloud compute disks snapshot mybootdisk mydatadisk \
        --snapshot-names backup-mybootsnapshot,backup-mydatasnapshot \
        --zone europe-west1-c
    

    如需验证快照是否已创建,请运行 gcloud compute snapshots list

  5. (可选)如果您要跨同一区域内的多个可用区移动虚拟机,并且希望保留其临时内部或外部 IP 地址,请将该内部外部 IP 地址升级为静态 IP 地址,以便稍后可以重复使用。

  6. 删除您的虚拟机。

    删除虚拟机会彻底关停虚拟机并分离任何永久性磁盘。

    gcloud compute instances delete myinstance --zone europe-west1-c
    

    gcloud 会提示您确认删除:

     The following VMs are deleted. Any attached disks configured to
     be auto-deleted are deleted unless they are attached to any other
     VMs or the --keep-disks flag is given and specifies them for keeping.
     Deleting a disk is irreversible and any data on the disk is lost.
      — [myinstance] in [europe-west1-c]
     

    Do you want to continue (Y/n)?

    由于您先前在此过程中关闭了磁盘的自动删除状态,因此,请输入 Y 以继续并忽略该警告。

  7. 接着,创建启动磁盘和数据磁盘的另一个快照。

    gcloud compute disks snapshot mybootdisk mydatadisk \
        --snapshot-names mybootsnapshot,mydatasnapshot \
        --zone europe-west1-c
    
    Created [.../mydatasnapshot].
    Created [.../mybootsnapshot].
  8. (可选)删除永久性磁盘。

    如果打算为新磁盘重复使用永久性磁盘的名称,必须删除现有磁盘以释放这些名称。此外,删除磁盘还可以节省永久性磁盘存储费用。

    如果您不打算重复使用相同的磁盘名称,您无需将其删除。

    gcloud compute disks delete mybootdisk mydatadisk --zone europe-west1-c
    
  9. 使用创建的快照在 us-west1-b 中创建新的永久性磁盘。首先创建启动磁盘。

    gcloud compute disks create mybootdiskb --source-snapshot mybootsnapshot \
        --zone us-west1-b
    
    Created [.../mybootdiskb].
    NAME        ZONE           SIZE_GB TYPE        STATUS
    mybootdiskb us-west1-b     100     pd-standard READY

    然后创建数据磁盘。

    gcloud compute disks create mydatadiskb --source-snapshot mydatasnapshot \
        --zone us-west1-b
    
    Created [.../mydatadiskb].
    NAME        ZONE           SIZE_GB TYPE        STATUS
    mydatadiskb us-west1-b 4000    pd-standard READY
  10. us-west1-b 中重新创建虚拟机。

    • 如果您选择将虚拟机元数据保存在一个文件中,例如 myinstance.describe 中,则可以使用它在虚拟机上设置相同的元数据

    • 如果虚拟机具有静态外部 IP 地址,您可以通过指定 --address [ADDRESS] 选项将该地址重新分配给新虚拟机。如果您要跨区域移动虚拟机,则必须为新的虚拟机实例选择其他外部 IP 地址。

    • 如果虚拟机具有静态内部 IP 地址,您可以通过指定 --private-network-ip ADDRESS 选项将该地址重新分配给新虚拟机。如果您要跨区域移动虚拟机,则必须为新的虚拟机实例选择其他内部 IP 地址。

    • 如果您的虚拟机包含 GPU,请使用 --accelerator 选项将 GPU 添加到虚拟机。

    • 如果虚拟机使用特定子网,请添加 --subnet [SUBNET_NAME] 标志。

    如需了解其他标志的完整列表,请参阅 gcloud compute 实例创建

    gcloud compute instances create myinstanceb --machine-type n1-standard-4 \
        --zone us-west1-b \
        --disk name=mybootdiskb,boot=yes,mode=rw \
        --disk name=mydatadiskb,mode=rw
    
    Created [.../myinstanceb].
    NAME        ZONE           MACHINE_TYPE  INTERNAL_IP    EXTERNAL_IP     STATUS
    myinstanceb us-west1-b     n1-standard-4 10.240.173.229 146.148.112.106 RUNNING
  11. (可选)删除永久性磁盘快照。

    在您确认虚拟机已完成移动后,可通过删除创建的临时快照来节省存储费用。

    gcloud compute snapshots delete mybootsnapshot mydatasnapshot
    

    如果您不再需要备份快照,也请删除这些快照:

    gcloud compute snapshots delete backup-mybootsnapshot backup-mydatasnapshot
    

后续步骤