本文說明如何查看 Google Cloud 組織中執行中 Compute Engine 執行個體的實際位置。
建立並啟動運算執行個體後,您可以查看各個運算執行個體在可用區中執行的實體主機。使用叢集中運算執行個體的實體位置,執行下列操作:
盡量減少網路延遲時間:調整應用程式或工作負載設計,在彼此最接近的運算執行個體上執行延遲時間敏感的工作。
提升工作負載可靠性:將運算執行個體分散到不同的實體主機,限制主機錯誤對應用程式的影響。
如要確認專案中執行的運算執行個體,請查看運算執行個體清單。
限制
如果運算執行個體符合下列一或多項條件,您就能查看其叢集、區塊、子區塊和主機的 ID:
運算執行個體使用下列其中一種機型:
A4X Max
A4X
A4
A3 Ultra
A3 Mega
配備 8 個 GPU 的 A3 High
A3 Edge
H4D
運算執行個體指定密集配置政策。
運算執行個體屬於代管執行個體群組 (MIG),該群組指定高處理量 (
HIGH_THROUGHPUT) 類型的工作負載政策。
如果運算執行個體不符合上述任何規定,您可以在公開後查看其主機 ID,如本文所述。
瞭解運算執行個體拓撲
每個運算執行個體都會在實體伺服器 (即「主機」) 上執行,而主機位於伺服器區塊中。每個區塊都屬於可用區中的叢集。查看符合特定需求的運算執行個體詳細資料時,您可以瞭解其與其他符合相同需求的運算執行個體之間的拓撲關係。
Compute Engine 會在每個運算執行個體的 physicalHostTopology 欄位中,公開下列子欄位。兩個運作中的運算執行個體共用的子欄位越多,彼此之間的距離就越近。
叢集 (
cluster):運算執行個體所在叢集的全域名稱。「叢集」是多個主機的高階邏輯群組,可跨越多個區塊,並以單一資源集區的形式共同運作。Block (
block):運算執行個體所在區塊的組織專屬 ID。區塊是指多部主機組成的群組。子區塊 (
subBlock):運算執行個體所在子區塊的組織專屬 ID。子模塊是模塊中的實體細分,將主機分組在單一實體機箱中。主機 (
host):執行運算執行個體的主機組織或專案專屬 ID。主機 ID 變更如下:如果運算執行個體指定密集配置政策或工作負載政策,主機 ID 會專屬於您的專案。
如果運算執行個體指定支援的機器系列,或您公開主機 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 管理員 (
roles/compute.admin) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。這個預先定義的角色具備驗證運算執行個體拓撲所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:
所需權限
必須具備下列權限,才能驗證運算執行個體的拓撲:
- 如要查看運算執行個體的詳細資料: compute.instances.get
- 如要查看運算執行個體清單: compute.instances.list
-
如要在建立運算執行個體時公開主機 ID,請按照下列步驟操作:
- 專案的
compute.instances.create權限 - 如要使用自訂映像檔建立 VM,請在映像檔上
compute.images.useReadOnly - 如要使用快照建立 VM,請在快照上
compute.snapshots.useReadOnly - 如要使用執行個體範本建立 VM,請在執行個體範本上按一下「
compute.instanceTemplates.useReadOnly」 - 如要將舊版網路指派給 VM,請在專案中執行
compute.networks.use - 如要為 VM 指定靜態 IP 位址,請在專案中執行
compute.addresses.use - 如要在使用舊版網路時,為 VM 指派外部 IP 位址,請在專案中執行
compute.networks.useExternalIp - 如要為 VM 指定子網路,請在專案或所選子網路上執行
compute.subnetworks.use - 如要在使用虛擬私有雲網路時,將外部 IP 位址指派給 VM,請在專案或所選子網路上,指派
compute.subnetworks.useExternalIp給使用者 - 如要為專案中的 VM
compute.instances.setMetadata設定 VM 執行個體中繼資料,請按照下列步驟操作: - 如要為 VM 設定標記:在 VM 上執行
compute.instances.setTags - 如要設定 VM 的標籤,請在 VM 上執行
compute.instances.setLabels - 如要設定 VM 使用的服務帳戶,請在 VM 上執行
compute.instances.setServiceAccount - 如要為 VM 建立新磁碟,請在專案中執行
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
如要查看現有運算執行個體的屬性,請向
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。如要進一步瞭解支援的映像檔專案,請參閱「公開 OS 映像檔」。IMAGE:指定下列其中一項:
大量公開新運算執行個體的主機 ID
如要在大量建立運算執行個體時公開主機 ID,請選取下列其中一個選項:
gcloud
如要在大量建立運算執行個體時公開主機 ID,請執行
gcloud compute instances bulk create指令並加上--expose-host-topology旗標。舉例來說,如要在單一可用區中大量建立運算執行個體,並指定公開主機 ID,請執行下列指令:
gcloud compute instances bulk create \ --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。如要進一步瞭解支援的映像檔專案,請參閱「公開 OS 映像檔」。IMAGE:指定下列其中一項:
在新執行個體範本中公開主機 ID
建立執行個體範本並指定公開主機 ID 後,您可以使用該範本執行下列操作:
在下列情況下,公開代管執行個體群組 (MIG) 運算執行個體中的主機 ID:
如要在建立執行個體範本時公開主機 ID,請選取下列其中一個選項:
gcloud
如要在建立執行個體範本時公開主機 ID,請使用
gcloud compute instance-templates create指令和--expose-host-topology旗標。例如,使用下列指令建立區域執行個體範本。如要建立全域執行個體範本,請使用相同指令,但不加上
--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。如要進一步瞭解支援的映像檔專案,請參閱「公開 OS 映像檔」。IMAGE:指定下列其中一項:MACHINE_TYPE:運算執行個體要使用的機型。
驗證運算執行個體實際位置
執行中的運算執行個體必須符合特定條件,或您公開其主機 ID,才能查看實體位置。
如要驗證組織中執行中運算執行個體的實體位置,請使用下列其中一種方法:
使用 Google Cloud 控制台、gcloud CLI 或 REST 驗證實體位置
如要一次查看多個運算執行個體的實體位置,請使用 REST API。否則,請選取下列其中一個選項:
控制台
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
在「Name」(名稱) 欄中,按一下要查看詳細資料的運算執行個體名稱。系統會顯示執行個體詳細資料頁面,並選取「Details」(詳細資料) 分頁。
在「Basic information」(基本資訊) 區段中,查看「Physical host」(實體主機) 欄位的值。
gcloud
如要查看執行中運算執行個體的實體位置,請使用
gcloud compute instances describe指令和--flatten=resourceStatus.physicalHostTopology旗標: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 }
後續步驟
進一步瞭解運算執行個體中的主機事件。
瞭解如何監控運算執行個體。
-
如果尚未設定驗證,請先完成設定。驗證程序會確認您的身分,以便您存取 Google Cloud 服務和 API。如要從本機開發環境執行程式碼或範例,您可以選取下列其中一個選項,向 Compute Engine 進行驗證: