停止和启动虚拟机


本页面介绍如何停止和启动虚拟机 (VM) 实例。请注意,Compute Engine 可互换使用 STOPTERMINATE。如需暂停和恢复虚拟机,请参阅暂停和恢复虚拟机。如需详细了解如何停止和暂停虚拟机,请参阅虚拟机实例生命周期

如果您不再需要某个虚拟机,则可以暂时停止该虚拟机,稍后再重启。已停止的虚拟机会保留其永久性磁盘、其内部 IP 及其 MAC 地址。但是,虚拟机会关闭客机操作系统并失去其应用状态。如果您需要保留客机操作系统和应用状态,请改为暂停虚拟机。实际上,已停止的虚拟机会重置为其开机状态,并且不会保存任何数据。如果要更改机器类型、添加或移除挂接的磁盘、更改最低要求的 CPU 平台、添加或移除 GPU 或应用机器类型建议,请停止虚拟机。

停止虚拟机会导致 Compute Engine 向虚拟机发送 ACPI 关停信号。最新的客机操作系统都被配置为在关闭电源之前执行彻底关闭,以响应关闭电源信号。Compute Engine 会等待片刻以待客机完成关闭,然后将虚拟机转换为 TERMINATED 状态。

准备工作

限制

您无法停止和重启挂接了本地 SSD 的虚拟机。但是,如果虚拟机使用本地 SSD,则 Compute Engine 不会阻止您从客机操作系统内部关停虚拟机。如果您通过客机操作系统使用本地 SSD 关停虚拟机,则无法重启虚拟机,并且本地 SSD 上的数据会丢失。在删除虚拟机之前,请务必将您的关键数据从本地 SSD 迁移到永久性磁盘或其他虚拟机。

结算

处于 TERMINATED 状态的虚拟机不会按每秒使用量计费,也不会计入您的区域 CPU 配额。但是,附加到虚拟机的所有资源(例如,永久性磁盘外部 IP 地址)都将收取费用,直到将其删除。若要让这些挂接的资源不再产生费用,您可以将已停止的虚拟机重新配置为分离这些资源,然后删除这些资源。

您可以选择停止当前未使用的虚拟机,以免为处于非活动状态的虚拟机支付费用。当您准备好后,您可以使用相同的虚拟机属性、元数据和资源再次启动虚拟机。

停止虚拟机

如需停止虚拟机,请使用 Google Cloud Consolegcloud 工具Compute Engine API

控制台

  1. 在 Cloud Console 中,转到虚拟机实例页面。

    转到虚拟机实例

  2. 选择一个或多个要停止的虚拟机。

  3. 点击停止 (Stop)。

gcloud

如需停止虚拟机,请使用 gcloud compute instances stop 命令并指定一个或多个要停止的虚拟机:

gcloud compute instances stop VM_NAME

VM_NAME 替换为您要停止的虚拟机的名称。

API

如需停止虚拟机,请使用 instances.stop 方法构建一个 POST 请求:

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

请替换以下内容:

  • PROJECT_ID:您的虚拟机所在的项目
  • ZONE:虚拟机所在的地区
  • VM_NAME:您要停止的虚拟机的名称

虽然 TERMINATED 虚拟机仍然存在并保留了配置设置和实例元数据,但会失去其内存数据和虚拟机状态。除非您手动分离挂接到已终止虚拟机的所有资源或删除该虚拟机,否则这些资源会保持挂接状态。

当虚拟机处于 TERMINATED 状态时,您可以重启虚拟机删除虚拟机。如果您不打算重启虚拟机,请将其删除。

通过操作系统停止虚拟机

您可以选择通过客机操作系统使用 sudo shutdown -h nowsudo poweroff 命令停止虚拟机。使用这些命令可以停止使用本地 SSD 的虚拟机。登录虚拟机后,请运行以下某个命令:

sudo shutdown -h now
sudo poweroff

重启已停止且不具有加密磁盘的虚拟机

如要重启已停止的虚拟机,请使用 instances().start 方法。此方法可以启动处于 TERMINATED 状态的已停止虚拟机。

start 方法可以重启处于 TERMINATED 状态的虚拟机,而 reset()sudo reboot 等方法仅适用于当前正在运行的虚拟机。如果虚拟机处于 TERMINATED 状态,则几乎所有虚拟机(包括抢占式虚拟机)都可以重启。

控制台

  1. 在 Google Cloud Console 中,转到虚拟机实例页面。

    转到虚拟机实例

  2. 选择一个或多个要启动的虚拟机。

  3. 点击启动/恢复

gcloud

如需启动虚拟机,请使用 gcloud compute instances start 命令并指定一个或多个要启动的虚拟机:

gcloud compute instances start VM_NAME

VM_NAME 替换为您要启动的虚拟机的名称。

API

如需启动虚拟机,请使用 instances.start 方法构建一个 POST 请求:

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

请替换以下内容:

  • PROJECT_ID:您的虚拟机所在的项目
  • ZONE:虚拟机所在的地区
  • VM_NAME:您要启动的虚拟机的名称

如需使用客户端库重启虚拟机,请构建对 instances().start 方法的请求:

def restartInstance(auth_http, gce_service):
  request = gce_service.instances().start(project="myproject", zone="us-central1-a", instance="example-instance")
  response = request.execute(auth_http)

  print response

重启具有加密磁盘的虚拟机

如果要重启的虚拟机使用客户提供的加密密钥,则必须在尝试重启虚拟机时提供这些密钥。

控制台

  1. 在 Google Cloud Console 中,转到虚拟机实例页面。

    转到虚拟机实例

  2. 选择要启动的虚拟机。

  3. 点击启动/恢复。 系统会打开一个窗口,您可以在其中为附加到此虚拟机的设备指定加密密钥。

  4. 为附加到此虚拟机的每个加密磁盘指定加密密钥。

  5. 点击启动以启动虚拟机。

gcloud

如需启动使用加密密钥的虚拟机,请将 gcloud compute instances start 命令--csek-key-file 标志结合使用。如果您使用的是 RSA 封装密钥,请使用 gcloud beta 命令。

gcloud compute instances start VM_NAME \
    --csek-key-file ENCRYPTION_KEY_FILE

请替换以下内容:

  • VM_NAME:您要启动的虚拟机的名称
  • ENCRYPTION_KEY_FILE:包含加密密钥的 JSON 文件的相对路径。此密钥用于加密挂接到虚拟机的永久性磁盘。如需了解详情,请参阅加密密钥文件格式

API

如需启动具有加密密钥的虚拟机,请使用 instances.startWithEncryptionKey 方法构建一个 POST 请求:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/startWithEncryptionKey
    {
      "disks": [
        {
           "source": "DISK_URL",
           "diskEncryptionKey": {
             "ENCRYPTION_TYPE": "ENCRYPTION_KEY"
           }
        }
      ]
    }
 

请替换以下内容:

  • PROJECT_ID:您的虚拟机所在的项目
  • ZONE:虚拟机所在的地区
  • VM_NAME:您要启动的虚拟机的名称
  • DISK_URL:与挂接的磁盘(已使用客户提供的加密密钥进行了加密)的完整资源名称对应的资源网址
  • ENCRYPTION_TYPE:您使用的磁盘加密类型为 rawKeykmsKeyNamersaEncryptedKey。使用 rsaEncryptedKey 时,您必须使用 Beta API 而不是 v1 API。
  • ENCRYPTION_KEY:用于加密挂接到虚拟机的永久性磁盘的加密密钥。rawKeyrsaEncryptedKey 类型的密钥必须采用 base64 编码。按照 RSA 密钥封装中的说明准备类型为 rsaEncryptedKey 的密钥。

重置虚拟机

对您的虚拟机执行重置类似于对计算机执行硬重置,您可以按重置按钮或者按住电源按钮。重置虚拟机会强制清除机器内存中的内容,并将虚拟机重置为初始状态。该虚拟机不会对访客操作系统执行彻底关闭。在整个过程中,虚拟机仍处于 RUNNING 状态。

如需重置正在运行的虚拟机,请使用 Google Cloud Consolegcloud 工具Compute Engine API

控制台

  1. 在 Google Cloud Console 中,转到虚拟机实例页面。

    转到虚拟机实例

  2. 选择一个或多个要重置的虚拟机。

  3. 点击重置

gcloud

如需重置正在运行的虚拟机,请使用 gcloud compute instances reset 命令并指定一个或多个要重置的虚拟机:

gcloud compute instances reset VM_NAME

VM_NAME 替换为您要重置的虚拟机的名称。

API

如需重置虚拟机,请使用 instances.reset 方法构建一个 POST 请求:

 POST https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/reset

请替换以下内容:

  • PROJECT_ID:您的虚拟机所在的项目
  • ZONE:虚拟机所在的地区
  • VM_NAME:您要重置的虚拟机的名称

如需使用客户端库重置虚拟机,请构建对 instances().reset 方法发出的请求:

def resetInstance(auth_http, gce_service):
  request = gce_service.instances().reset(project="myproject", zone="us-central1-a", instance="example-instance")

  print response

运行 reset 命令后,后续可用区操作会在虚拟机关停后返回 DONE

其他重启方法

您还可以选择使用以下方法重置您的虚拟机:

  • sudo reboot(仅限 Linux):从虚拟机中调用此方法。此方法会擦除内存并使用原始元数据、映像和永久性磁盘来重新初始化虚拟机。此命令不会选用映像的任何更新版本,并且虚拟机会保留相同的临时 IP 地址。这类似于重启计算机。
  • 重新启动 Windows 虚拟机:您可以使用开始菜单来重新启动 Windows 虚拟机,其过程类似于上述示例中的 sudo reboot。在开始菜单中,点击注销旁的箭头并点击重启

后续步骤