在區域性 MIG 中為 VM 設定目標分配型態


如果您使用區域性代管執行個體群組 (MIG),可以將該 MIG 的目標分配型態設為下列其中一個選項:

  • EVEN (預設):群組會建立及刪除 VM,以在所選區域中達到並維持相同數量的 VM。在EVEN分配方式中,任兩個區域之間的 VM 數量最多只會相差 1 個。建議用於高可用性服務工作負載。
  • BALANCED:群組會優先在資源可用的區域中建立 VM,同時盡可能在所選區域中平均分配 VM,以盡量減少區域故障的影響。建議用於高可用性服務或批次工作負載。
  • ANY:群組會選擇區域來建立 VM 執行個體,以滿足目前資源限制內的 VM 要求數量,並盡量使用未使用的區域預留項目。建議用於不需要高可用性的批次工作負載。
  • 任何單一可用區:群組會在單一可用區中建立所有 VM 執行個體。系統會根據硬體支援、目前的資源和配額可用性,以及相符的預留項目選擇區域。建議搭配 密集執行個體配置政策使用,適用於需要 VM 之間大量通訊的工作負載。

如要在地區代管執行個體群組中使用預留 VM,請在各個適用區域中建立具有相同名稱的相同預留項目。接著,在群組的執行個體範本中指定保留項目名稱。

如要選擇形狀,請參閱比較表用途分配形狀的運作方式

建立區域性 MIG 時設定目標分配型態,或更新現有區域性 MIG 的目標型態。

事前準備

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

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

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

      1. After installing the Google Cloud CLI, initialize it by running the following command:

        gcloud init

        If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      2. Set a default region and zone.
      3. Terraform

        如要在本機開發環境中使用本頁的 Terraform 範例,請安裝並初始化 gcloud CLI,然後使用使用者憑證設定應用程式預設憑證。

        1. Install the Google Cloud CLI.

        2. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

        3. To initialize the gcloud CLI, run the following command:

          gcloud init
        4. If you're using a local shell, then create local authentication credentials for your user account:

          gcloud auth application-default login

          You don't need to do this if you're using Cloud Shell.

          If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

        詳情請參閱 Set up authentication for a local development environment

        REST

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

          After installing the Google Cloud CLI, initialize it by running the following command:

          gcloud init

          If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

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

限制

  • 您只能在建立 MIG 時選取可用區。
  • 如果在 MIG 的執行個體範本或具狀態設定中指定資源,但這些資源並非適用於所有選取的區域,則會受到下列限制:

  • 如要將目標分配型態設為 BALANCEDANY_SINGLE_ZONE,請停用主動式執行個體重新分配功能。

  • 如要自動調度區域性 MIG,您必須將群組的 目標分配型態設為 BALANCEDEVEN
  • 如果將目標分配型態設為 BALANCEDANYANY_SINGLE_ZONE,則適用下列限制:

    • 不支援更新至兩個版本Canary
    • 如果整個地區的資源供應量有限,群組可能會在資源已無法使用的區域中,排定 VM 執行個體建立作業。您可以嘗試縮減和擴大群組大小,在其他可用區取得要求的資源。
    • 使用SUBSTITUTE 取代方法的滾動更新作業,會嘗試在過時機器所在的相同區域中建立新的更新執行個體,即使該區域沒有資源可滿足新版本的需求也一樣。如要解決這個問題,可以從受限區域刪除過時的 VM,然後將群組大小增加刪除的 VM 數量。群組會在有可用容量的區域,使用最新範本建立執行個體。
    • 如要將群組的執行個體範本更新為指定資源的範本,但這些資源並非在所有選取的區域中都適用,您必須先從不支援的區域移除代管執行個體,再設定新範本。
  • 如果將目標分配型態設為 ANY_SINGLE_ZONE,且群組在單一區域中已有 VM,則只能在該區域中建立額外 VM。如要使用其他可用區,請先將群組縮減為零部 VM。

  • 如需佈建一組單一租戶 VM,請務必將 MIG 的目標分配型態設為 EVEN。在與 MIG 相同的可用區中建立節點群組,並在 MIG 的執行個體範本中設定 MIG 的節點親和性。

建立具有目標分配形狀的群組

如要建立群組、選取群組的可用區,並設定目標分配形狀,請使用 Google Cloud consolegcloud CLI、Terraform 或 REST

主控台

  1. 前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。

    前往「Instance groups」(執行個體群組) 頁面

  2. 按一下 [Create Instance Group] (建立執行個體群組) 以建立新的執行個體群組。
  3. 選取「New managed instance group」(新增代管執行個體群組選項) 選項:無狀態 (預設) 或有狀態
  4. 指定執行個體群組的名稱,並自行選擇是否提供相關說明。
  5. 為執行個體群組選擇執行個體範本,或建立新的範本。
  6. 指定這個群組中的 VM 數量。對於高可用性工作負載,請記得佈建足夠的 VM,以在發生區域失敗時支援您的應用程式。
  7. 在「Location」(位置) 下,選取 [Multiple zones] (多區域)。
  8. 選擇區域,並選取您要使用的可用區。

    • 如要讓 MIG 使用區域中的所有可用區,請選取所有可用區。
    • 請注意,建立區域 MIG 後,就無法更新 MIG 來使用其他可用區。
  9. 選擇目標分配型態。

    1. 如要選取「Any」(任何) 或「Any single zone」(任何單一可用區),請在「Autoscaling」(自動調度資源) 區段中,按一下「Autoscaling mode」(自動調度資源模式),然後選擇「Delete autoscaling configuration」(刪除自動調度資源設定)
    2. 如要選取「任何單一可用區」或「平衡」,請在「Instance redistribution」(執行個體重新分配) 區段中,取消選取「Allow instance redistribution」(允許重新分配執行個體)
  10. 繼續進行其餘的 MIG 建立程序。

gcloud

使用 gcloud compute instance-groups managed create 指令並加入 --target-distribution-shape 旗標。

gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
    --template TEMPLATE \
    --size SIZE \
    --region REGION \
    --zones ZONES \
    --target-distribution-shape SHAPE

更改下列內容:

  • INSTANCE_GROUP_NAME:執行個體群組的名稱。
  • TEMPLATE:要用於群組的執行個體範本名稱。
  • SIZE:執行個體群組的目標大小。
  • REGION:您要將群組設於哪個區域。
  • ZONES (選用):要在其中部署 VM 執行個體的區域清單。根據預設,Compute Engine 會為您選取三個區域。

    • 如要讓 MIG 使用區域中的所有可用區,請指定所有可用區。您可以使用下列指令,取得地區中的可用區清單:

      gcloud compute zones list --filter=region:REGION --format='list(NAME)'
    • 請注意,建立區域 MIG 後,就無法更新為使用不同可用區。

  • SHAPE:目標分配型態。可為下列其中一個值:

    • even (預設):群組會建立及刪除 VM,以確保所選區域的 VM 數量相同。在EVEN分配方式中,任兩個區域之間的 VM 數量最多只會相差 1 個。建議用於高可用性服務工作負載。
    • balanced:群組會優先在資源可用的區域中建立 VM,同時盡可能在所選區域間平均分配 VM,以盡量減少區域故障的影響。建議用於高可用性服務或批次工作負載。
    • any:群組會選擇區域來建立 VM 執行個體,以滿足目前資源限制內的 VM 要求數量,並盡量使用未使用的區域預留項目。建議用於不需要高可用性的批次工作負載。
    • any-single-zone:群組會在單一可用區內建立所有 VM 執行個體。系統會根據硬體支援、目前的資源和配額可用性,以及相符的預留項目選擇區域。建議搭配 密集執行個體配置政策使用,適用於需要 VM 之間大量通訊的工作負載。

舉例來說,如要建立目標分配型態均衡的區域性 MIG,請將 --target-distribution-shape 旗標設為 balanced

gcloud compute instance-groups managed create example-rmig \
    --template example-template \
    --size 30 \
    --zones us-east1-b,us-east1-c \
    --target-distribution-shape balanced \
    --instance-redistribution-type none

Terraform

如果您尚未建立執行個體範本,指定 MIG 中每個 VM 要使用的機型、開機磁碟映像檔、網路和其他 VM 屬性,請建立執行個體範本

如要建立區域 MIG,請使用 google_compute_region_instance_group_manager 資源

以下範例會建立具有 BALANCED 目標分配型態的區域 MIG。

resource "google_compute_region_instance_group_manager" "default" {
  name                             = "example-rmig"
  region                           = "us-east1"
  distribution_policy_zones        = ["us-east1-b", "us-east1-c"]
  distribution_policy_target_shape = "BALANCED"
  update_policy {
    type                         = "PROACTIVE"
    minimal_action               = "REFRESH"
    instance_redistribution_type = "NONE"
    max_unavailable_fixed        = 3
  }
  target_size        = 30
  base_instance_name = "instance"
  version {
    instance_template = google_compute_instance_template.default.id
  }
}

如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。

REST

呼叫 regionInstanceGroupManagers.insert 方法。在要求主體中加入 distributionPolicy 屬性,並設定其 targetShape 欄位。

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

{
    "name": INSTANCE_GROUP_NAME,
    "instanceTemplate": "global/instanceTemplates/TEMPLATE",
    "targetSize": SIZE,
    "distributionPolicy": {
        "zones": [
            {"zone": "zones/ZONE1"},
            {"zone": "zones/ZONE2"},
            {"zone": "zones/ZONE3"},
        ],
        "targetShape": "SHAPE"
    }
}

更改下列內容:

  • PROJECT_ID:這項要求的專案 ID。
  • REGION:執行個體群組的所在地區。
  • INSTANCE_GROUP_NAME:執行個體群組的名稱。
  • TEMPLATE:要用於執行個體群組的執行個體範本名稱。
  • SIZE:執行個體群組的目標大小。
  • ZONE:要在其中部署 VM 執行個體的區域名稱。
    • 如要讓 MIG 使用區域中的所有可用區,請指定所有可用區。您可以呼叫 regions.get 方法,取得區域中的可用區清單。
    • 請注意,建立區域 MIG 後,就無法更新為使用不同可用區。
  • SHAPE:目標分配型態。可以是下列其中一個值:
    • EVEN (預設):群組會建立及刪除 VM,以確保所選區域的 VM 數量相同。在EVEN分配方式中,任兩個區域之間的 VM 數量最多只會相差 1 個。建議用於高可用性服務工作負載。
    • BALANCED:群組會優先在資源可用的區域中建立 VM,同時盡可能在所選區域間平均分配 VM,以盡量減少區域故障的影響。建議用於高可用性服務或批次工作負載。
    • ANY:群組會選擇區域來建立 VM 執行個體,以滿足目前資源限制內的 VM 要求數量,並盡量使用未使用的區域預留項目。建議用於不需要高可用性的批次工作負載。
    • ANY_SINGLE_ZONE:群組會在單一可用區內建立所有 VM 執行個體。系統會根據硬體支援、目前的資源和配額可用性,以及相符的預留項目選擇區域。建議搭配 密集執行個體配置政策使用,適用於需要 VM 之間大量通訊的工作負載。

變更現有群組的目標分配型態

您可以變更現有區域性 MIG 的目標分配型態,但有下列限制:

  • 如要將目標分配型態變更為 BALANCEDANY_SINGLE_ZONE,請先停用主動式重新分配
  • 如要將目標分配型態變更為 EVEN,且目前執行個體的分配不平均,請先停用主動式重新分配功能。
  • 如果將形狀變更為 EVEN,且想重新啟用主動式重新分配功能,您必須先手動重新平衡群組
  • 如要將目標分配形狀變更為 EVEN,但執行個體範本指定的資源並非所有選取區域都支援,您必須先將群組的執行個體範本更新為所有選取區域都支援的範本。

主控台

  1. 前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。

    前往「Instance groups」(執行個體群組) 頁面

  2. 在清單的「Name」(名稱) 欄底下,按一下要變更目標分配形狀的執行個體群組名稱。
  3. 按一下「編輯」,修改這個代管執行個體群組。
  4. 在「目標分配型態」下方,指定所需型態。
  5. 按一下 [Save] (儲存),套用新範本。

gcloud

使用 gcloud compute instance-groups managed update 指令並加入 --target-distribution-shape 旗標。

gcloud compute instance-groups managed update INSTANCE_GROUP_NAME \
    --target-distribution-shape SHAPE

更改下列內容:

  • INSTANCE_GROUP_NAME:執行個體群組的名稱。
  • SHAPE:目標分配型態。可以是下列其中一個值:
    • even (預設):群組會建立及刪除 VM,以確保所選區域的 VM 數量相同。在EVEN分配方式中,任兩個區域之間的 VM 數量最多只會相差 1 個。建議用於高可用性服務工作負載。
    • balanced:群組會優先在資源可用的區域中建立 VM,同時盡可能在所選區域間平均分配 VM,以盡量減少區域故障的影響。建議用於高可用性服務或批次工作負載。
    • any:群組會選擇區域來建立 VM 執行個體,以滿足目前資源限制內的 VM 要求數量,並盡量使用未使用的區域預留項目。建議用於不需要高可用性的批次工作負載。
    • any-single-zone:群組會在單一可用區內建立所有 VM 執行個體。系統會根據硬體支援、目前的資源和配額可用性,以及相符的預留項目選擇區域。建議搭配 密集執行個體配置政策使用,適用於需要 VM 之間大量通訊的工作負載。

REST

呼叫 regionInstanceGroupManagers.patch 方法。 在要求主體中加入 distributionPolicy 屬性,並設定其 targetShape 欄位。

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME

{
    "distributionPolicy": {
        "targetShape": "SHAPE"
    }
}

更改下列內容:

  • PROJECT_ID:這項要求的專案 ID。
  • REGION:執行個體群組的所在地區。
  • INSTANCE_GROUP_NAME:執行個體群組的名稱。
  • SHAPE:目標分配型態。可以是下列其中一個值:
    • EVEN (預設):群組會建立及刪除 VM,以確保所選區域的 VM 數量相同。在EVEN分配方式中,任兩個區域之間的 VM 數量最多只會相差 1 個。建議用於高可用性服務工作負載。
    • BALANCED:群組會優先在資源可用的區域中建立 VM,同時盡可能在所選區域間平均分配 VM,以盡量減少區域故障的影響。建議用於高可用性服務或批次工作負載。
    • ANY:群組會選擇區域來建立 VM 執行個體,以滿足目前資源限制內的 VM 要求數量,並盡量使用未使用的區域預留項目。建議用於不需要高可用性的批次工作負載。
    • ANY_SINGLE_ZONE:群組會在單一可用區內建立所有 VM 執行個體。系統會根據硬體支援、目前的資源和配額可用性,以及相符的預留項目選擇區域。建議搭配 密集執行個體配置政策使用,適用於需要 VM 之間大量通訊的工作負載。

查看已設定的執行個體分配政策

主控台

  1. 前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。

    前往「Instance groups」(執行個體群組) 頁面

    如果您已擁有執行個體群組,頁面會列出這些群組。
  2. 按一下要檢查的執行個體群組名稱。系統隨即開啟一個頁面,頁面中包含執行個體群組的屬性及群組包含之執行個體的清單。
  3. 按一下「詳細資料」
  4. 在「位置」部分中,尋找「目標分配型態」

gcloud

執行 gcloud compute instance-groups managed describe 指令

gcloud compute instance-groups managed describe INSTANCE_GROUP_NAME \
    --region REGION

這個指令會傳回群組的詳細資料,包括 distributionPolicy.targetShape 欄位:

...
distributionPolicy:
  targetShape: BALANCED
  zones:
  - zone: https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-f
  ...
name: my-group
region: https://www.googleapis.com/compute/v1/projects/my-project/regions/us-central1
...

REST

建構對 regionInstanceGroupManagers.get 方法GET 要求。

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME

更改下列內容:

  • PROJECT_ID:這項要求的專案 ID
  • REGION:執行個體群組的所在地區
  • INSTANCE_GROUP_NAME:執行個體群組的名稱

目標分配型態會傳回到 distributionPolicy.targetShape 欄位。例如:

{
  "name": "my-instance-group",
  "distributionPolicy": {
    "targetShape": "BALANCED",
  },
  "targetSize": 50,
  ...
}

後續步驟