停止和启动实例

本页介绍如何停止和启动虚拟机实例。要了解有关停止实例的更多信息,请阅读实例生命周期

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

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

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

准备工作

限制

您无法停止附加了本地 SSD 的实例。如果实例具有本地 SSD,则 Compute Engine 不会阻止您从客机操作系统内部关闭实例,因此请采取额外的预防措施。

本地 SSD

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

结算

一旦虚拟机处于 TERMINATED 状态,Google 就不会对虚拟机资源计费。

具体来说,当虚拟机处于 RUNNING 状态并且正在停止(但尚未处于 TERMINATED 状态)时,Google 会对 vCPU、内存、GPU 及本地 SSD 使用情况进行计费。一旦 STOPPING 状态结束并且虚拟机进入 TERMINATED 状态,Google 就会停止对上述资源进行计费。

请记住,仍然附加至 TERMINATED 虚拟机的任何其他资源仍会产生费用,例如永久性磁盘、静态外部 IP 地址等。

有关实例状态的更多信息,请阅读实例生命周期文档。

停止实例

要停止实例,请使用 Google Cloud Platform Consolegcloud 工具API

Console

  1. 转到 GCP Console 中的“虚拟机实例”页面。

    转到“虚拟机实例”页面

  2. 选择一个或多个要停止的实例。
  3. 虚拟机实例页面的顶部,点击停止

gcloud

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

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

API

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

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

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

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

通过操作系统停止实例

您也可以通过客机操作系统停止实例。

Linux

使用 sudo shutdown -h nowsudo poweroff 命令。当您登录虚拟机时,请执行以下某个命令:

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

Windows

您可以使用开始菜单来重启 Windows 实例,其过程类似于上文的 sudo reboot。在开始菜单中,点击注销旁的箭头并点击重启

启动已停止的实例

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

start 方法可以重启处于 TERMINATED 状态的实例,但 reset()sudo reboot 等方法仅对当前正在运行的实例有效。大多数实例只要处于 TERMINATED 状态便可重启,但附加了本地 SSD 的实例除外,它们无法重启。

Console

  1. 转到 Google Cloud Platform 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 参考文档。

重启具有加密磁盘的实例

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

Console

  1. 转到“虚拟机实例”页面。

    转到“VM 实例”页面

  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 封装密钥,请向测试版 API 而不是 v1 API 发出请求。

POST https://www.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]"
       }
    }
  ]
}

其中:

  • [INSTANCE_NAME] 是实例的名称。
  • [PROJECT_ID] 是您的项目 ID。
  • [ZONE] 是此实例的地区
  • [MACHINE_TYPE] 是该实例的机器类型
  • [DISK_NAME] 是通过使用方提供的加密密钥加密的附加磁盘。
  • [ENCRYPTION_KEY] 是用于加密附加到实例的永久性磁盘的加密密钥。

重置实例

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

重置实例时,所有实例属性都不会更改。实例将保留其临时 IP 地址、永久性磁盘、机器类型等属性。但是,除非您备份数据,否则存储在内存中的任何数据都将被重置。

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

Console

  1. 转到 Google Cloud Platform 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")
  response = request.execute(auth_http)

  print response

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

运行 reset 命令后,一旦实例完全关闭并开始重启,后续区域操作将返回 DONE

使用其他重启方法

或者,您可以使用以下方法重置实例:

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

后续步骤

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

发送以下问题的反馈:

此网页
Compute Engine 文档