建立並套用 VM 的擴散配置政策

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

分散式配置政策會指定 VM 應分散在不同可用性網域。這種分配方式有助於減輕特定位置的干擾 (例如硬體錯誤),並在執行大規模、分散式和複製的工作負載 (例如 Hadoop 分散式檔案系統 (HDFS)、Cassandra 或 Kafka) 時相當實用。

事前準備

  • 如果尚未設定驗證,請先完成設定。 「驗證」是指驗證身分的程序,確認您有權存取 Trusted Cloud by S3NS 服務和 API。如要從本機開發環境執行程式碼或範例,請選取下列任一選項,向 Compute Engine 進行驗證:

    Select the tab for how you plan to use the samples on this page:

    gcloud

    1. 安裝 Google Cloud CLI,然後 使用同盟身分登入 gcloud CLI。 登入後,執行下列指令初始化 Google Cloud CLI:

      gcloud init
    2. Set a default region and zone.

    REST

    如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。

      安裝 Google Cloud CLI,然後 使用同盟身分登入 gcloud CLI。 登入後,執行下列指令初始化 Google Cloud CLI:

      gcloud init

    詳情請參閱 Trusted Cloud 驗證說明文件中的「Authenticate for using REST」。

必要的角色

如要取得建立及將分散式放置群組政策套用至 VM 所需的權限,請要求管理員授予您專案的 Compute 執行個體管理員 (v1) (roles/compute.instanceAdmin.v1) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

這個預先定義的角色具備建立及將分散式配置政策套用至 VM 的必要權限。如要查看確切的必要權限,請展開「必要權限」部分:

所需權限

如要建立及套用分散式配置政策至 VM,必須具備下列權限:

  • 如要建立刊登位置政策,請對專案具備 compute.resourcePolicies.create 權限。
  • 如要將放置政策套用至現有 VM: compute.instances.addResourcePolicies 專案
  • 如要建立 VM,請按照下列步驟操作:
    • 專案的 compute.instances.create 權限
    • 如要使用自訂映像檔建立 VM,請按一下映像檔上的 compute.images.useReadOnly
    • 如要使用快照建立 VM,請按一下快照上的 compute.snapshots.useReadOnly
    • 如要使用執行個體範本建立 VM,請按一下執行個體範本上的 compute.instanceTemplates.useReadOnly
    • 如要將舊版網路指派給 VM:專案的 compute.networks.use
    • 如要為 VM 指定靜態 IP 位址,請在專案中擁有 compute.addresses.use 權限
    • 使用舊版網路時,如要將外部 IP 位址指派給 VM,請在專案中設定 compute.networks.useExternalIp
    • 為 VM 指定子網路:專案或所選子網路的 compute.subnetworks.use
    • 使用虛擬私有雲網路時,如要將外部 IP 位址指派給 VM,請在專案或所選子網路上擁有 compute.subnetworks.useExternalIp 權限
    • 如要為專案中的 VM 設定 VM 執行個體中繼資料,請執行下列指令:compute.instances.setMetadata
    • 如要為 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

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

建立分散配置政策

除非您想測試擴散式放置政策是否適用於 VM,否則建議建立含有兩個以上可用性網域的擴散式放置政策。 Trusted Cloud by S3NS 這樣可降低單一硬體錯誤影響所有 VM 的風險。詳情請參閱「關於散布刊登位置政策」。

如要建立分散式配置政策,請選取下列任一選項:

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:可放置 VM 的不同可用性網域數量。此值的長度須介於 18 個半形字元。

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

REST

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

POST https://compute.s3nsapis.fr/compute/v1/projects/PROJECT_ID/regions/REGION/resourcePolicies

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

更改下列內容:

  • PROJECT_ID:要在哪個專案中建立刊登位置政策的 ID。

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

  • POLICY_NAME:分散式刊登位置政策的名稱。

  • DOMAIN_COUNT:可放置 VM 的不同可用性網域數量。此值的長度須介於 18 個半形字元。

套用分散配置政策

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

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

將分散式放置群組政策套用至 VM 後,您可以查看 VM 詳細資料,並檢查 availabilityDomain 欄位的值,確認 VM 所在的可用性網域。

將政策套用至現有 VM

將分散式放置群組政策套用至現有 VM 前,請先考量下列事項:

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

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

如要指定放置 VM 的可用性網域,請更新 VM 的屬性,將放置政策套用至 VM。更新 VM 的屬性時,請務必加入 resourcePoliciesscheduling.availabilityDomain 欄位。

如要將分散式放置政策套用至現有 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.s3nsapis.fr/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.s3nsapis.fr/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.s3nsapis.fr/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 執行個體」一文。

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

建立指定分散式放置策略的執行個體範本前,請確認下列事項:

  • 如要建立區域執行個體範本,請在與分散式配置政策相同的區域中建立範本。否則建立執行個體範本就會失敗。

  • 建立執行個體範本時,您可以選擇指定要建立 VM 的可用性網域。避免在單一網域中建立所有 VM。否則,單一硬體錯誤影響所有 VM 的風險不會降低。

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

如要建立指定分散式放置政策的執行個體範本,請選取下列其中一個選項:

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:使用執行個體範本建立的 VM 機器類型。

  • POLICY_NAME:現有擴展刊登位置政策的名稱。

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

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

DOMAIN_NUMBER 替換為要建立 VM 的可用性網域編號。這個值必須介於 1 和刊登位置政策中指定的網域數量之間。如要驗證放送位置政策中的網域數量,請查看放送位置政策的詳細資料

REST

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

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

舉例來說,如要建立指定分散式放置群組政策的全域執行個體範本,請發出下列 POST 要求:

POST https://compute.s3nsapis.fr/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:使用執行個體範本建立的 VM 機器類型。

  • POLICY_NAME:現有擴展刊登位置政策的名稱。

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

POST https://compute.s3nsapis.fr/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 替換為要建立 VM 的可用性網域編號。這個值必須介於 1 和刊登位置政策中指定的網域數量之間。如要驗證放送位置政策中的網域數量,請查看放送位置政策的詳細資料

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

對 MIG 中的 VM 套用政策

建立執行個體範本並指定分散式放置政策後,即可使用該範本執行下列操作:

在建立 MIG 時套用政策

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

如要使用指定分散式放置政策的執行個體範本建立 MIG,請選取下列任一選項:

gcloud

如要使用指定分散式放置政策的執行個體範本建立 MIG,請使用 gcloud compute instance-groups managed create 指令

舉例來說,如要使用指定分散式放置策略的全域執行個體範本建立區域 MIG,請執行下列指令:

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

更改下列內容:

  • INSTANCE_GROUP_NAME:要建立的 MIG 名稱。

  • SIZE:MIG 的大小。

  • INSTANCE_TEMPLATE_NAME:現有全域執行個體範本的名稱,該範本指定了分散式配置政策。

  • ZONE:要建立 MIG 的可用區,必須位於分散式放置群組政策所在的區域。

REST

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

舉例來說,如要使用指定分散式放置群組政策的全域執行個體範本建立區域 MIG,請發出 POST 要求,如下所示:

POST https://compute.s3nsapis.fr/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers

{
  "name": "INSTANCE_GROUP_NAME",
  "targetSize": SIZE,
  "versions": [
    {
      "instanceTemplate": "global/instanceTemplates/INSTANCE_TEMPLATE_NAME"
    }
  ]
}

更改下列內容:

  • PROJECT_ID:專案的 ID,其中包含擴散刊登位置政策,以及指定刊登位置政策的執行個體範本。

  • ZONE:要建立 MIG 的可用區,必須位於分散式放置群組政策所在的區域。

  • INSTANCE_GROUP_NAME:要建立的 MIG 名稱。

  • SIZE:MIG 的大小。

  • INSTANCE_TEMPLATE_NAME:現有全域執行個體範本的名稱,該範本指定了分散式配置政策。

如要進一步瞭解建立 MIG 的設定選項,請參閱「建立 MIG 的基本情境」。

將政策套用至現有 MIG

只有當現有 MIG 與放置政策位於同一區域,或當區域 MIG 與放置政策位於同一區域的可用區時,您才能將分散式放置政策套用至現有 MIG。

如要更新 MIG,以使用指定分散式放置政策的執行個體範本,請選取下列其中一個選項:

gcloud

如要更新 MIG,以使用指定分散式放置政策的執行個體範本,請使用 gcloud compute instance-groups managed rolling-action start-update 指令

舉例來說,如要更新區域 MIG,使其使用指定分散式放置政策的執行個體範本,並將 MIG 中的現有 VM 替換為指定範本屬性的新 VM,請執行下列指令:

gcloud compute instance-groups managed rolling-action start-update INSTANCE_GROUP_NAME \
    --version=template=INSTANCE_TEMPLATE_NAME \
    --zone=ZONE

更改下列內容:

  • INSTANCE_GROUP_NAME:現有 MIG 的名稱。

  • INSTANCE_TEMPLATE_NAME:現有全域執行個體範本的名稱,該範本指定了分散式配置政策。

  • ZONE:MIG 所在的可用區。您只能將分散配置政策套用至與配置政策位於同一地區的 MIG。

REST

如要更新 MIG,使其使用指定分散式放置政策的執行個體範本,並自動將範本和放置政策的屬性套用至 MIG 中的現有 VM,請對下列其中一種方法提出 PATCH 要求:

舉例來說,如要更新區域 MIG,使其使用指定分散式放置政策的全球執行個體範本,並將 MIG 中的現有 VM 替換為指定範本屬性的新 VM,請發出下列 PATCH 要求:

PATCH https://compute.s3nsapis.fr/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/INSTANCE_GROUP_NAME

{
  "instanceTemplate": "global/instanceTemplates/INSTANCE_TEMPLATE_NAME"
}

更改下列內容:

  • PROJECT_ID:您用來建立現有 MIG 的專案 ID、分散式配置政策,以及指定分散式配置政策的執行個體範本。

  • ZONE:MIG 所在的可用區。您只能將分散配置政策套用至與配置政策位於同一地區的 MIG。

  • INSTANCE_GROUP_NAME:現有 MIG 的名稱。

  • INSTANCE_TEMPLATE_NAME:現有全域執行個體範本的名稱,該範本指定了分散式配置政策。

如要進一步瞭解更新 MIG 中 VM 的設定選項,請參閱「更新 MIG 中 VM 的設定並套用新設定」。

後續步驟