停止和启动实例


本页面介绍如何停止和启动虚拟机实例。如需暂停和恢复实例,请阅读暂停和恢复实例。如需详细了解如何停止和暂停实例,请参阅实例生命周期

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

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

停止的实例不会产生费用,但挂接到实例的所有资源仍会产生费用。例如,即使您已停止实例,我们也会根据价格表向您收取挂接到该实例的永久性磁盘外部 IP 地址的费用。若要让这些挂接的资源不再产生费用,您可以将已停止的实例重新配置为不使用这些资源,然后删除这些资源。

如果您需要保留客机操作系统和应用状态,请改为暂停实例

准备工作

限制

您无法停止挂接了本地 SSD 的实例。如果实例已挂接本地 SSD,则 Compute Engine 不会阻止您从客机操作系统内部关停该实例,因此请采取预防措施。

本地 SSD

您无法停止挂接了本地 SSD 的实例。相反,在完全删除实例之前,您必须将本地 SSD 的关键数据迁移到永久性磁盘或另一个实例。由于 Compute Engine 不会阻止您关闭挂接了本地 SSD 的实例上的客机操作系统,因此请采取预防措施。

结算

处于“TERMINATED”状态的实例不会按每秒使用量计费,也不会计入您的地区 CPU 配额,因此您可以选择停止不使用的实例,以免为处于非活动状态的实例支付费用。当您准备好后,可以返回并再次启动拥有相同的实例属性、元数据和资源的同一个实例。

当您的实例处于“TERMINATED”状态时,系统不会按每秒使用量向您收费,但挂接到虚拟机的所有资源(例如静态 IP 和永久性磁盘)都将计费,直到被删除为止。

停止实例

如需停止实例,请使用 Google Cloud Consolegcloud 工具Compute Engine API

控制台

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

    转到“虚拟机实例”页面

  2. 选择一个或多个要停止的实例。

  3. 点击停止

gcloud

使用 instances stop 命令并指定一个或多个要停止的实例。

gcloud compute instances stop example-instance-1 example-instance-2

API

在 API 中,构建一个 POST 请求以停止实例。

POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/instances/example-instance/stop

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

实例处于 TERMINATED 状态后,您可以重启实例删除实例。或者,您也可以无限期地让实例保持“TERMINATED”状态。但是,如果您不打算重启实例,请将其删除

通过操作系统停止实例

您也可以通过客机操作系统使用 sudo shutdown -h nowsudo poweroff 命令停止实例。登录虚拟机后,请执行以下某个命令:

me@example-instance:~$ sudo shutdown -h now
me@example-instance:~$ sudo poweroff

重启已停止且不具有加密磁盘的实例

要启动已停止的实例,请使用 instances().start 方法。这将启动当前处于 TERMINATED 状态的已停止的虚拟机实例。

start 方法可以重启处于 TERMINATED 状态的实例,而 reset()sudo reboot 等方法仅对当前正在运行的实例有效。几乎所有处于 TERMINATED 状态的实例都可以重启。

控制台

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

    转到“虚拟机实例”页面

  2. 选中一个或多个要启动的实例旁边的复选框。

  3. 点击启动

gcloud

要使用 gcloud compute 重置实例,请执行以下操作:

gcloud compute instances start example-instance

API

在 API 中,向以下 URI 发出 POST 请求,并相应地替换项目、地区和实例名称:

https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/instances/example-instance/start

要使用客户端库重启实例,请构建对 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

如需详细了解此方法,请参阅 instances().start 参考文档。

重启具有加密磁盘的实例

如果要重启的实例使用客户提供的加密密钥,您必须在尝试重启实例时提供这些密钥。

控制台

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

    转到“虚拟机实例”页面

  2. 点击要启动的实例的名称。这将打开实例详细信息页面。

  3. 点击启动按钮。系统会打开一个窗口,您可以在其中为附加到此实例的设备指定加密密钥。

  4. 为附加到此实例的每个加密磁盘指定加密密钥。

  5. 点击启动以启动实例。

gcloud

启动实例时,请使用 --csek-key-file 标志提供密钥并提供磁盘名称。如果您使用的是 RSA 封装密钥,请使用 gcloud beta 组件:

 gcloud compute instances start INSTANCE_NAME \
     --csek-key-file ENCRYPTION_KEY

替换以下内容:

  • INSTANCE_NAME:实例的名称
  • ENCRYPTION_KEY:用于加密挂接到实例的永久性磁盘的加密密钥

API

在 API 中,构造 POST 请求以启动使用加密密钥的实例。如果您使用的是 RSA 封装密钥,请向 Beta 版 API 而不是 v1 API 发出请求。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/startWithEncryptionKey
{
  "instanceEncryptionKey": {
    "rsaEncryptedKey": "ENCRYPTION_KEY
  },
  "disk": [
    {
       "source": "DISK_NAME",
       "diskEncryptionKey": {
         "rsaEncryptedKey": "ENCRYPTION_KEY"
       }
    }
  ]
}

替换以下内容:

  • PROJECT_ID 是项目 ID
  • ZONE 是此实例所在的区域
  • INSTANCE_NAME 是实例的名称
  • ENCRYPTION_KEY 是用于加密挂接到实例的永久性磁盘的加密密钥
  • DISK_NAME 是通过使用方提供的加密密钥加密的挂接磁盘

重置实例

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

您可以通过以下几种方式对正在运行的实例执行重置:使用 Cloud Console 中的重置按钮、使用 gcloud 中的 instances reset 命令或者在 API 中发出 POST 请求。

控制台

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

    转到“虚拟机实例”页面

  2. 选择一个或多个要重置的实例。

  3. 点击重置

gcloud

要使用 gcloud compute 重置实例,请执行以下操作:

gcloud compute instances reset example-instance

API

在 API 中,向以下 URI 发出 POST 请求,并相应地替换项目、地区和实例名称:

https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/instances/example-instance/reset

要使用客户端库重置实例,请构建对 instances().reset 方法的请求:

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

  print response

如需详细了解此方法,请参阅 instances().reset 参考文档。

运行 reset 命令后,一旦实例完全关停,后续区域操作就会返回 DONE

使用其他重启方法

您还可以选择使用以下方法重置您的实例:

  • sudo reboot(仅限 Linux):从实例中调用此方法。此方法会擦除内存并使用原始元数据、映像和永久性磁盘来重新初始化实例。此命令不会选用映像的任何更新版本,并且实例会保留相同的临时 IP 地址。这类似于重启计算机。
  • 重新启动 Windows 实例:您可以使用开始菜单重新启动 Windows 实例,此过程类似于上文的 sudo reboot。在开始菜单中,点击注销旁的箭头并点击重启
  • gcloud compute instances delete,后跟 gcloud compute instances create:这是一种完全破坏性的重启方式,将使用传递给 gcloud compute instances create 的所有信息来初始化实例。您随后可以选择您想使用的任何新映像或其他资源。重启的实例很可能会具有不同的 IP 地址。此方法可能会更换托管实例的物理机器。

后续步骤