本文档介绍了如何查看 Google Cloud 组织中正在运行的 Compute Engine 实例的物理位置。
创建并启动计算实例后,您可以查看每个计算实例在相应可用区中运行的物理主机。利用集群中计算实例的物理位置执行以下操作:
最大限度地缩短网络延迟时间:调整应用或工作负载设计,以便在彼此最接近的计算实例上运行对延迟时间敏感的作业。
提高工作负载可靠性:将计算实例分布在不同的物理主机上,以限制主机错误对应用的影响。
如需验证您的项目中运行哪些计算实例,请查看计算实例列表。
限制
您可以查看满足以下一项或多项要求的计算实例的集群、块、子块和主机 ID:
计算实例使用以下机器类型之一:
A4X Max
A4X
A4
A3 Ultra
A3 Mega
具有 8 个 GPU 的 A3 High
A3 Edge
H4D
计算实例指定了紧凑布置政策。
计算实例属于一个代管式实例组 (MIG),该组指定了具有高吞吐量 (
HIGH_THROUGHPUT) 类型的工作负载政策。
如果计算实例不满足上述任何要求,您可以在公开其宿主 ID 后查看该 ID,如本文档中所述。
了解计算实例拓扑
每个计算实例都在物理服务器(即主机)上运行,该服务器位于服务器块中。每个块都属于某个可用区中的一个集群。查看满足特定要求的计算实例的详细信息时,您可以了解它们相对于满足相同要求的其他计算实例的拓扑。
Compute Engine 在每个计算实例的 physicalHostTopology 字段中公开了以下子字段。两个正在运行的计算实例共享的子字段越多,它们彼此间的距离就越近。
集群 (
cluster):计算实例所在的集群的全局名称。集群是多个主机的高级逻辑分组,可以跨越多个块,这些主机共同构成一个资源池。块 (
block):计算实例所在块的组织专用 ID。块是分组在一起的多个主机的集合。子块 (
subBlock):计算实例所在的子块的组织专用 ID。子区块是区块中的一个物理细分,用于将单个物理机箱中的主机分组。宿主 (
host):运行计算实例的宿主的组织或项目专用 ID。宿主 ID 更改如下:
准备工作
-
如果您尚未设置身份验证,请进行设置。身份验证用于验证您的身份,以便访问 Google Cloud 服务和 API。如需从本地开发环境运行代码或示例,您可以通过选择以下选项之一向 Compute Engine 进行身份验证:
选择标签页以了解您打算如何使用本页面上的示例:
控制台
当您使用 Google Cloud 控制台访问 Google Cloud 服务和 API 时,无需设置身份验证。
gcloud
-
安装 Google Cloud CLI,然后 使用联合身份登录 gcloud CLI。 登录后,运行以下命令来初始化 Google Cloud CLI:
gcloud init
-
- 设置默认区域和可用区。
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭证。
安装 Google Cloud CLI,然后 使用联合身份登录 gcloud CLI。
如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。
所需的角色
如需获得验证计算实例拓扑所需的权限,请让您的管理员为您授予项目的 Compute Admin (roles/compute.admin) IAM 角色。
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
此预定义角色包含验证计算实例拓扑所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
如需验证计算实例的拓扑,您需要具备以下权限:
- 如需查看计算实例的详细信息,请使用以下方法: compute.instances.get
- 如需查看计算实例列表,请使用以下方法: compute.instances.list
-
如需在创建计算实例时公开主机 ID,请执行以下操作:
- 针对项目的
compute.instances.create权限 - 使用自定义映像创建虚拟机:针对映像的
compute.images.useReadOnly权限 - 使用快照创建虚拟机:针对快照的
compute.snapshots.useReadOnly权限 - 使用实例模板创建虚拟机:针对实例模板的
compute.instanceTemplates.useReadOnly权限 - 为虚拟机分配旧版网络:针对项目的
compute.networks.use权限 - 为虚拟机指定静态 IP 地址:针对项目的
compute.addresses.use权限 - 使用旧版网络时为虚拟机分配外部 IP 地址:针对项目的
compute.networks.useExternalIp权限 - 为虚拟机指定子网:针对项目或所选子网的
compute.subnetworks.use权限 - 在使用 VPC 网络时为虚拟机分配外部 IP 地址:针对项目或所选子网的
compute.subnetworks.useExternalIp权限 - 为虚拟机设置虚拟机实例元数据:针对项目的
compute.instances.setMetadata权限 - 为虚拟机设置标记:针对虚拟机的
compute.instances.setTags权限 - 为虚拟机设置标签:针对虚拟机的
compute.instances.setLabels权限 - 为虚拟机设置要使用的服务账号:针对虚拟机的
compute.instances.setServiceAccount权限 - 为虚拟机创建新磁盘:针对项目的
compute.disks.create权限 - 以只读或读写模式挂接现有磁盘:针对磁盘的
compute.disks.use权限 - 以只读模式挂接现有磁盘:针对磁盘的
compute.disks.useReadOnly权限
- 针对项目的
- 如需在创建实例模板时公开主机 ID,请执行以下操作: compute.instanceTemplates.create
- 如需在现有计算实例中公开或隐藏主机 ID,请执行以下操作: compute.instances.update
公开或隐藏主机 ID
除非计算实例满足特定要求,否则其主机 ID 默认处于隐藏状态。您可以在创建或更新计算实例时公开主机 ID。查看计算实例的详细信息时,您可以看到特定于您 Google Cloud 组织的宿主机 ID。您无法查看计算实例的块、子块或集群的 ID。
如需在计算实例中公开或隐藏主机 ID,请使用以下方法之一:
如果您想防止组织中的一个或多个项目公开宿主 ID,可以创建自定义限制条件。例如,当您想要运行对安全性要求较高工作负载时,此限制非常有用。如需了解详情,请参阅自定义限制。
在现有计算实例中公开或隐藏主机 ID
您可以在现有计算实例中显示或隐藏主机 ID,而无需重启。如果您停用默认显示主机 ID 的计算实例的公开主机 ID 设置,则会发生以下情况之一:
如果计算实例指定了紧凑布置政策或工作负载政策,您会看到特定于项目的宿主机 ID 和相关的物理位置信息。
如果计算实例使用 H4D 机器类型或配备 8 个 GPU 的 A3 High 机器类型(或更高代),则 Compute Engine 会忽略该请求。
如需显示或隐藏现有计算实例的主机 ID,请选择以下选项之一:
gcloud
如需显示或隐藏现有计算实例的主机 ID,请将 gcloud compute instances update 命令与以下标志之一结合使用:
如需公开主机 ID,请添加
--expose-host-topology标志:gcloud compute instances update INSTANCE_NAME \ --expose-host-topology \ --zone=ZONE如需隐藏主机 ID,请添加
--no-expose-host-topology标志:gcloud compute instances update INSTANCE_NAME \ --no-expose-host-topology \ --zone=ZONE
替换以下内容:
INSTANCE_NAME:计算实例的名称。ZONE:计算实例所在的可用区。
REST
如需查看现有 Compute 实例的属性,请向
instances.get方法发出GET请求:GET https://compute./compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME替换以下内容:
PROJECT_ID:您在其中创建计算实例的项目的 ID。ZONE:计算实例所在的可用区。INSTANCE_NAME:计算实例的名称。
如需更新计算实例以公开或隐藏主机 ID,请向
instances.update方法发出PUT请求。在请求正文中,使用上一步中的GET请求输出。不过,在scheduling字段中,您必须添加exposeHostTopology字段才能显示或隐藏主机 ID。如果请求输出中不存在scheduling字段,则也添加该字段。PUT请求类似于以下内容:PUT https://compute./compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME?mostDisruptiveAllowedAction=REFRESH { "scheduling": { "exposeHostTopology": EXPOSE_HOST_ID }, ... }将
EXPOSE_HOST_ID替换为以下某个值:如需公开主机 ID,请执行以下操作:
true如需隐藏主持人 ID,请执行以下操作:
false
在新计算实例中公开主机 ID
如需在创建计算实例时公开主机 ID,请选择以下选项之一:
gcloud
如需在创建计算实例时公开主机 ID,请将 gcloud compute instances create 命令与 --expose-host-topology 标志搭配使用:
gcloud compute instances create INSTANCE_NAME \
--machine-type=MACHINE_TYPE \
--expose-host-topology \
--zone=ZONE
替换以下内容:
INSTANCE_NAME:计算实例的名称。MACHINE_TYPE:您希望计算实例使用的机器类型。ZONE:您要在其中创建计算实例的可用区。
REST
如需在创建计算实例时公开主机 ID,请向 instances.insert 方法发出 POST 请求。在请求正文中,添加设置为 true 的 scheduling.exposeHostTopology 字段。
POST https://compute./compute/v1/projects/PROJECT_ID/zones/ZONE/instances
{
"name": "INSTANCE_NAME",
"machineType": "zones/ZONE/machineTypes/MACHINE_TYPE",
"disks": [
{
"boot": true,
"initializeParams": {
"sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
}
}
],
"networkInterfaces": [
{
"network": "global/networks/default"
}
],
"scheduling": {
"exposeHostTopology": true
}
}
替换以下内容:
PROJECT_ID:要创建计算实例的项目 ID。ZONE:您要在其中创建计算实例的可用区。INSTANCE_NAME:计算实例的名称。MACHINE_TYPE:您希望计算实例使用的机器类型。IMAGE_PROJECT:映像所属的映像项目;例如debian-cloud。如需详细了解支持的映像项目,请参阅公共操作系统映像。IMAGE:指定以下其中一项:
批量公开新计算实例中的主机 ID
如需在批量创建计算实例时公开主机 ID,请选择以下选项之一:
gcloud
如需在批量创建计算实例时公开主机 ID,请运行带有 --expose-host-topology 标志的 gcloud compute instances create-bulk 命令。
例如,如需在单个可用区中批量创建计算实例并指定公开其宿主机 ID,请运行以下命令:
gcloud compute instances create-bulk \
--count=COUNT \
--machine-type=MACHINE_TYPE \
--name-pattern="NAME_PATTERN" \
--expose-host-topology \
--zone=ZONE
替换以下内容:
COUNT:要创建的计算实例数量。MACHINE_TYPE:您希望计算实例使用的机器类型。NAME_PATTERN:计算实例的名称格式。如需替换计算实例名称中的数字序列,请使用哈希值 (#) 字符序列。例如,使用instance-#作为名称模式会生成名称以instance-1、instance-2开头的计算实例,一直到由COUNT指定的计算实例数量。ZONE:您要在其中批量创建计算实例的可用区。
REST
如需在批量创建计算实例时公开主机 ID,请向 instances.bulkInsert 方法发出 POST 请求。在请求正文中,添加设置为 true 的 instanceProperties.scheduling.exposeHostTopology 字段。
例如,如需在单个可用区中批量创建计算实例并指定公开其宿主机 ID,请发出 POST 请求,如下所示:
POST https://compute./compute/v1/projects/PROJECT_ID/zones/ZONE/instances/bulkInsert
{
"count": "COUNT",
"namePattern": "NAME_PATTERN",
"instanceProperties": {
"machineType": "MACHINE_TYPE",
"disks": [
{
"boot": true,
"initializeParams": {
"sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
}
}
],
"networkInterfaces": [
{
"network": "global/networks/default"
}
],
"scheduling": {
"exposeHostTopology": true
}
}
}
替换以下内容:
PROJECT_ID:要创建计算实例的项目 ID。ZONE:您要在其中创建计算实例的可用区。COUNT:要创建的计算实例数量。NAME_PATTERN:计算实例的名称格式。如需替换计算实例名称中的数字序列,请使用哈希值 (#) 字符序列。例如,使用instance-#作为名称模式会生成名称以instance-1、instance-2开头的计算实例,一直到由COUNT指定的计算实例数量。MACHINE_TYPE:您希望计算实例使用的机器类型。IMAGE_PROJECT:映像所属的映像项目;例如debian-cloud。如需详细了解支持的映像项目,请参阅公共操作系统映像。IMAGE:指定以下其中一项:
在新实例模板中公开了宿主 ID
创建指定公开宿主机 ID 的实例模板后,您可以使用该实例模板执行以下操作:
执行以下操作时,在代管式实例组 (MIG) 的计算实例中公开宿主机 ID:
如需在创建实例模板时公开主机 ID,请选择以下选项之一:
gcloud
如需在创建实例模板时公开主机 ID,请使用带有 --expose-host-topology 标志的 gcloud compute instance-templates create 命令。
例如,使用以下命令可创建区域级实例模板。如果您要创建全球实例模板,请使用相同的命令,但不使用 --instance-template-region 标志。
gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
--expose-host-topology \
--instance-template-region=REGION \
--machine-type=MACHINE_TYPE
替换以下内容:
INSTANCE_TEMPLATE_NAME:实例模板的名称。REGION:要在其中创建实例模板的区域。MACHINE_TYPE:您希望计算实例使用的机器类型。
REST
如需在创建实例模板时公开主机 ID,请向以下方法之一发出 POST 请求。在请求正文中,添加设置为 true 的 properties.scheduling.exposeHostTopology 字段。
如需创建全球实例模板:
instanceTemplates.insert方法。如需创建区域级实例模板:
regionInstanceTemplates.insert方法。
例如,如需创建公开宿主机 ID 的区域级实例模板,请发出 POST 请求,如下所示:
POST https://compute./compute/v1/projects/PROJECT_ID/regions/REGION/instanceTemplates
{
"name": "INSTANCE_TEMPLATE_NAME",
"properties": {
"disks": [
{
"boot": true,
"initializeParams": {
"sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
}
}
],
"machineType": "MACHINE_TYPE",
"networkInterfaces": [
{
"network": "global/networks/default"
}
],
"scheduling": {
"exposeHostTopology": true
}
}
}
替换以下内容:
PROJECT_ID:要创建实例模板的项目 ID。REGION:要在其中创建实例模板的区域。INSTANCE_TEMPLATE_NAME:实例模板的名称。IMAGE_PROJECT:映像所属的映像项目;例如debian-cloud。如需详细了解支持的映像项目,请参阅公共操作系统映像。IMAGE:指定以下其中一项:MACHINE_TYPE:您希望计算实例使用的机器类型。
验证计算实例的物理位置
只有当正在运行的计算实例满足特定要求或您公开其主机 ID 时,您才能查看它们的物理位置。
如需验证组织中正在运行的计算实例的物理位置,请使用以下方法之一:
使用 Google Cloud 控制台、gcloud CLI 或 REST 验证物理位置
如需同时查看多个计算实例的物理位置,请使用 REST API。否则,请选择以下选项之一:
控制台
在 Google Cloud 控制台中,前往虚拟机实例页面。
在名称列中,点击要查看其详细信息的计算实例的名称。系统会显示一个包含实例详细信息的页面,并且详细信息标签页处于选中状态。
在基本信息部分,检查物理主机字段的值。
gcloud
如需查看正在运行的计算实例的物理位置,请使用带有 --flatten=resourceStatus.physicalHostTopology 标志的 gcloud compute instances describe 命令:
gcloud compute instances describe INSTANCE_NAME \
--flatten=resourceStatus.physicalHostTopology \
--zone=ZONE
替换以下内容:
INSTANCE_NAME:计算实例名称。ZONE:计算实例所在的可用区。
输出类似于以下内容之一:
如果您可以查看计算实例的集群、块、子块和主机 ID,则输出类似于以下内容:
--- block: 3e3056e23cf91a5cb4a8621b6a52c100 cluster: europe-west1-cluster-jfhb host: 1215168a4ecdfb434fd4d28056589059 subBlock: 0fc09525cbd5abd734342893ca1c083f如果您只能在公开主机后查看其 ID,则输出类似于以下内容:
--- block: null cluster: null host: 1215168a4ecdfb434fd4d28056589059 subBlock: null
REST
如需查看正在运行的计算实例的物理位置,请发出以下 GET 请求之一。发出请求时,您必须添加 fields 查询参数,并将输出限制为仅包含计算实例的 name、machineType 和 physicalHostTopology 字段。您还必须添加 filter 查询参数,并将结果限制为正在运行的计算实例。
如需查看所有可用区中的实例列表,请使用
instances.aggregatedList方法GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/aggregated/instances?fields=items.name,items.machineType,items.resourceStatus.physicalHostTopology&filter=status=RUNNING如需查看特定可用区中的实例列表,请使用
instances.list方法。GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances?fields=items.name,items.machineType,items.resourceStatus.physicalHostTopology&filter=status=RUNNING
替换以下内容:
PROJECT_ID:计算实例所在项目的 ID。ZONE:计算实例所在的可用区。
输出类似于以下内容之一:
如果您可以查看计算实例的集群、块、子块和主机 ID,则输出类似于以下内容。在以下示例中,计算实例
vm-01和vm-02位于同一区块中。{ "items": [ { "name": "vm-01", "machineType": "https://www.googleapis.com/compute/v1/projects/example-project/zones/europe-west1-b/machineTypes/a3-ultragpu-8g", "resourceStatus": { "physicalHostTopology": { "block": "3e3056e23cf91a5cb4a8621b6a52c100", "cluster": "europe-west1-cluster-jfhb", "host": "1215168a4ecdfb434fd4d28056589059", "subBlock": "0fc09525cbd5abd734342893ca1c083f" } } }, { "name": "vm-02", "machineType": "https://www.googleapis.com/compute/v1/projects/example-project/zones/europe-west1-b/machineTypes/a3-ultragpu-8g", "resourceStatus": { "physicalHostTopology": { "block": "3e3056e23cf91a5cb4a8621b6a52c100", "cluster": "europe-west1-cluster-jfhb", "host": "2326279b5ecdfc545fd5e39167698168", "subBlock": "1fc18636cbd4abd623553784ca2c174e" } } }, ... ] }如果您只能在公开主机后查看其 ID,则输出类似于以下内容:
{ "items": [ { "name": "vm-01", "machineType": "https://www.googleapis.com/compute/v1/projects/example-project/zones/europe-west1-b/machineTypes/a3-ultragpu-8g", "resourceStatus": { "physicalHostTopology": { "block": null, "cluster": null, "host": "1215168a4ecdfb434fd4d28056589059", "subBlock": null } } }, { "name": "vm-02", "machineType": "https://www.googleapis.com/compute/v1/projects/example-project/zones/europe-west1-b/machineTypes/a3-ultragpu-8g", "resourceStatus": { "physicalHostTopology": { "block": null, "cluster": null, "host": "2326279b5ecdfc545fd5e39167698168", "subBlock": null } } }, ... ] }
如果您想优化计算实例列表,请修改 filter 查询参数中的过滤表达式。
通过查询元数据键验证物理位置
如需通过查询 physical_host_topology 元数据键来查看正在运行的计算实例的物理位置,请选择以下选项之一:
Linux 实例
连接到您的 Linux 实例。
使用
curl查询physical_host_topology元数据键:user@myinst:~$ curl -s -H "Metadata-Flavor: Google" http://metadata.google.internal/computeMetadata/v1/instance/attributes/physical_host_topology输出类似于以下内容之一:
如果您可以查看计算实例的集群、块、子块和主机 ID,则输出类似于以下内容:
{ "block": "3e3056e23cf91a5cb4a8621b6a52c100", "cluster": "europe-west1-cluster-jfhb", "host": "2326279b5ecdfc545fd5e39167698168", "subBlock": "1fc18636cbd4abd623553784ca2c174e" }如果您只能在公开主机后查看其 ID,则输出类似于以下内容:
{ "block": null, "cluster": null, "host": "2326279b5ecdfc545fd5e39167698168", "subBlock": null }
Windows 实例
连接到您的 Windows 实例。
使用
Invoke-RestMethod命令查询physical_host_topology元数据键:PS C:\> $value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata.google.internal/computeMetadata/v1/instance/attributes/physical_host_topology") $value输出类似于以下内容之一:
如果您可以查看计算实例的集群、块、子块和主机 ID,则输出类似于以下内容:
{ "block": "3e3056e23cf91a5cb4a8621b6a52c100", "cluster": "europe-west1-cluster-jfhb", "host": "2326279b5ecdfc545fd5e39167698168", "subBlock": "1fc18636cbd4abd623553784ca2c174e" }如果您只能在公开主机后查看其 ID,则输出类似于以下内容:
{ "block": null, "cluster": null, "host": "2326279b5ecdfc545fd5e39167698168", "subBlock": null }
后续步骤
详细了解计算实例中的主机事件。
了解如何监控计算实例。