本文档介绍了如何手动停止、重启、重置或重新启动虚拟机 (VM) 实例。这些操作在以下场景下非常有用:
如果您不再使用虚拟机或者想要修改其一个或多个属性,请停止该虚拟机;例如,如果要重命名虚拟机、更改其机器类型、添加或移除挂接的磁盘,或者更改满足最低要求的 CPU 平台。停止虚拟机后,请通过重启恢复工作负载;如果您不再需要虚拟机,请将其删除。
重置虚拟机,例如虚拟机无响应或客机操作系统 (OS) 崩溃。重置虚拟机后,您可以恢复工作负载。
例如,如果要擦除虚拟机的内存并将其重新初始化为原始启动状态,请从客机操作系统中重新启动虚拟机。从客机操作系统内部重新启动虚拟机后,您可以恢复工作负载。
准备工作
-
设置身份验证(如果尚未设置)。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
-
停止虚拟机:虚拟机的
compute.instances.stop
权限 -
从客机操作系统内部停止虚拟机:虚拟机的
compute.instances.setMetadata
权限(如果虚拟机使用实例级 SSH 公钥)。 -
重启虚拟机:虚拟机的
compute.instances.start
权限 -
重启使用加密密钥的虚拟机:虚拟机的
compute.instances.startWithEncryptionKey
权限 -
重置虚拟机:虚拟机的
compute.instances.reset
权限 -
如需从客机操作系统内部重新启动虚拟机:虚拟机的
compute.instances.setMetadata
权限 Compute Engine 会将 ACPI 关停信号发送到虚拟机,并等待一小段时间,以便客机操作系统执行彻底关闭。Compute Engine 随后先将虚拟机状态设置为
STOPPING
,然后在一分钟内将其转换为TERMINATED
。虚拟机会重置为开机状态,并保留其内部 IP、MAC 地址、配置设置和元数据。但是,虚拟机会失去其内存中数据和虚拟机状态。如果您需要保留内存中数据和虚拟机状态,请改为暂停虚拟机。
在 Google Cloud 控制台中,转到虚拟机实例页面。
选择要停止的虚拟机。
点击
停止,然后点击停止进行确认。VM_NAME
:虚拟机的名称。PROJECT_ID
:虚拟机所在项目的 ID。ZONE
:该虚拟机所在的可用区。VM_NAME
:虚拟机的名称。PROJECT_ID
:虚拟机所在项目的 ID。ZONE
:该虚拟机所在的可用区。如需进行彻底关停,使虚拟机能够先关停脚本,然后系统再向虚拟机发送 ACPI 关停信号,请运行以下命令:
sudo shutdown -h now
否则,如需强制关停,请运行以下命令:
sudo poweroff
如需进行彻底关停,使虚拟机能够先关停脚本,然后系统再向虚拟机发送 ACPI 关停信号,请运行以下命令:
shutdown /s
否则,如需强制关停,请运行以下命令:
shutdown /f
重启没有加密磁盘的虚拟机(默认)。
在 Google Cloud 控制台中,转到虚拟机实例页面。
选择一个或多个虚拟机。
点击
启动/恢复。VM_NAME
:虚拟机的名称。PROJECT_ID
:虚拟机所在项目的 ID。ZONE
:该虚拟机所在的可用区。VM_NAME
:要重启的虚拟机的名称。PROJECT_ID
:虚拟机所在项目的 ID。ZONE
:该虚拟机所在的可用区。在 Google Cloud 控制台中,转到虚拟机实例页面。
选择要重启的虚拟机。
点击
启动/恢复。为挂接到此虚拟机的每个加密磁盘指定加密密钥,然后点击开始。
VM_NAME
:虚拟机的名称。ENCRYPTION_KEY_FILE
:包含客户提供的加密密钥的 JSON 文件的相对路径。PROJECT_ID
:虚拟机所在项目的 ID。ZONE
:该虚拟机所在的可用区。PROJECT_ID
:虚拟机所在项目的 ID。ZONE
:该虚拟机所在的可用区。VM_NAME
:虚拟机的名称。DISK_URL
:与挂接的磁盘(已使用客户提供的加密密钥进行了加密)的完整资源名称对应的资源网址。ENCRYPTION_TYPE
:您使用的磁盘加密类型,可以是以下类型之一:rawKey
、kmsKeyName
或rsaEncryptedKey
。如果您使用rsaEncryptedKey
类型,则必须向 Beta 版 API(而不是 v1 API)发出POST
请求。ENCRYPTION_KEY
:用于加密挂接到虚拟机的永久性磁盘的加密密钥。rawKey
或rsaEncryptedKey
密钥必须采用 base64 编码。此外,如需准备rsaEncryptedKey
密钥,请参阅 RSA 密钥封装。虚拟机会使用原始元数据、映像和永久性磁盘重新初始化为初始启动状态。
除非您备份数据,否则虚拟机会强制擦除机器内存中的内容。
在整个过程中,虚拟机将保持
RUNNING
状态。在 Google Cloud 控制台中,转到虚拟机实例页面。
选择要重置的虚拟机。
点击重置,然后再次点击重置。
VM_NAME
:虚拟机的名称。PROJECT_ID
:虚拟机所在项目的 ID。ZONE
:该虚拟机所在的可用区。VM_NAME
:虚拟机的名称。PROJECT_ID
:虚拟机所在项目的 ID。ZONE
:该虚拟机所在的可用区。虚拟机会使用原始元数据、映像和永久性磁盘重新初始化为初始启动状态。
除非您备份数据,否则虚拟机会擦除机器内存中的内容。
在整个过程中,虚拟机将保持
RUNNING
状态。将这些资源与已停止的虚拟机分离。
删除虚拟机。此操作也会删除关联到该虚拟机的所有资源。
了解如何安排虚拟机自动启动和停止。
了解如何限制虚拟机的运行时。
了解如何通过执行以下操作之一在虚拟机意外关停后对虚拟机进行问题排查:
使用交互式串行控制台排查虚拟机问题。
了解如何更改虚拟机中的机器类型。
Go
如需在本地开发环境中使用本页面上的 Go 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭据设置应用默认凭据。
如需了解详情,请参阅 Set up authentication for a local development environment。
Java
如需在本地开发环境中使用本页面上的 Java 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭据设置应用默认凭据。
如需了解详情,请参阅 Set up authentication for a local development environment。
Node.js
如需在本地开发环境中使用本页面上的 Node.js 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭据设置应用默认凭据。
如需了解详情,请参阅 Set up authentication for a local development environment。
PHP
如需在本地开发环境中使用本页面上的 PHP 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭据设置应用默认凭据。
如需了解详情,请参阅 Set up authentication for a local development environment。
Python
如需在本地开发环境中使用本页面上的 Python 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭据设置应用默认凭据。
如需了解详情,请参阅 Set up authentication for a local development environment。
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。
所需的角色
如需获得停止和重启虚拟机所需的权限,请让您的管理员为您授予项目的 Compute Instance Admin (v1) (
roles/compute.instanceAdmin.v1
) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。此预定义角色可提供停止和重启虚拟机所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
如需停止和重启虚拟机,您需要具备以下权限:
停止虚拟机
停止正在运行的虚拟机时,会发生以下情况:
此外,如果您将任何资源挂接到虚拟机,则在您手动分离资源或删除虚拟机之前,这些资源会保持挂接状态。如果虚拟机挂接了任何本地 SSD 磁盘,则默认情况下,停止虚拟机时会舍弃本地 SSD 磁盘上的所有数据。如需将数据保留在本地 SSD 磁盘上,您必须使用带有
--discard-local-ssd=false
标志的 gcloud CLI 停止虚拟机。如需了解详情,请参阅停止具有本地 SSD 的虚拟机。如需停止虚拟机,请选择本文档中介绍的方法之一:
停止虚拟机后,您可以重启虚拟机或删除虚拟机。如果您不打算重启虚拟机,建议您将其删除。
通过 Google Cloud 停止虚拟机
如需一次停止多个虚拟机,请使用 Google Cloud 控制台。
控制台
如需停止一个或多个虚拟机,请执行以下操作:
gcloud
如需停止虚拟机,请使用
gcloud compute instances stop
命令:gcloud compute instances stop VM_NAME \ --project=PROJECT_ID \ --zone=ZONE
替换以下内容:
如果您将本地 SSD 磁盘挂接到虚拟机,并希望在停止虚拟机后保留本地 SSD 数据,请使用带有
--discard-local-ssd=false
标志的gcloud beta compute instances stop
命令。gcloud beta compute instances stop VM_NAME \ --discard-local-ssd=false \ --project=PROJECT_ID \ --zone=ZONE
Go
Java
Node.js
PHP
Python
REST
如需停止虚拟机,请向
instances.stop
方法发出POST
请求。POST https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/stop
替换以下内容:
从客机操作系统内部停止虚拟机
如需在连接到虚拟机后从客机操作系统内部停止虚拟机,请选择以下标签页之一。
Linux
如需停止 Linux 虚拟机,请选择以下方法之一:
Windows
如需停止 Windows 虚拟机,请选择以下方法之一:
重启虚拟机
只有当虚拟机处于
TERMINATED
状态时,您才能重启已停止的虚拟机。如需重启虚拟机,请选择本文档中介绍的以下方法之一:重启没有加密磁盘的虚拟机
重启已停止且不使用任何加密磁盘的虚拟机(默认)。如需一次重启多个虚拟机,请使用 Google Cloud 控制台。
控制台
如需重启一个或多个虚拟机,请执行以下操作:
gcloud
如需重启虚拟机,请使用
gcloud compute instances start
命令:gcloud compute instances start VM_NAME \ --project=PROJECT_ID \ --zone=ZONE
替换以下内容:
Go
Java
Node.js
PHP
Python
REST
如需重启虚拟机,请向
instances.start
方法发出POST
请求。POST https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/start
替换以下内容:
重启使用加密磁盘的虚拟机
您可以重启已停止的虚拟机,该虚拟机使用客户提供的加密密钥来加密挂接到虚拟机的永久性磁盘。
控制台
如需重启使用加密磁盘的虚拟机,请执行以下操作:
gcloud
如需重启使用加密磁盘的虚拟机,请使用带有
--csek-key-file
标志的gcloud compute instances start
命令。如果您使用的是 RSA 封装密钥,请改用gcloud beta compute instances start
命令。gcloud compute instances start VM_NAME \ --csek-key-file=ENCRYPTION_KEY_FILE \ --project=PROJECT_ID \ --zone=ZONE
替换以下内容:
Go
Java
Node.js
PHP
Python
REST
如需重启使用加密磁盘的虚拟机,请向
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" } } ] }
替换以下内容:
重置虚拟机
对正在运行的虚拟机执行重置类似于对计算机执行硬重启,例如按下重置按钮或按住电源按钮。重置虚拟机时,您没有给虚拟机留出时间来彻底关闭客机操作系统。因此,这可能会损坏磁盘的文件系统。Google Cloud 建议仅在客机操作系统崩溃且您没有其他选项时重置虚拟机。如果要重新初始化虚拟机并执行彻底关停,请参阅本文档中的重新启动虚拟机。
重置虚拟机时,会发生以下情况:
虚拟机重置操作不会更改其任何虚拟机属性。虚拟机会保留其临时 IP 地址、静态外部 IP 地址、永久性磁盘、本地 SSD 磁盘(如果有)和机器类型。
控制台
如需重置一个或多个正在运行的虚拟机,请执行以下操作:
gcloud
如需重置正在运行的虚拟机,请使用
gcloud compute instances reset
命令。gcloud compute instances reset VM_NAME \ --project=PROJECT_ID \ --zone=ZONE
替换以下内容:
Go
Java
Node.js
PHP
Python
REST
如需重置正在运行的虚拟机,请向
instances.reset
方法发出POST
请求。POST https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/reset
替换以下内容:
重新启动虚拟机
从客机操作系统内部重新启动虚拟机时,会发生以下情况:
与重置虚拟机相比,如果从客机操作系统中重新启动虚拟机,系统会等待虚拟机完成所有正在运行的任务,然后再将 ACPI 关停信号发送到虚拟机。这样,虚拟机便能够执行彻底关闭。
重新启动虚拟机时,不会更改其任何虚拟机属性。虚拟机会保留其临时 IP 地址、静态外部 IP 地址、永久性磁盘、本地 SSD 磁盘(如果有)和机器类型。
Linux
如需重置 Linux 虚拟机,请运行以下命令来重新启动客机操作系统:
sudo reboot
Windows
如需重置 Windows 虚拟机,请运行以下命令来重新启动客机操作系统:
shutdown /r /t 0
(可选)如需监控关停和重启虚拟机的过程,请启用 Windows 启动管理器菜单。
结算
在虚拟机停止并且 Compute Engine 将其状态设置为
TERMINATED
后,您无需再支付 CPU 使用费。但是,挂接到虚拟机的所有资源(例如永久性磁盘和外部 IP 地址)将会继续产生费用。如需让挂接到虚拟机的资源停止产生费用,请执行以下操作之一:
后续步骤
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2024-12-03。
-