查看 Compute Engine 实例拓扑

本文档介绍了如何查看正在运行的 Compute Engine 实例的拓扑。创建并启动计算实例后,您可以查看它们在可用区中的物理位置,以了解集群的拓扑。这些信息可帮助您执行以下操作:

  • 整理作业:您可以调整工作负载设计,例如将通信密集型任务放置在物理距离最近的计算实例上。

  • 排查问题:如果特定计算实例意外地相距很远,您可以调查网络延迟或性能问题。

如需验证项目中正在运行哪些计算实例,请查看计算实例列表

限制

您只能查看满足以下一项或多项要求的计算实例的拓扑:

了解计算实例拓扑

每个计算实例都在物理服务器(即主机)上运行,该服务器位于服务器块上。每个块都属于一个集群,该集群位于Google Cloud 可用区内的数据中心中。查看满足特定要求的计算实例时,您可以了解它们相对于满足相同要求的其他计算实例的拓扑。具体而言,您可以通过检查每个计算实例的 physicalHostTopology 字段中的以下子字段来了解计算实例的物理位置:

  • 集群 (cluster):计算实例所在的集群的全局名称。集群是多个主机的高级逻辑分组,可以跨越多个块,这些主机共同构成一个资源池。

  • 块 (block):计算实例所在的块的组织专用 ID。是分组在一起的多个主机的集合。同一块中的计算实例所经历的网络延迟时间较短。

  • 子块 (subBlock):您的计算实例所在的子块的组织专用 ID。子区块是区块中的物理细分,用于将单个物理机箱中的主机分组。与同一块中的计算实例相比,同一子块中的计算实例所经历的网络延迟时间更短。

  • 主机 (host):计算实例所在主机的组织专用 ID。主机是运行计算实例的单个物理服务器。每个主机都有自己的物理 vCPU、内存、存储空间和网络接口卡 (NIC)。相邻主机中的计算实例所经历的网络延迟时间最短。

两个正在运行的计算实例共享的子字段越多,它们彼此间的物理位置就越靠近。此信息有助于您优化工作负载,方法是整理作业以最大限度地缩短网络延迟时间,或设计更具弹性的系统。

准备工作

  • 如果您尚未设置身份验证,请进行设置。身份验证用于验证您的身份,以便访问 Google Cloud 服务和 API。如需从本地开发环境运行代码或示例,您可以通过选择以下选项之一向 Compute Engine 进行身份验证:

    选择标签页以了解您打算如何使用本页面上的示例:

    控制台

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

    gcloud

    1. 安装 Google Cloud CLI。 安装完成后,运行以下命令来初始化 Google Cloud CLI:

      gcloud init

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

  • 设置默认区域和可用区
  • REST

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

      安装 Google Cloud CLI。

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

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

所需的角色

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

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

所需权限

您需要具备以下权限才能验证计算实例的拓扑:

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

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

验证计算实例拓扑

如需验证正在运行的计算实例的拓扑,请使用以下方法之一:

使用 Google Cloud 控制台、gcloud CLI 或 REST 验证计算实例拓扑

如需同时查看多个计算实例的拓扑,请使用 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:计算实例所在的可用区。

输出类似于以下内容:

---
block: 3e3056e23cf91a5cb4a8621b6a52c100
cluster: europe-west1-cluster-jfhb
host: 1215168a4ecdfb434fd4d28056589059
subBlock: 0fc09525cbd5abd734342893ca1c083f

REST

如需查看正在运行的计算实例的拓扑,请发出以下 GET 请求之一。发出请求时,您必须添加 fields 查询参数,并指定仅显示计算实例的 namemachineTypephysicalHostTopology 字段。您还必须添加 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:计算实例所在的可用区。

输出类似于以下内容:在以下示例中,计算实例 vm-01vm-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"
        }
      }
    },
    ...
  ]
}

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

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

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

Linux 实例

  1. 连接到您的 Linux 实例。

  2. 使用 curl 查询 physical_host_topology 元数据键:

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

    输出类似于以下内容:

    {
      "block": "3e3056e23cf91a5cb4a8621b6a52c100",
      "cluster": "europe-west1-cluster-jfhb",
      "host": "2326279b5ecdfc545fd5e39167698168",
      "subBlock": "1fc18636cbd4abd623553784ca2c174e"
    }
    

Windows 实例

  1. 连接到您的 Windows 实例。

  2. 使用 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
    

    输出类似于以下内容:

    {
      "block": "3e3056e23cf91a5cb4a8621b6a52c100",
      "cluster": "europe-west1-cluster-jfhb",
      "host": "2326279b5ecdfc545fd5e39167698168",
      "subBlock": "1fc18636cbd4abd623553784ca2c174e"
    }
    

后续步骤