為 VM 建立及套用分散式配置政策

本文說明如何建立分散配置政策並套用至虛擬機器 (VM) 執行個體,提高執行個體的可靠性。如要進一步瞭解配置方式政策,包括限制和定價,請參閱「配置方式政策總覽」。

分散配置政策會指定執行個體應分散在不同的可用性網域。這種分布方式有助於降低特定位置中斷 (例如硬體錯誤) 的影響,在執行大規模、分散式和複製的工作負載 (例如 Hadoop 分散式檔案系統 (HDFS)、Cassandra 或 Kafka) 時非常實用。

事前準備

  • 如果尚未設定驗證,請先完成設定。驗證機制會確認您的身分,以便授予 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 執行個體管理員 (v1) (roles/compute.instanceAdmin.v1) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

這個預先定義的角色具備建立分散配置政策,並套用至執行個體所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:

所需權限

您必須具備下列權限,才能建立分散配置政策並套用至執行個體:

  • 如要建立配置政策,必須具備專案的 compute.resourcePolicies.create 權限
  • 如要將配置政策套用至現有執行個體,請在專案中執行 compute.instances.addResourcePolicies
  • 如要建立執行個體,請按照下列步驟操作:
    • 專案的 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 專案或所選子網路
    • 如要在使用虛擬私有雲網路時,為 VM 指派外部 IP 位址,請在專案或所選子網路上,指派 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
  • 如要建立執行個體範本,請在專案中執行 compute.instanceTemplates.create
  • 如要建立代管執行個體群組 (MIG): compute.instanceGroupManagers.create 專案

您或許還可透過自訂角色或其他預先定義的角色取得這些權限。

建立分散配置政策

除非您想測試分散配置政策在執行個體上的套用情形,否則 Google Cloud 建議您建立具有兩個以上可用性網域的分散配置政策。這可降低所有執行個體受到單一硬體錯誤影響的風險。詳情請參閱「關於分散配置政策」。

如要建立分散配置政策,請選取下列其中一個選項:

gcloud

如要建立分散配置政策,請使用 gcloud compute resource-policies create group-placement 指令並加上 --availability-domain-count 旗標。

gcloud compute resource-policies create group-placement POLICY_NAME \
    --availability-domain-count=DOMAIN_COUNT \
    --region=REGION

更改下列內容:

  • POLICY_NAME:分散配置政策的名稱。

  • DOMAIN_COUNT:要放置執行個體的可用性網域數量。這個值必須介於 1 至 8 之間。

  • REGION:要建立配置政策的區域。

REST

如要建立分散配置政策,請向 resourcePolicies.insert 方法發出 POST 要求。在要求主體中加入 availabilityDomainCount 欄位。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/resourcePolicies

{
  "name": "POLICY_NAME",
  "groupPlacementPolicy": {
    "availabilityDomainCount": DOMAIN_COUNT
  }
}

更改下列內容:

  • PROJECT_ID:要建立配置政策的專案 ID。

  • REGION:要建立配置政策的區域。

  • POLICY_NAME:分散配置政策的名稱。

  • DOMAIN_COUNT:要放置執行個體的可用性網域數量。這個值必須介於 1 至 8 之間。

套用分散配置政策

您可以將分散配置政策套用至現有的 VM 或 MIG,或是在建立執行個體、執行個體範本或 MIG 時套用。

如要將分散配置政策套用至 Compute Engine 資源,請選取下列其中一種方法:

將分散配置政策套用至 VM 後,您可以查看 VM 的詳細資料並檢查 availabilityDomain 欄位的值,藉此驗證 VM 所在的可用性網域。

將政策套用至現有 VM

將分散配置政策套用至現有 VM 之前,請考量下列事項:

  • 如果分散配置政策指定多個可用性網域,您可以將政策套用至 VM,而不必停止 VM。不過,VM 可能需要重新分配至其他可用性網域。在這個過程中,Compute Engine 會根據 VM 的主機維護政策,停止或即時遷移 VM。

  • VM 和分散配置政策必須位於相同區域。舉例來說,如果配置政策位於 us-central1 區域,則 VM 必須位於 us-central1 的可用區。如需將 VM 遷移至其他區域,請參閱「在可用區或區域之間移動 VM」。

如要指定 VM 的可用性網域,請更新 VM 屬性,將配置政策套用至 VM。在更新要求中,加入 resourcePolicies 和 scheduling.availabilityDomain 欄位,並將 REFRESH 指定為允許的最具破壞性動作。如果之後要變更已附加分散配置政策的 VM scheduling.availabilityDomain 欄位,則必須將 RESTART 指定為允許的最中斷性動作。

如要將分散配置政策套用至現有 VM,請選取下列其中一個選項:

gcloud

如要將分散配置政策套用至現有 VM,請使用 gcloud compute instances add-resource-policies 指令。

gcloud compute instances add-resource-policies VM_NAME \
    --resource-policies=POLICY_NAME \
    --zone=ZONE

更改下列內容:

  • VM_NAME:現有 VM 的名稱。

  • POLICY_NAME:現有分散配置政策的名稱。

  • ZONE:VM 所在的可用區。

REST

如要將分散配置政策套用至現有 VM,請向 instances.addResourcePolicies 方法傳送 POST 要求。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/addResourcePolicies

{
  "resourcePolicies": [
    "projects/PROJECT_ID/regions/REGION/resourcePolicies/POLICY_NAME"
  ]
}

更改下列內容:

  • PROJECT_ID:分散配置政策和 VM 所在的專案 ID。

  • ZONE:VM 所在的可用區。

  • VM_NAME:現有 VM 的名稱。

  • REGION:分散配置政策所在的區域。

  • POLICY_NAME:現有分散配置政策的名稱。

在建立 VM 時套用政策

建立 VM 時,只能指定與配置政策位於相同區域的分散配置政策。

如要建立指定分散配置政策的 VM,請選取下列其中一個選項:

gcloud

如要建立指定分散配置政策的 VM,請使用 gcloud compute instances create 指令搭配 --resource-policies 旗標。

gcloud compute instances create VM_NAME \
    --machine-type=MACHINE_TYPE \
    --resource-policies=POLICY_NAME \
    --zone=ZONE

更改下列內容:

  • VM_NAME:要建立的 VM 名稱。

  • MACHINE_TYPE:VM 的機器類型。

  • POLICY_NAME:現有分散配置政策的名稱。

  • ZONE:建立 VM 的可用區。

如要指定建立 VM 的可用性網域,可以加入 --availability-domain 旗標。

gcloud compute instances create VM_NAME \
    --availability-domain=DOMAIN_NUMBER \
    --machine-type=MACHINE_TYPE \
    --resource-policies=POLICY_NAME \
    --zone=ZONE

將 DOMAIN_NUMBER 替換為要放置 VM 的可用性網域編號。值必須介於 1 和分散配置政策中指定的網域數量之間。如要驗證分散配置政策中的網域數量,請查看配置政策的詳細資料。

REST

如要建立指定分散配置政策的 VM,請向 instances.insert 方法發出 POST 要求。在要求主體中加入 resourcePolicies 欄位。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
  "name": "VM_NAME",
  "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE",
  "disks": [
    {
      "boot": true,
      "initializeParams": {
        "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
      }
    }
  ],
  "networkInterfaces": [
    {
      "network": "global/networks/default"
    }
  ],
  "resourcePolicies": [
    "projects/PROJECT_ID/regions/REGION/resourcePolicies/POLICY_NAME"
  ]
}

更改下列內容:

  • PROJECT_ID:分散配置政策所在的專案 ID。

  • ZONE:要建立 VM 的可用區,以及機器類型所在的可用區。您只能指定分散配置政策區域內的可用區。

  • VM_NAME:要建立的 VM 名稱。

  • MACHINE_TYPE:VM 的機器類型。

  • IMAGE_PROJECT:包含映文件的映文件專案,例如 debian-cloud。如要進一步瞭解支援的映像檔專案,請參閱「公開映像檔」。

  • IMAGE:指定下列其中一項:

    • OS 映像檔的特定版本,例如 debian-12-bookworm-v20240617。

    • 映像檔系列,格式必須為 family/IMAGE_FAMILY。這會指定最新且未淘汰的 OS 映像檔。例如,如果指定 family/debian-12,系統會使用 Debian 12 映像檔系列中的最新版本。如要進一步瞭解如何使用映像檔系列,請參閱「映像檔系列最佳做法」。

  • REGION:分散配置政策所在的區域。

  • POLICY_NAME:現有分散配置政策的名稱。

如要指定建立 VM 的可用性網域,請在要求主體中加入 availabilityDomain 欄位。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
  "name": "VM_NAME",
  "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE",
  "disks": [
    {
      "boot": true,
      "initializeParams": {
        "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
      }
    }
  ],
  "networkInterfaces": [
    {
      "network": "global/networks/default"
    }
  ],
  "resourcePolicies": [
    "projects/PROJECT_ID/regions/REGION/resourcePolicies/POLICY_NAME"
  ],
  "scheduling": {
    "availabilityDomain": DOMAIN_NUMBER
  }
}

將 DOMAIN_NUMBER 替換為要放置 VM 的可用性網域編號。值必須介於 1 和分散配置政策中指定的網域數量之間。如要驗證分散配置政策中的網域數量,請查看配置政策的詳細資料。

如要進一步瞭解建立 VM 的設定選項,請參閱「建立及啟動 VM 執行個體」。

在大量建立執行個體時套用政策

大量建立指定分散配置政策的執行個體前,請務必確認下列事項:

  • 您只能在與配置政策相同的區域中,大量建立指定分散配置政策的執行個體。

  • 使用分散配置政策大量建立執行個體時,您可以視需要指定要在哪個可用性網域建立執行個體。請避免在單一網域中建立所有執行個體。否則,您無法降低單一硬體錯誤影響所有執行個體的風險。

如要大量建立指定分散配置政策的執行個體,請選取下列其中一個選項:

gcloud

如要大量建立指定分散配置政策的執行個體,請使用 gcloud compute instances bulk create 指令搭配 --resource-policies 旗標。

舉例來說,如要在單一可用區中大量建立執行個體,並指定執行個體的名稱模式,請執行下列指令:

gcloud compute instances bulk create \
    --count=COUNT \
    --machine-type=MACHINE_TYPE \
    --name-pattern=NAME_PATTERN \
    --resource-policies=POLICY_NAME \
    --zone=ZONE

更改下列內容:

  • COUNT:要建立的執行個體數量。

  • MACHINE_TYPE:執行個體的機型。

  • NAME_PATTERN:執行個體的名稱模式。如要取代 VM 名稱中的一連串數字,請使用一連串井字號 (#) 字元。舉例來說,如果使用 vm-# 做為名稱模式,系統會產生名稱開頭為 vm-1、vm-2 的執行個體,並持續產生到 COUNT 指定的執行個體數量。

  • POLICY_NAME:現有分散配置政策的名稱。

  • ZONE:要大量建立執行個體的可用區。

如要指定大量建立執行個體的可用性網域,請加入 --availability-domain 旗標。

gcloud compute instances bulk create \
    --availability-domain=DOMAIN_NUMBER \
    --count=COUNT \
    --machine-type=MACHINE_TYPE \
    --name-pattern=NAME_PATTERN \
    --resource-policies=POLICY_NAME \
    --zone=ZONE

將 DOMAIN_NUMBER 替換為要放置 VM 的可用性網域編號。值必須介於 1 和分散配置政策中指定的網域數量之間。如要驗證分散配置政策中的網域數量,請查看配置政策的詳細資料。

REST

如要大量建立指定分散配置政策的執行個體,請向 instances.bulkInsert 方法發出 POST。在要求主體中加入 resourcePolicies 欄位。

舉例來說,如要在單一可用區中大量建立執行個體,並為執行個體指定名稱模式,請按照下列方式提出 POST 要求:

POST https://compute.googleapis.com/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"
      }
    ],
    "resourcePolicies": [
      "POLICY_NAME"
    ]
  }
}

更改下列內容:

  • PROJECT_ID:分散配置政策所在的專案 ID。

  • ZONE:要大量建立執行個體的可用區。

  • COUNT:要建立的執行個體數量。

  • NAME_PATTERN:執行個體的名稱模式。如要取代 VM 名稱中的一連串數字,請使用一連串井字號 (#) 字元。舉例來說,如果使用 vm-# 做為名稱模式,系統會產生名稱開頭為 vm-1、vm-2 的執行個體,並持續產生到 COUNT 指定的執行個體數量。

  • MACHINE_TYPE:執行個體的機型。

  • IMAGE_PROJECT:包含映文件的映文件專案,例如 debian-cloud。如要進一步瞭解支援的映像檔專案,請參閱「公開映像檔」。

  • IMAGE:指定下列其中一項:

    • OS 映像檔的特定版本,例如 debian-12-bookworm-v20240617。

    • 映像檔系列,格式必須為 family/IMAGE_FAMILY。這會指定最新且未淘汰的 OS 映像檔。例如,如果指定 family/debian-12,系統會使用 Debian 12 映像檔系列中的最新版本。如要進一步瞭解如何使用映像檔系列,請參閱「映像檔系列最佳做法」。

  • POLICY_NAME:現有分散配置政策的名稱。

如要指定大量建立執行個體的可用性網域,請在要求主體中加入 availabilityDomain 欄位。

POST https://compute.googleapis.com/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"
      }
    ],
    "resourcePolicies": [
      "POLICY_NAME"
    ],
    "scheduling": {
      "availabilityDomain": DOMAIN_NUMBER
    }
  }
}

將 DOMAIN_NUMBER 替換為要放置 VM 的可用性網域編號。值必須介於 1 和分散配置政策中指定的網域數量之間。如要驗證分散配置政策中的網域數量,請查看配置政策的詳細資料。

如要進一步瞭解整批建立執行個體的設定選項,請參閱「整批建立執行個體」。

在建立執行個體範本時套用政策

建立指定分散配置政策的執行個體範本前,請先考量下列事項:

  • 如要建立區域執行個體範本,範本和分散配置政策必須位於相同區域。否則,建立執行個體範本會失敗。

  • 避免在單一可用性網域中建立所有執行個體。否則,您無法降低單一硬體錯誤影響所有執行個體的風險。

建立指定分散配置政策的執行個體範本後,您可以使用該範本執行下列操作:

如要建立區域性執行個體範本,以及具有八個可用性網域的新分散配置政策,請使用 Google Cloud 控制台。如要建立全域或區域執行個體範本,並指定現有的分散配置政策,請使用 gcloud CLI 或 REST API:

控制台

  1. 前往 Google Cloud 控制台的「Instance templates」(執行個體範本) 頁面。

    前往「Instance templates」(執行個體範本)

  2. 按一下「Create instance template」(建立執行個體範本)。「Create an instance template」(建立執行個體範本) 頁面隨即顯示。

  3. 在「Region」(區域) 欄位中,指定要建立分散配置政策和執行個體範本的區域。

  4. 在「Machine configuration」(機器設定) 部分,指定機器系列和類型。

  5. 在「Placement policy」(配置政策) 區段中,選取「Placement policy」(配置政策) 清單中的「Spread」(分散)。

  6. 點選「建立」。

gcloud

如要建立指定分散配置政策的執行個體範本,請使用 gcloud compute instance-templates create 指令並加上 --resource-policies 旗標。

舉例來說,如要建立指定分散配置政策的全域執行個體範本,請執行下列指令:

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --machine-type=MACHINE_TYPE \
    --resource-policies=POLICY_NAME

更改下列內容:

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

  • MACHINE_TYPE:使用執行個體範本建立的執行個體機器類型。

  • POLICY_NAME:現有分散配置政策的名稱。

如要指定建立執行個體的可用性網域,請加入 --availability-domain 旗標。

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --availability-domain=DOMAIN_NUMBER  \
    --machine-type=MACHINE_TYPE \
    --resource-policies=POLICY_NAME

將 DOMAIN_NUMBER 替換為要建立執行個體的可用性網域編號。這個值必須介於 1 和配置政策中指定的網域數量之間。如要驗證分散配置政策中的網域數量,請查看配置政策的詳細資料。

REST

如要建立指定分散配置政策的執行個體範本,請向下列其中一種方法發出 POST 要求:

在要求主體中指定 resourcePolicies 欄位。

舉例來說,如要建立指定分散配置政策的全域執行個體範本,請提出 POST 要求,如下所示:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/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"
      }
    ],
    "resourcePolicies": [
      "POLICY_NAME"
    ]
  }
}

更改下列內容:

  • PROJECT_ID:分散配置政策所在的專案 ID。

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

  • IMAGE_PROJECT:包含映文件的映文件專案,例如 debian-cloud。如要進一步瞭解支援的映像檔專案,請參閱「公開映像檔」。

  • IMAGE:指定下列其中一項:

    • OS 映像檔的特定版本,例如 debian-12-bookworm-v20240617。

    • 映像檔系列,格式必須為 family/IMAGE_FAMILY。這會指定最新且未淘汰的 OS 映像檔。例如,如果指定 family/debian-12,系統會使用 Debian 12 映像檔系列中的最新版本。如要進一步瞭解如何使用映像檔系列,請參閱「映像檔系列最佳做法」。

  • MACHINE_TYPE:使用執行個體範本建立的執行個體機器類型。

  • POLICY_NAME:現有分散配置政策的名稱。

如要指定建立執行個體的可用性網域,請在要求主體中加入 availabilityDomain 欄位。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/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"
      }
    ],
    "resourcePolicies": [
      "POLICY_NAME"
    ],
    "scheduling": {
      "availabilityDomain": DOMAIN_NUMBER
    }
  }
}

將 DOMAIN_NUMBER 替換為要建立執行個體的可用性網域編號。這個值必須介於 1 和配置政策中指定的網域數量之間。如要驗證分散配置政策中的網域數量,請查看配置政策的詳細資料。

如要進一步瞭解建立執行個體範本的設定選項,請參閱「建立執行個體範本」。

後續步驟