本文档介绍了如何为虚拟机 (VM) 或裸机实例设置主机维护政策,以控制实例在发生主机事件时的行为。
准备工作
-
如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以选择以下任一选项向 Compute Engine 进行身份验证:
Select the tab for how you plan to use the samples on this page:
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。
-
限制
- 您无法更改抢占式虚拟机的维护行为。发生维护事件时,抢占式虚拟机停止且不会迁移。您必须手动重启抢占的虚拟机。
- 使用 E2 机器类型创建虚拟机后,您无法将虚拟机的维护行为从
MIGRATE
更改为TERMINATE
,反之亦然。 - 您无法更改裸机实例(例如
c3-standard-192-metal
或x4-megamem-1920-metal
)的维护行为,这些实例会设置为TERMINATE
并自动重启。
可用的主机维护属性
您可以配置计算实例的维护行为、重启行为和主机错误等待行为。除非您另行指定,否则 Compute Engine 会使用默认值配置每个实例。
在主机事件期间,根据配置的主机维护政策,不支持实时迁移的实例会被终止并自动重启。
onHostMaintenance
:确定可能造成实例重启的维护事件发生时的行为。MIGRATE
:在发生维护事件时,Compute Engine 会实时迁移实例。这是大多数虚拟机的默认值。TERMINATE
:停止实例,而不是使用实时迁移。这是 Z3、裸机实例以及具有 GPU 和 TPU 等加速器的实例的默认选项。对于这些实例类型,您无法更改onHostMaintenance
的设置。
automaticRestart
:确定实例发生崩溃或被系统停止时的行为。true
(默认值):如果实例崩溃或停止,则 Compute Engine 会重启实例。false
:如果实例崩溃或停止,Compute Engine 不会重启实例。
localSsdRecoveryTimeout
:设置本地 SSD 恢复超时。这是 Compute Engine 在主机错误后等待恢复本地 SSD 数据的最长时间(以小时为单位)。此设置仅适用于挂接了本地 SSD 磁盘的虚拟机。如果您为未附加本地 SSD 磁盘的实例配置此设置,系统会忽略此设置。- 未设置(默认值):Compute Engine 最长会等待 1 小时来恢复本地 SSD 数据。对于 Z3 虚拟机,默认等待时间为 6 小时。
- 介于 0 到 168 之间的整数:指定 Compute Engine 等待恢复本地 SSD 数据的时长(以小时为单位)。最大值等于 7 天。值为 0 表示 Compute Engine 不会等待恢复本地 SSD 数据,而是立即重启实例。
hostErrorTimeoutSeconds
(预览版):设置 Compute Engine 在检测到计算实例无响应后等待重启或终止计算实例的最长时间(以秒为单位)。- 未设置(默认值):Compute Engine 最长会等待 5.5 分钟(330 秒),然后再重启无响应的实例。
- 介于 90 到 330 之间的整数:指定 Compute Engine 在重启无响应的计算实例之前等待的秒数(以 30 为增量)。
设置实例的主机维护政策
当您首次创建实例时或创建实例后,可以更改实例的主机维护政策。
在实例创建期间设置主机维护政策
本部分中的信息重点介绍了如何在创建实例时设置主机维护政策。如需查看更多实例创建示例,请参阅创建和启动 Compute Engine 实例。
您可以使用 Google Cloud 控制台、gcloud CLI 或 REST 在创建计算实例时设置主机维护政策。
在 Google Cloud 控制台中,前往创建实例页面。
为该实例指定名称。
为实例选择区域和可用区。
在机器配置部分中,执行以下操作:
- 指定实例的机器类型的详细信息。
- 展开虚拟机预配模型高级设置菜单。
- 在主机维护时菜单中,选择以下步骤之一:
- 如需在维护事件期间迁移虚拟机,请选择迁移虚拟机实例。
- 如需在维护事件期间停止实例,请选择终止虚拟机实例。
如需创建实例,请点击创建。
如需设置新实例的主机维护政策,请使用 gcloud compute instances create
命令。
如需设置 --host-error-timeout-seconds
属性(预览),您必须使用 gcloud beta compute instances create
命令。
您可以使用以下命令设置新实例的主机维护政策。如果您省略任何标志,系统会使用该标志的默认值。
gcloud compute instances create INSTANCE_NAME \
--zone=ZONE \
--maintenance-policy=MAINTENANCE_BEHAVIOR \
--RESTART_ON_FAILURE_BEHAVIOR \
--local-ssd-recovery-timeout=SSD_RECOVERY_TIMEOUT \
--host-error-timeout-seconds=ERROR_DETECTION_TIMEOUT
替换以下内容:
INSTANCE_NAME
:实例名称。- ZONE:实例所在的可用区,
MAINTENANCE_BEHAVIOR
:实例的维护事件行为,即TERMINATE
或MIGRATE
。对于大多数机器类型,如果您省略此属性,系统会默认迁移虚拟机。Z3 和裸金属实例会终止。RESTART_ON_FAILURE_BEHAVIOR
:终止或无响应的实例的重启行为,设置为restart-on-failure
(默认)或no-restart-on-failure
。SSD_RECOVERY_TIMEOUT
:恢复挂接到已终止或无响应实例的本地 SSD 磁盘所花费的小时数。有效值介于 0 到 168 之间,以 1 小时为增量。ERROR_DETECTION_TIMEOUT
:Compute Engine 在重启无响应实例之前等待的秒数,介于 90 到 330 秒(5.5 分钟)之间,以 30 秒为增量。
如需使用 REST 设置新实例的主机维护政策,请使用 instances.insert
方法。
您可以使用以下命令设置新实例的主机维护政策。如果您省略了任何字段,系统会使用该字段的默认值。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID /zones/ZONE /instances
{
"name": "INSTANCE_NAME ",
"scheduling": {
"onHostMaintenance": "MAINTENANCE_BEHAVIOR ",
"automaticRestart": "RESTART_POLICY ,
"localSsdRecoveryTimeout": SSD_RECOVERY_TIMEOUT
}
}
替换以下内容:
PROJECT_ID
:实例的项目。ZONE
:您要在其中创建实例的可用区。INSTANCE_NAME
:实例名称。MAINTENANCE_BEHAVIOR
:实例的维护事件行为,即TERMINATE
或MIGRATE
。对于大多数机器类型,如果您省略此字段,系统会默认迁移虚拟机。Z3 和裸金属实例会终止。RESTART_POLICY
:实例是否在发生维护事件或主机发生错误后自动重启,值为true
(默认)或false
。SSD_RECOVERY_TIMEOUT
:Compute Engine 用于恢复挂接到无响应或已终止实例的任何本地 SSD 磁盘的小时数。有效值介于 0 到 168 之间,以 1 小时为增量。Z3 的默认值为 6 小时,所有其他虚拟机的默认值为 1 小时。
设置主机错误检测超时
如需设置 Compute Engine 等待重启或终止无响应实例的最长时间,请使用 Beta 版 instances.insert
方法,因为此选项在预览版中可用。
将 hostErrorTimeoutSeconds
属性添加到请求正文的 scheduling
对象,其中 HOST_ERROR_TIMEOUT
是 Compute Engine 在重启或终止无响应实例之前等待的秒数。有效值介于 90 到 330(5.5 分钟)之间,以 30 秒为增量。
POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID /zones/ZONE /instances
{
"name": "INSTANCE_NAME ",
"scheduling": {
"onHostMaintenance": "MAINTENANCE_BEHAVIOR ",
"automaticRestart": "RESTART_POLICY ,
"localSsdRecoveryTimeout": SSD_RECOVERY_TIMEOUT
"hostErrorTimeoutSeconds": HOST_ERROR_TIMEOUT ,
}
}
更新现有实例的主机维护政策
在 Google Cloud 控制台中,前往虚拟机实例页面。
点击您要更改设置的实例的名称。此时将显示实例详细信息页面。
选择详细信息标签页,然后完成以下步骤:
- 点击页面顶部的修改按钮。
- 找到管理部分。 在可用性政策部分中,您可以更改主机维护选项。
- 点击保存。
使用 gcloud compute instances set-scheduling
命令更新现有实例的主机维护政策。使用与上一部分中实例创建命令相同的参数。
如需更新 Compute Engine 等待重启或终止无响应实例的最长时间(预览版),请使用 gcloud beta compute instances set-scheduling
命令并添加 --host-error-timeout-seconds=NUMBER_OF_SECONDS
。
gcloud compute instances set-scheduling INSTANCE_NAME \
--maintenance-policy=MAINTENANCE_BEHAVIOR \
--RESTART_ON_FAILURE_BEHAVIOR \
--local-ssd-recovery-timeout=SSD_RECOVERY_TIMEOUT
替换以下内容:
NUMBER_OF_SECONDS
:Compute Engine 在重启或终止无响应虚拟机之前等待的秒数,从 90 到 330(5.5 分钟),以 30 秒为增量。INSTANCE_NAME
:实例名称。MAINTENANCE_BEHAVIOR
:实例的维护事件行为,即TERMINATE
或MIGRATE
。对于大多数机器类型,如果您省略此属性,系统会默认迁移虚拟机。Z3 和裸金属实例会终止。RESTART_ON_FAILURE_BEHAVIOR
:终止或无响应的实例的重启行为,设置为restart-on-failure
(默认)或no-restart-on-failure
。SSD_RECOVERY_TIMEOUT
:恢复挂接到已终止或无响应实例的本地 SSD 磁盘所花费的小时数。有效值介于 0 到 168 之间,以 1 小时为增量。NUMBER_OF_SECONDS
:Compute Engine 在重启无响应实例之前等待的秒数,介于 90 到 330 秒(5.5 分钟)之间,以 30 秒为增量。
向 instances.setScheduling
方法发出的 POST
请求,以更新现有实例的主机维护政策。
POST https://compute.googleapis.com/compute/v1projects/PROJECT_ID /zones/ZONE /instances/INSTANCE_NAME /setScheduling
{
"onHostMaintenance": "MAINTENANCE_BEHAVIOR ",
"automaticRestart": RESTART_POLICY ,
"localSsdRecoveryTimeout": SSD_RECOVERY_TIMEOUT
}
替换以下内容:
PROJECT_ID
:实例的项目。ZONE
:实例所在的区域。INSTANCE_NAME
:实例名称。MAINTENANCE_BEHAVIOR
:此实例的维护事件行为,即TERMINATE
或MIGRATE
。RESTART_POLICY
:实例是否自动重启,值为true
或false
。SSD_RECOVERY_TIMEOUT
:恢复挂接到实例的本地 SSD 磁盘所花费的小时数。有效值介于 0 到 168 之间,以 1 小时为增量。
更新主机错误检测超时
如需更新 Compute Engine 等待重启或终止无响应虚拟机的最长时间,您必须使用 Beta 版 instances.setScheduling
方法,因为此功能处于预览版阶段。
将 hostErrorTimeoutSeconds
属性添加到请求正文中,其中 HOST_ERROR_TIMEOUT
是 Compute Engine 在重启或终止无响应实例之前等待的秒数。有效值介于 90 到 330(5.5 分钟)之间,以 30 秒为增量。
POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID /zones/ZONE /instances/INSTANCE_NAME /setScheduling
{
...
"hostErrorTimeoutSeconds": NUMBER_OF_SECONDS
}
查看实例的主机维护政策设置
转到虚拟机实例页面。
点击要查看其设置的实例的名称。实例详情页面会打开。
前往管理部分。可用性政策子部分会显示以下各项的当前设置:
- 主机维护时
- 自动重启
- 主机错误超时
使用 gcloud compute instances describe
命令查看实例的主机维护选项设置。
如需查看 hostErrorTimeoutSeconds
设置的当前值(预览版),请使用 gcloud beta compute instances describe
命令。
gcloud compute instances describe INSTANCE_NAME \
--zone ZONE --format="yaml(scheduling)"
替换以下内容:
INSTANCE_NAME
:实例的名称ZONE
:实例所在的区域
输出包括主机维护政策的当前设置,例如:
scheduling:
automaticRestart: true
hostErrorTimeoutSeconds: 120
localSsdRecoveryTimeout:
nanos: 0
seconds: '10800'
onHostMaintenance: MIGRATE
preemptible: false
provisioningModel: STANDARD
如需查看实例的主机维护设置,请使用 instances.get
方法:
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID /zones/ZONE /instances/INSTANCE_NAME
替换以下内容:
PROJECT_ID
:实例所在的项目。ZONE
:实例所在的区域。INSTANCE_NAME
:实例名称。
在输出中,scheduling
对象包含实例的主机维护政策的设置,例如:
{
...
"scheduling": {
"onHostMaintenance": "MIGRATE",
"automaticRestart": true,
"preemptible": false,
"provisioningModel": "STANDARD",
"localSsdRecoveryTimeout": {
"seconds": "10800",
"nanos": 0
}
},
...
}
查看主机错误超时设置
使用 Beta 版 instances.get
方法构建 GET
请求,以查看当前 hostErrorTimeoutSeconds
设置。
GET https://compute.googleapis.com/compute/beta/projects/PROJECT_ID /zones/ZONE /instances/INSTANCE_NAME
替换以下内容:
PROJECT_ID
:实例的项目。ZONE
:实例所在的区域。INSTANCE_NAME
:实例名称。
在输出中,scheduling
对象包含实例的主机错误检测超时,例如:
{
...
"scheduling": {
"onHostMaintenance": "MIGRATE",
"automaticRestart": true,
"preemptible": false,
"provisioningModel": "STANDARD",
"hostErrorTimeoutSeconds": 120,
"localSsdRecoveryTimeout": {
"seconds": "10800",
"nanos": 0
}
},
...
}