查看计算实例的拓扑

本文档介绍了如何查看可用区中 Compute Engine 实例的物理位置(也称为拓扑)。如需在 Cluster Director 中查看集群的拓扑,请参阅查看集群拓扑。

创建 A4X Max、A4X、A4、A3 Ultra、A3 Mega 和 A3 High(8 个 GPU)实例或指定了紧凑布置政策或工作负载政策的计算实例后,您可以查看计算实例彼此之间的物理位置。了解计算实例的邻近程度后,您可以调整应用或工作负载设计,以便在彼此最靠近的计算实例上运行对延迟时间敏感的作业。对于所有其他类型的计算实例,您可以在公开主机 ID 后查看它们所运行的主机的 ID。

准备工作

  • 查看计算实例拓扑的术语。
  • 选择标签页以了解您打算如何使用本页面上的示例:

    控制台

    当您使用 Google Cloud 控制台访问 Google Cloud 服务和 API 时,无需设置身份验证。

    gcloud

    在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

    REST

    如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭证。

      安装 Google Cloud CLI。

      如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。

    如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。

所需的角色

如需获得查看计算实例拓扑所需的权限,请让您的管理员为您授予项目的 Compute Instance Admin (v1) (roles/compute.instanceAdmin.v1) IAM 角色。 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。

此预定义角色包含查看计算实例拓扑所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

如需查看计算实例拓扑,您需要具备以下权限:

  • 查看计算实例的详细信息:针对项目的 compute.instances.get 权限
  • 查看计算实例列表:针对项目的 compute.instances.list 权限

您也可以使用自定义角色或其他预定义角色来获取这些权限。

了解计算实例拓扑

如需了解集群中计算实例的物理位置,请在 Google Cloud 控制台中查看物理主机字段。如果您使用 gcloud CLI、Compute Engine API 或元数据键查询,请检查 physicalHostTopology 字段。这些字段包含以下子字段:

  • cluster:集群的全局名称。

  • block:实例所在预留块的组织专用 ID。

  • sub-block:实例所在子块的组织专用 ID。

  • host:实例运行所在主机的组织专用 ID。

如需了解实例邻近度,请比较计算实例之间的物理主机或 physicalHostTopology 字段的值。计算实例共享的子字段越多,它们彼此间的距离就越近。

您还可以查看创建计算实例的预留的拓扑。预留和实例的 physicalHostTopology 字段显示相同的 block 和 cluster 字段。例如,当您查看特定预留块时,可以查看部署在该块中的所有计算实例的名称和子块。如需详细了解预留的拓扑,请参阅查看预留的拓扑。

查看计算实例拓扑

如需一次性查看多个正在运行的计算实例的物理位置,请使用 REST API。否则,请选择以下任一选项:

控制台

  1. 在 Google Cloud 控制台中,前往虚拟机实例页面。

    转到虚拟机实例

  2. 在名称列中,点击要查看其详细信息的计算实例的名称。系统会显示一个包含计算实例详细信息的页面,并且详细信息标签页处于选中状态。

  3. 在基本信息部分,检查物理主机字段的值。

gcloud

如需查看正在运行的计算实例的物理位置,请使用带有 --flatten=resourceStatus.physicalHostTopology 标志的 gcloud compute instances describe 命令:

gcloud compute instances describe INSTANCE_NAME \
    --flatten=resourceStatus.physicalHostTopology \
    --zone=ZONE

替换以下内容:

  • INSTANCE_NAME:计算实例的名称。

  • ZONE:计算实例所在的可用区。

输出类似于以下内容:

  • 如果您可以查看计算实例的集群、块、子块和主机 ID,则输出类似于以下内容:

    ---
    cluster: europe-west1-cluster-jfhb
    block: 3e3056e23cf91a5cb4a8621b6a52c100
    subBlock: 0fc09525cbd5abd734342893ca1c083f
    host: 1215168a4ecdfb434fd4d28056589059
    
  • 如果您只能在公开主机后查看其 ID,则输出类似于以下内容:

    ---
    cluster: null
    block: null
    subBlock: null
    host: 1215168a4ecdfb434fd4d28056589059
    

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,则输出类似于以下内容:

    {
      "items": [
        {
          "name": "vm-01",
          "machineType": "https://www.googleapis.com/compute/v1/projects/example-project/zones/europe-west1-b/machineTypes/a3-ultragpu-8g",
          "resourceStatus": {
            "physicalHostTopology": {
              "cluster": "europe-west1-cluster-jfhb",
              "block": "3e3056e23cf91a5cb4a8621b6a52c100",
              "subBlock": "0fc09525cbd5abd734342893ca1c083f",
              "host": "1215168a4ecdfb434fd4d28056589059"
            }
          }
        },
        {
          "name": "vm-02",
          "machineType": "https://www.googleapis.com/compute/v1/projects/example-project/zones/europe-west1-b/machineTypes/a3-ultragpu-8g",
          "resourceStatus": {
            "physicalHostTopology": {
              "cluster": "europe-west1-cluster-jfhb",
              "block": "3e3056e23cf91a5cb4a8621b6a52c100",
              "subBlock": "1fc18636cbd4abd623553784ca2c174e",
              "host": "2326279b5ecdfc545fd5e39167698168"
            }
          }
        },
        ...
      ]
    }
    
  • 如果您只能在公开主机计算实例后查看其 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": {
              "cluster": null,
              "block": null,
              "subBlock": null,
              "host": "1215168a4ecdfb434fd4d28056589059"
            }
          }
        },
        {
          "name": "vm-02",
          "machineType": "https://www.googleapis.com/compute/v1/projects/example-project/zones/europe-west1-b/machineTypes/a3-ultragpu-8g",
          "resourceStatus": {
            "physicalHostTopology": {
              "cluster": null,
              "block": null,
              "subBlock": null,
              "host": "2326279b5ecdfc545fd5e39167698168"
            }
          }
        },
        ...
      ]
    }
    

如果您想优化计算实例列表,请修改 filter 查询参数中的过滤表达式。

通过元数据键查询查看计算实例拓扑

如需通过查询 physical_host_topology 元数据键来查看正在运行的计算实例的物理位置,请选择以下选项之一:

Linux 实例

  1. 连接到您的 Linux 计算实例。

  2. 在 Linux 实例中,使用 curl 工具创建查询。如需查询 Linux 实例上的 physical_host_topology 元数据键,请运行以下命令:

    user@myinst:~$ curl -s -H "Metadata-Flavor: Google" http://metadata.google.internal/computeMetadata/v1/instance/attributes/physical_host_topology
    

    输出类似于以下内容:

    • 如果您可以查看计算实例的集群、块、子块和主机 ID,则输出类似于以下内容:

      {
        "cluster": "europe-west1-cluster-jfhb",
        "block": "3e3056e23cf91a5cb4a8621b6a52c100",
        "subBlock": "0fc09525cbd5abd734342893ca1c083f",
        "host": "1215168a4ecdfb434fd4d28056589059"
      }
      
    • 如果您只能在公开主机后查看其 ID,则输出类似于以下内容:

      {
        "cluster": null,
        "block": null,
        "subBlock": null,
        "host": "1215168a4ecdfb434fd4d28056589059"
      }
      

Windows 实例

  1. 连接到您的 Windows 计算实例。

  2. 在 Windows 实例中,使用 Invoke-RestMethod 命令创建查询。 如需查询 Windows 实例上的 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,则输出类似于以下内容:

      {
        "cluster": "europe-west1-cluster-jfhb",
        "block": "3e3056e23cf91a5cb4a8621b6a52c100",
        "subBlock": "0fc09525cbd5abd734342893ca1c083f",
        "host": "1215168a4ecdfb434fd4d28056589059"
      }
      
    • 如果您只能在公开主机后查看其 ID,则输出类似于以下内容:

      {
        "cluster": null,
        "block": null,
        "subBlock": null,
        "host": "1215168a4ecdfb434fd4d28056589059"
      }
      

后续步骤