在區域 MIG 中停用及重新啟用主動式 VM 重新分配功能

在區域代管執行個體群組 (MIG) 中,如要確保區域內所選可用區的虛擬機器 (VM) 執行個體數量一致,請使用主動重新分配執行個體。這個設定選項可確保應用程式在可用區層級發生故障時,仍能維持最高可用性。

區域性 MIG 預設會啟用主動式執行個體重新分配功能。 關閉主動式執行個體重新分配功能後,群組不會嘗試主動將 VM 重新分配至各個可用區。如果您有以下需求,就很適合關閉主動式執行個體重新分配功能:

  • 刪除或捨棄群組中的 VM,不會影響其他正在執行的 VM。舉例來說,您可以在工作完成後刪除批次 worker VM,不會影響其他工作者。
  • 保護具有有狀態工作負載的 VM,避免因主動重新分配而遭到自動刪除。
  • 將 MIG 的目標分配型態設為 BALANCED 或 ANY_SINGLE_ZONE。

建立區域 MIG 時,您可以停用主動式執行個體重新分配功能。您也可以為現有的區域性 MIG 啟用或停用這項功能。

事前準備

  • 如果尚未設定驗證,請先完成設定。 驗證可確認您的身分,以便存取 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 進行驗證」。

建立群組並停用主動式執行個體重新分配功能

如要建立停用主動執行個體重新分配功能的區域 MIG,請使用 Google Cloud console、gcloud CLI、Terraform 或 REST。

控制台

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

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

  2. 按一下 [Create Instance Group] (建立執行個體群組) 以建立新的執行個體群組。
  3. 指定執行個體群組的名稱,並自行選擇是否提供相關說明。
  4. 為執行個體群組選擇執行個體範本,或建立新的範本。
  5. 指定這個群組中的 VM 數量。對於高可用性工作負載,請務必佈建充足的 VM,以便在可用區失效時維持應用程式運作。
  6. 在「Location」(位置) 下,選取 [Multiple zones] (多區域)。
  7. 選擇區域,並選取您要使用的可用區。
  8. 如要停用主動式執行個體重新分配,請在「Instance redistribution」(執行個體重新分配) 之下,取消選取「Allow instance redistribution」(允許重新分配執行個體) 核取方塊。
  9. 繼續進行其餘的 MIG 建立程序。

gcloud

如要建立新的區域 MIG,但不主動重新分配執行個體,請使用 gcloud compute instance-groups managed create 指令,並將 --instance-redistribution-type 旗標設為 NONE。

gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
    --template INSTANCE_TEMPLATE_NAME \
    --size TARGET_SIZE \
    --zones ZONES \
    --instance-redistribution-type NONE

更改下列內容:

  • INSTANCE_GROUP_NAME:MIG 的名稱
  • INSTANCE_TEMPLATE_NAME:要用於群組的執行個體範本名稱
  • TARGET_SIZE:群組的目標大小
  • ZONES:要在單一區域中部署 VM 的可用區清單

例如:

gcloud compute instance-groups managed create example-rmig \
    --template example-template \
    --size 30 \
    --zones us-east1-b,us-east1-c \
    --instance-redistribution-type NONE

Terraform

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

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

如要在區域 MIG 中停用主動式執行個體重新分配功能,請加入 update_policy 區塊,並將 instance_redistribution_type 欄位設為 NONE。

resource "google_compute_region_instance_group_manager" "default" {
  name                      = "example-rmig"
  region                    = "us-east1"
  distribution_policy_zones = ["us-east1-b", "us-east1-c"]
  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

如要建立不具自動調度資源功能的區域性 MIG,且不主動重新分配執行個體,請對 regionInstanceGroupManagers.insert 方法發出 POST 要求。在要求主體中加入 updatePolicy 屬性,並將 instanceRedistributionType 欄位設為 NONE。

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

{
    "name": "INSTANCE_GROUP_NAME",
    "instanceTemplate": "global/instanceTemplates/INSTANCE_TEMPLATE_NAME",
    "targetSize": TARGET_SIZE,
    "distributionPolicy": {
        "zones": [
            {"zone": "zones/ZONE"},
            {"zone": "zones/ZONE"}
        ]
    },
    "updatePolicy": {
        "instanceRedistributionType": "NONE"
    }
}

更改下列內容:

  • PROJECT_ID:這項要求的專案 ID
  • REGION:執行個體群組的區域
  • INSTANCE_GROUP_NAME:MIG 的名稱
  • INSTANCE_TEMPLATE_NAME:要用於群組的執行個體範本名稱
  • TARGET_SIZE:執行個體群組的目標大小
  • ZONE:要在單一區域中部署 VM 的可用區名稱

停用主動式執行個體重新分配功能

如要停用或重新啟用主動式執行個體重新分配功能,請使用Google Cloud console、gcloud CLI 或 REST。

控制台

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

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

  2. 在清單的「Name」(名稱) 欄中,按一下要修改的執行個體群組名稱。
  3. 按一下「編輯」,修改這個代管執行個體群組。
  4. 按一下「地區」展開該部分。
  5. 在「Instance redistribution」(執行個體重新分配) 部分,取消選取「Allow instance redistribution」(允許執行個體重新分配) 核取方塊。
  6. 按一下 [儲存]。

gcloud

如要關閉主動式執行個體重新分配功能,請使用 compute instance-groups managed update 指令,並將 --instance-redistribution-type 旗標設為 NONE,如下所示:

gcloud compute instance-groups managed update INSTANCE_GROUP_NAME \
    --instance-redistribution-type NONE \
    --region REGION

更改下列內容:

  • INSTANCE_GROUP_NAME:MIG 的名稱
  • REGION:執行個體群組的區域

REST

如要關閉主動式執行個體重新分配功能,請使用 regionInstanceGroupManagers.patch 方法,並將 instanceRedistributionType 欄位設為 NONE,如下所示:

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME
  {
     "updatePolicy": {
        "instanceRedistributionType": "NONE"
     }
  }

更改下列內容:

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

啟用主動式執行個體重新分配功能

如要開啟主動式執行個體重新分配功能,請使用與關閉主動式執行個體重新分配功能類似的指令,但將執行個體重新分配類型設為 PROACTIVE。

如果您手動刪除或捨棄部分代管執行個體,導致 VM 在區域中分配不均,則必須先手動重新平衡群組,才能重新啟用主動式執行個體重新分配功能。任兩個可用區之間的 VM 數量差異不得超過 1 個 VM。

如果 VM 在各個可用區的分配不均 (兩個可用區之間的 VM 數量差異為 2 個以上),區域性 MIG 就不允許啟用主動式執行個體重新分配功能。這是為了避免系統為了達到平均分配,而從 VM 較多的可用區中自動刪除 VM。

後續步驟