在地区之间移动实例

本页面介绍如何在地区之间移动虚拟机实例,方法包括使用 projects.moveInstance API,或通过一系列步骤手动移动。如果某个地区不可用或已弃用,您可以使用该方法将实例移动到其他地区。

移动实例需要执行以下步骤:

  1. 创建附加到原始实例的永久性磁盘的快照。
  2. 在目标地区中创建永久性磁盘的副本。
  3. 对于在同一区域内移动的实例,暂时将分配给该实例的任何临时外部 IP 地址升级为静态外部 IP 地址。
  4. 在目标地区中创建并启动新实例。如果您要跨区域移动,还必须为新实例选择新的子网。
  5. 将新创建的永久性磁盘附加到新实例。
  6. 向新实例分配外部 IP 地址。如有必要,将该地址降级回临时外部 IP 地址。
  7. 删除快照、原始磁盘和原始实例。

您应该尽可能使用 projects.moveInstance API 自动移动实例。如果您的实例不符合使用 moveInstance API 的要求,则仍可以手动移动实例

准备工作

要求

在您移动实例前,必须满足以下要求:

  • 项目中必须有足够配额用于新快照及提升任何临时外部 IP 地址。
  • 目标区域中有足够配额用于新实例和磁盘。例如,如果您要移动的实例有三个附加的磁盘,则需要足够的配额来创建三个临时永久性磁盘快照和三个新磁盘。创建新磁盘后,您可以删除临时快照。
  • 附加到要移动的实例的永久性磁盘未附加到其它实例。
  • 如果实例包含 GPU,请验证并确保您要使用的 GPU 在目标地区中可用。有关 GPU 及其相应可用地区的列表,请参阅 Compute Engine 上的 GPU

移动实例后,请更新您对原始资源的任何现有引用,例如指向旧实例的任何目标实例或目标池。

资源属性

在移动过程中,实例和磁盘的某些服务器生成的属性将发生变化。

针对实例更改的属性

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

针对磁盘更改的属性

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

针对实例和磁盘更改的属性

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

在手动和自动移动之间进行选择

手动移动表示您执行上述各个步骤,而不使用 projects.moveInstances API。您应该尽可能使用 moveInstances API 以省去一些工作,但有时候,无法使用 moveInstances API。具体而言:

  • 如果您要在区域之间移动实例,如在 us-west1-aasia-south1-b 之间,并且您的虚拟机属于子网,则必须手动执行移动并为实例选择新的子网。
  • 如果实例附加了 GPU 或本地 SSD,也必须手动执行移动。

无论是手动还是自动移动,您都需要满足要求才能成功移动实例。

移动实例之前,请确保查看要求

gcloud


确保实例正在运行。然后,在 gcloud 中使用 compute instances move 子命令来移动实例。

举例来说,如要将名为 example-instance-1 的实例及其附加的所有永久性磁盘(目前在 us-central1-b 中运行)移动到 us-central1-f,请运行下列命令:

gcloud compute instances move example-instance \
    --zone us-central1-a --destination-zone us-central1-f

此操作可能需要几分钟才能完成。

API

在 API 中,使用包含 targetInstancedestinationZone 的请求正文向 moveInstance API 发出 POST 请求。例如:

{
   "targetInstance": "zones/us-central1-a/instances/example-instance",
   "destinationZone": "zones/us-central1-b"
}

手动移动实例

您应该尽可能自动移动实例,因为 moveInstance API 可为您处理移动实例所包含的全部任务。但是,某些限制可能会限制您使用此 API 的能力,在这种情况下,您可以手动执行移动。如果满足以下任一条件,您可以手动移动实例:

  • 您的虚拟机未处于 RUNNING 状态。
  • 您要将虚拟机移动到其他区域,且您的虚拟机属于子网。
  • 您的实例已附加 GPU 或本地 SSD。

以下示例介绍如何将具有两个永久性磁盘 myrootdiskmydatadiskmyinstance 实例从 europe-west1-a 移动到 us-west1-b。示例实例如下所示:

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

要将实例移动到另一个地区,请执行以下操作:

  1. 标识与您要移动的实例关联的磁盘。

    转到“磁盘”页面

    在此示例中,您将找到 myinstance 实例的以下 2 个关联磁盘:

    • 名为 myrootdisk 的启动磁盘
    • 名为 mydatadisk 的数据磁盘
  2. myrootdiskmydatadisk 的自动删除状态设置为 false,以确保在删除实例时不会自动删除磁盘。

    gcloud compute instances set-disk-auto-delete myinstance --zone europe-west1-a \
        --disk myrootdisk --no-auto-delete
    

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

  3. (可选)保存实例元数据。

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

    按照以下方式描述实例的元数据:

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

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

  4. 创建数据的备份。

    为以防万一,请使用永久性磁盘快照创建数据的备份。由于永久性磁盘仍附加到实例,因此,为确保快照与永久性磁盘的状态一致,请在创建快照之前清空磁盘缓冲区

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

    gcloud compute disks snapshot myrootdisk mydatadisk \
        --snapshot-names backup-myrootsnapshot,backup-mydatasnapshot \
        --zone europe-west1-a
    

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

  5. 删除实例。

    删除实例将彻底关闭该实例并分离任何永久性磁盘。

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

    gcloud 提示您确认删除:

     The following instances will be deleted. Attached disks configured to
     be auto-deleted will be deleted unless they are attached to any other
     instances. Deleting a disk is irreversible and any data on the disk
     will be lost.
      — [myinstance] in [europe-west1-a]
     

    Do you want to continue (Y/n)?

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

  6. 接着,创建根磁盘和数据磁盘的另一张快照。

    gcloud compute disks snapshot myrootdisk mydatadisk \
        --snapshot-names myrootsnapshot,mydatasnapshot \
        --zone europe-west1-a
    
    Created [.../mydatasnapshot].
    Created [.../myrootsnapshot].
  7. (可选)删除永久性磁盘。

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

    如果不打算重复使用相同的磁盘名称,您可以稍后删除永久性磁盘。

    gcloud compute disks delete myrootdisk mydatadisk --zone europe-west1-a
    
  8. 用刚刚创建的快照在 us-west1-b 中创建新的永久性磁盘。首先创建根磁盘。

    gcloud compute disks create myrootdiskb --source-snapshot myrootsnapshot \
        --zone us-west1-b
    
    Created [.../myrootdiskb].
    NAME        ZONE           SIZE_GB TYPE        STATUS
    myrootdiskb 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
  9. us-west1-b 中重新创建实例。

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

    • 如果实例具有预留的 IP 地址,您可以通过指定 --address ADDRESS 选项将该地址重新分配给新实例。

    • 如果实例包含 GPU,请使用 --accelerator 选项将 GPU 添加到实例。

    • 如果实例使用特定子网,请在 --zone [ZONE_NAME] 标志之前添加 --subnet [SUBNET_NAME] 标志。

    如需了解其他标志的完整列表,请参阅 gcloud compute instances create

    gcloud compute instances create myinstanceb --machine-type n1-standard-4 \
        --zone us-west1-b \
        --disk name=myrootdiskb,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
  10. (可选)删除永久性磁盘快照。

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

    gcloud compute snapshots delete myrootsnapshot mydatasnapshot
    

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

    gcloud compute snapshots delete backup-myrootsnapshot backup-mydatasnapshot
    

后续步骤

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Compute Engine 文档