在單一用戶群節點上佈建 VM

這個頁面說明如何在單一租戶節點中佈建 VM。單一租戶節點是一種實體伺服器,只會執行一項專案中的 VM。在單一租戶節點上佈建 VM 之前,請先參閱單一租戶節點總覽。

事前準備

  • 在單一租戶節點上佈建 VM 前,請先檢查配額。視您預留的節點數量和大小而定,您可能需要要求額外配額。
  • 建立單一租戶節點範本。
  • 建立單一租戶節點群組。
  • 如果尚未設定驗證,請先完成設定。驗證程序會確認您的身分,以便授予 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 進行驗證」一節。

建立單一租戶節點範本

建立節點群組和佈建單一租戶 VM 前,必須先建立單一租戶節點範本。節點範本是區域性資源,可定義節點群組中每個節點的屬性,例如節點類型、相依性標籤、本機 SSD、加速器和 CPU 超額配置。

如要使用 Google Cloud 控制台、Google Cloud CLI 或 Compute Engine REST API 設定及建立節點範本,請參閱「建立單一租戶節點範本」。

建立單一租戶節點群組

建立節點範本後,您必須建立單一租戶節點群組。節點群組是特定可用區中單一租戶節點的同質叢集,會沿用範本的屬性。您可以在節點群組上設定主機維護政策、自動調度資源和跨專案共用設定。

如要使用 Google Cloud 控制台、Google Cloud CLI 或 Compute Engine REST API 設定及建立節點群組,請參閱「建立單一租戶節點群組」。

佈建單一租戶 VM

根據先前建立的節點範本建立節點群組後,您可以在單一租戶節點群組上佈建個別 VM。

如要在特定節點或節點群組上佈建 VM,且該節點或節點群組的親和性標籤與您先前指派給節點範本的標籤相符,請按照建立 VM 執行個體的標準程序操作,並將親和性標籤指派給 VM。

或者,您也可以按照下列程序,從節點群組詳細資料頁面,在單一租戶節點上佈建 VM。Compute Engine 會根據您佈建 VM 的節點群組,指派相似度標籤。

控制台

  1. 前往 Google Cloud 控制台的「Sole-tenant nodes」(單一租戶節點) 頁面。

    前往「Sole-tenant nodes」(單一租戶節點) 頁面

  2. 按一下「Node groups」(節點群組)。

  3. 按一下要佈建 VM 執行個體的節點群組「Name」(名稱),然後視需要按一下要佈建 VM 的特定單一租戶節點名稱,在該節點上佈建 VM。

  4. 按一下「Create instance」(建立執行個體),在這個節點群組上佈建 VM 執行個體,記下系統自動套用至「Name」(名稱)、「Region」(區域) 和「Zone」(可用區) 的值,並視需要修改這些值。

  5. 指定「Machine family」(機器家族)、「Series」(系列) 和「Machine type」(機型),選取「Machine configuration」(機器設定)。選擇與單一租戶節點類型對應的「Series」(系列)。

  6. 視需要修改「開機磁碟」、「防火牆」和其他設定。

  7. 按一下「Sole Tenancy」(單一租戶),記下自動指派的「Node affinity labels」(節點親和性標籤),然後視需要使用「Browse」(瀏覽) 進行調整。

  8. 按一下「Management」(管理),然後在「On host maintenance」(主機維護期間) 中選擇下列其中一項:

    • VM Migration (建議):在維護事件期間,VM 會遷移至節點群組中的其他節點。

    • 終止:VM 在維護事件期間停止。

  9. 在「自動重新啟動」部分,選擇下列其中一個選項:

    • 開啟 (建議):如果 VM 因維護事件而停止,系統會自動重新啟動 VM。

    • 關閉:維護事件後不自動重新啟動 VM。

  10. 按一下「建立」,完成建立單一租戶 VM。

gcloud

使用 gcloud compute instances create 指令,在單一租戶節點群組上佈建 VM:

gcloud compute instances create VM_NAME \
  [--zone=ZONE \]
  --image-family=IMAGE_FAMILY \
  --image-project=IMAGE_PROJECT \
  --node-group=GROUP_NAME \
  --machine-type=MACHINE_TYPE \
  [--maintenance-policy=MAINTENANCE_POLICY \]
  [--accelerator type=GPU_TYPE,count=GPU_COUNT \]
  [--local-ssd interface=SSD_INTERFACE \]
  [--restart-on-failure]

--restart-on-failure 旗標會指出單一租戶 VM 是否會在停止後重新啟動。這個標記預設為啟用。使用 --no-restart-on-failure 停用。

更改下列內容:

  • VM_NAME:新單一租戶 VM 的名稱。

  • ZONE:要佈建單一租戶 VM 的可用區。

  • IMAGE_FAMILY:用於建立 VM 的映像檔映像檔系列。

  • IMAGE_PROJECT:映像檔系列的映像檔專案。

  • GROUP_NAME:要佈建 VM 的節點群組名稱。

  • MACHINE_TYPE:單一租戶 VM 的機器類型。使用 gcloud compute machine-types list 指令,取得專案可用的機型清單。

  • MAINTENANCE_POLICY:指定維護事件期間,單一租戶 VM 的重新啟動行為。設為下列其中一項:

    • MIGRATE:在維護事件期間,VM 會遷移至節點群組中的其他節點。

    • TERMINATE:VM 在維護事件期間停止。

  • GPU_TYPE:GPU 類型。設為建立節點範本時指定的其中一種加速器類型。

  • GPU_COUNT:節點範本指定的 GPU 總數,要連接至這個 VM。預設值為 1。

  • SSD_INTERFACE:本機 SSD 介面類型。只有透過支援本機 SSD 的節點範本建立的執行個體,才能設定這項屬性。如果在建立執行個體時指定這個選項,但節點範本不支援本機 SSD,則執行個體建立作業會失敗。如果開機磁碟映像檔驅動程式已針對 NVMe 最佳化,請設為 nvme,否則請設為 scsi。請為每個本機 SSD 分區指定這個旗標和對應的值。

REST

使用 instances.insert 方法,在單一租戶節點群組上佈建 VM:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/VM_ZONE/instances
{ "machineType": "zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE", "name": "VM_NAME", "scheduling": { "onHostMaintenance": MAINTENANCE_POLICY, "automaticRestart": RESTART_ON_FAILURE, "nodeAffinities": [ { "key": "compute.googleapis.com/node-group-name", "operator": "IN", "values": [ "GROUP_NAME" ] } ] }, "networkInterfaces": [ { "network": "global/networks/NETWORK", "subnetwork": "regions/REGION/subnetworks/SUBNETWORK" } ], "guestAccelerators": [ { "acceleratorType": GPU_TYPE, "acceleratorCount": GPU_COUNT } ], "disks": [ { "boot": true, "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY" } }, { "type":"SCRATCH", "initializeParams":{ "diskType":"zones/LOCAL_SSD_ZONE/diskTypes/local-ssd" }, "autoDelete":true, "interface":"SSD_INTERFACE" } ] }

更改下列內容:

  • PROJECT_ID:專案 ID。

  • VM_ZONE:要佈建單一租戶 VM 的可用區。

  • MACHINE_TYPE_ZONE:機器類型的可用區。

  • MACHINE_TYPE:單一租戶 VM 的機器類型。使用 machineTypes.list 方法,取得專案可用的機器類型清單。

  • VM_NAME:新單一租戶 VM 的名稱。

  • MAINTENANCE_POLICY:指定維護事件期間,單一租戶 VM 的重新啟動行為。設為下列其中一項:

    • MIGRATE:在維護事件期間,VM 會遷移至節點群組中的其他節點。

    • TERMINATE:VM 在維護事件期間停止。

  • RESTART_ON_FAILURE:指出單一租戶 VM 是否會在停止後重新啟動。預設為 true。

  • GROUP_NAME:要佈建 VM 的節點群組名稱。

  • NETWORK:這個 VM 的網路資源網址。

  • REGION:這個 VM 子網路所在的區域。

  • SUBNETWORK:這個 VM 的子網路資源網址。

  • GPU_TYPE:GPU 類型。設為建立節點範本時指定的其中一種加速器類型。

  • GPU_COUNT:節點範本指定的 GPU 總數中,要連接至這個 VM 的數量。預設值為 1。

  • IMAGE_PROJECT:映像檔系列的映像檔專案。

  • IMAGE_FAMILY:用於建立 VM 的映像檔映像檔系列。

  • LOCAL_SSD_ZONE:本機 SSD 的可用區。

  • SSD_INTERFACE:本機 SSD 介面的類型。如果開機磁碟映像檔驅動程式已針對 NVMe 最佳化,請設為 NVME,否則請設為 SCSI。

佈建一組單一租戶 VM

代管執行個體群組 (MIG) 可讓您佈建一組相同的單一租戶 VM。相依性標籤可讓您指定要佈建單一租戶 VM 群組的單一租戶節點或節點群組。

如果是區域 MIG,您必須在區域 MIG 的每個可用區中建立節點群組,並在區域 MIG 的執行個體範本中,為這些節點群組指定節點相依性。

gcloud

  1. 使用 gcloud compute instance-templates create 指令,為要在單一租戶節點群組中建立的一組 VM,建立代管執行個體群組範本:

    gcloud compute instance-templates create INSTANCE_TEMPLATE \
      --machine-type=MACHINE_TYPE \
      --image-project=IMAGE_PROJECT \
      --image-family=IMAGE_FAMILY \
      --node-group=GROUP_NAME \
      [--accelerator type=GPU_TYPE,count=GPU_COUNT \]
      [--local-ssd interface=SSD_INTERFACE]
    

    更改下列內容:

    • INSTANCE_TEMPLATE:新執行個體範本的名稱。

    • MACHINE_TYPE:單一租戶 VM 的機器類型。使用 gcloud compute machine-types list 指令,取得專案可用的機型清單。

    • IMAGE_PROJECT:映像檔系列的映像檔專案。

    • IMAGE_FAMILY:用於建立 VM 的映像檔映像檔系列。

    • GROUP_NAME:要佈建 VM 的節點群組名稱。或者,如要使用這個執行個體範本,建立存在於多個可用區的區域性 MIG,請使用 --node-affinity-file 旗標,為區域性 MIG 的節點群組指定值清單。

    • GPU_TYPE:GPU 類型。設為建立節點範本時指定的其中一種加速器類型。

    • GPU_COUNT:節點範本指定的 GPU 總數,要連接至這個 VM。預設值為 1。

    • SSD_INTERFACE:本機 SSD 介面類型。如果開機磁碟映像檔驅動程式已針對 NVMe 最佳化,請設為 nvme,否則請設為 scsi。請為每個本機 SSD 分區指定這個旗標和對應的值一次。

  2. 使用 gcloud compute instance-groups managed create 指令,在單一租戶節點群組中建立代管執行個體群組:

    gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
      --size=SIZE \
      --template=INSTANCE_TEMPLATE \
      --zone=ZONE
    

    更改下列內容:

    • INSTANCE_GROUP_NAME:這個執行個體群組的名稱。

    • SIZE:這個執行個體群組要包含的 VM 數量。節點群組必須有足夠的資源,才能容納這個代管執行個體群組中的執行個體。使用代管執行個體群組自動配置器,自動管理代管執行個體群組的大小。

    • INSTANCE_TEMPLATE:用於建立這個 MIG 的執行個體範本名稱。範本必須有一或多個節點親和性標籤,指向適當的節點群組。

    • ZONE:要在哪個可用區建立代管執行個體群組。如果是區域性 MIG,請將 --zone 旗標替換為 --region 旗標並指定區域,同時新增 --zones 旗標,指定節點群組所在的所有可用區。

REST

  1. 使用 instanceTemplates.insert 方法,在單一租戶節點群組中建立代管執行個體群組範本:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/TEMPLATE_ZONE/instance-templates
    { "name": "INSTANCE_TEMPLATE", "properties": { "machineType": "zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE", "scheduling": { "nodeAffinities": [ { "key": "compute.googleapis.com/node-group-name", "operator": "IN", "values": [ "GROUP_NAME" ] } ] }, "networkInterfaces": [ { "network": "global/networks/NETWORK", "subnetwork": "regions/REGION/subnetworks/SUBNETWORK" } ], "guestAccelerators": [ { "acceleratorType": GPU_TYPE, "acceleratorCount": GPU_COUNT } ], "disks": [ { "boot": true, "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY" } }, { "type":"SCRATCH", "initializeParams":{ "diskType":"zones/LOCAL_SSD_ZONE/diskTypes/local-ssd" }, "autoDelete":true, "interface":"SSD_INTERFACE" } ] } }

    更改下列內容:

    • PROJECT_ID:專案 ID。

    • TEMPLATE_ZONE:要建立執行個體範本的可用區。

    • INSTANCE_TEMPLATE:新執行個體範本的名稱。

    • MACHINE_TYPE_ZONE:機器類型的可用區。

    • MACHINE_TYPE:單一租戶 VM 的機器類型。使用 machineTypes.list 方法,取得專案可用的機型清單。

    • GROUP_NAME:要佈建 VM 的節點群組名稱。如要使用這個執行個體範本,建立存在於多個可用區的區域性 MIG,請指定與區域性 MIG 位於相同可用區的節點群組清單。

    • NETWORK:這個執行個體範本的網路資源網址。

    • REGION:這個執行個體範本的子網路所在區域。

    • SUBNETWORK:這個執行個體範本的子網路資源網址。

    • GPU_TYPE:GPU 類型。設為建立節點範本時指定的其中一種加速器類型。

    • GPU_COUNT:節點範本指定的 GPU 總數中,要連接至這個 VM 的 GPU 數量。預設值為 1。

    • IMAGE_PROJECT:映像檔系列的映像檔專案。

    • IMAGE_FAMILY:用於建立 VM 的映像檔映像檔系列。

    • LOCAL_SSD_ZONE:本機 SSD 的可用區。

    • SSD_INTERFACE:本機 SSD 介面的類型。如果開機磁碟映像檔驅動程式已針對 NVMe 最佳化,請設為 NVME,否則請設為 SCSI。

  2. 使用 instanceGroupManagers.insert 方法,根據先前建立的執行個體範本,在單一租戶節點群組中建立 MIG。或者,如要建立區域性 MIG,請使用 regionInstanceGroupManagers.insert 方法,並指定執行個體範本中所有節點群組的區域和可用區。

    舉例來說,如要建立可用區 MIG,請使用下列要求:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers
    {
      "baseInstanceName": "NAME_PREFIX",
      "name": "INSTANCE_GROUP_NAME",
      "targetSize": SIZE,
      "instanceTemplate": "global/instanceTemplates/INSTANCE_TEMPLATE"
    }
    

    更改下列內容:

    • PROJECT_ID:專案 ID。

    • ZONE:要在哪個可用區建立代管執行個體群組。

    • NAME_PREFIX:代管執行個體群組中各個執行個體的前置字串名稱。

    • INSTANCE_GROUP_NAME:執行個體群組的名稱。

    • SIZE:這個執行個體群組要包含的 VM 數量。節點群組必須有足夠的資源,才能容納這個代管執行個體群組中的執行個體。使用代管執行個體群組自動配置器,自動管理代管執行個體群組的大小。

    • INSTANCE_TEMPLATE:用於建立這個群組的執行個體範本網址。範本必須有指向適當節點群組的節點親和性標籤。

設定節點相依性標籤

節點相依性標籤可讓您以邏輯方式分組節點群組,並在特定一組節點群組上排定 VM。您也可以使用節點相依性標籤,在不同可用區的節點群組中排定 VM,並將節點群組保留在邏輯群組中。下列程序示範如何使用相似標籤,將 VM 與用於正式環境工作負載的特定節點群組建立關聯。這個範例說明如何排定單一 VM 的時間表,但您也可以使用代管執行個體群組,排定一組 VM 的時間表。

gcloud

  1. 使用 gcloud compute sole-tenancy node-templates create 指令,為正式環境工作負載建立一組具有相似標籤的節點範本:

    gcloud compute sole-tenancy node-templates create prod-template \
      --node-type=n1-node-96-624 \
      --node-affinity-labels workload=frontend,environment=prod
    
  2. 使用 gcloud compute sole-tenancy node-templates describe 指令,查看指派給節點範本的節點相似度標籤。

  3. 使用 gcloud compute sole-tenancy node-groups create 指令建立使用正式版範本的節點群組:

    gcloud compute sole-tenancy node-groups create prod-group \
      --node-template=prod-template \
      --target-size=1
    
  4. 針對正式環境 VM,請建立 node-affinity-prod.json 檔案,指定正式環境 VM 的相似度。舉例來說,您可以建立檔案,指定 VM 只能在同時具有 workload=frontend 和 environment=prod 親和性的節點上執行。使用 Cloud Shell 建立節點親和性檔案,或在您選擇的位置建立檔案。

    [
      {
        "key" : "workload",
        "operator" : "IN",
        "values" : ["frontend"]
      },
      {
        "key" : "environment",
        "operator" : "IN",
        "values" : ["prod"]
      }
    ]
    
  5. 使用 node-affinity-prod.json 檔案和 gcloud compute instances create 指令,在具有相符親和性標籤的節點群組上排定 VM。

    gcloud compute instances create prod-vm \
      --node-affinity-file node-affinity-prod.json \
      --machine-type=n1-standard-2
    
  6. 使用 gcloud compute instances describe 指令並查看 scheduling 欄位,即可查看指派給 VM 的節點親和性。

設定節點反相依性標籤

節點相依性標籤可設為反相依性標籤,防止 VM 在特定節點上執行。舉例來說,您可以使用反親和性標籤,防止用於開發目的的 VM 與正式版 VM 排定在相同節點上。以下範例說明如何使用相似度標籤,防止 VM 在特定節點群組上執行。這個範例說明如何排定單一 VM 的時間表,但您也可以使用代管執行個體群組排定一組 VM 的時間表。

gcloud

  1. 如要指定開發 VM 的親和性,請使用 Cloud Shell 建立 node-affinity-dev.json,或在您選擇的位置建立。舉例來說,您可以建立檔案,將 VM 設為在具有 workload=frontend 親和性的任何節點群組上執行,只要不是 environment=prod 即可:

    [
      {
        "key" : "workload",
        "operator" : "IN",
        "values" : ["frontend"]
      },
      {
        "key" : "environment",
        "operator" : "NOT_IN",
        "values" : ["prod"]
      }
    ]
    
  2. 使用 node-affinity-dev.json 檔案和 gcloud compute instances create 指令建立開發 VM:

    gcloud compute instances create dev-vm \
      --node-affinity-file=node-affinity-dev.json \
      --machine-type=n1-standard-2
    
  3. 使用 gcloud compute instances describe 指令並查看 scheduling 欄位,即可查看指派給 VM 的節點反親和性。

後續步驟