在替代可用區修復 VM

本文說明如何允許區域代管執行個體群組 (MIG) 在替代可用區修復虛擬機器 (VM) 執行個體,前提是 MIG 無法在原始可用區修復 VM。如要進一步瞭解 MIG 中的修復作業,請參閱「關於修復 VM 以提高可用性」一文。

建立區域性 MIG 時,請選取一或多個可用區,MIG 會將 VM 分散到這些可用區。根據預設,如果 MIG 中的 VM 發生故障,MIG 會嘗試在原始可用區修復該 VM。您也可以選擇允許 MIG 在其他選取的可用區修復該 VM,這在 MIG 無法在原始可用區修復 VM 時非常實用。MIG 會根據可用容量和配額選擇替代可用區。

限制

將區域性 MIG 設定為在替代可用區修復 VM 時,適用下列限制:

  • 你必須啟用「維修進度通知」。

  • 系統不支援下列設定的區域性 MIG:

事前準備

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

    選取這個頁面上範例的預計用途分頁:

    控制台

    使用 Google Cloud 控制台存取 Google Cloud 服務和 API 時,不需要設定驗證。

    gcloud

    1. 安裝 Google Cloud CLI。 完成後,執行下列指令來初始化 Google Cloud CLI:

      gcloud init

      如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。

  • 設定預設區域和可用區。
  • Terraform

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

    1. 安裝 Google Cloud CLI。

    2. 如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。

    3. 如果您使用本機殼層,請為使用者帳戶建立本機驗證憑證:

      gcloud auth application-default login

      如果您使用 Cloud Shell,則不需要執行這項操作。

      如果系統傳回驗證錯誤,且您使用外部識別資訊提供者 (IdP),請確認您已 使用聯合身分登入 gcloud CLI。

    詳情請參閱「 設定本機開發環境的驗證機制」。

    REST

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

      安裝 Google Cloud CLI。

      如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。

    詳情請參閱 Google Cloud 驗證說明文件中的「使用 REST 進行驗證」。

允許在替代可用區修復

如要允許 MIG 在替代可用區修復 VM,請選取下列任一選項:

控制台

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

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

  2. 如果您已有 MIG,請按照下列步驟操作:

    1. 按一下 MIG 名稱。
    2. 按一下 [編輯]。
  3. 如果還沒有 MIG,請按照下列步驟操作:

    1. 點選「建立執行個體群組」。
    2. 輸入名稱。
    3. 選取「執行個體範本」。
    4. 在「Location」(位置) 區段中,選取「Multiple zones」(多可用區),然後選取區域和可用區。
    5. 在「目標分配型態」下拉式選單中,選取「平衡」或「不限」。

      • 如果選取「平衡」,請在顯示的對話方塊中,按一下「停用執行個體重新分配」。

      • 如要選取「任何」,請先刪除自動調度資源設定。如要刪除自動調度資源,請在「Autoscaling mode」(自動調度資源模式) 下拉式選單中,按一下「Delete autoscaling configuration」(刪除自動調度資源設定)。

  4. 在「VM instance lifecycle」(VM 執行個體生命週期) 部分,確認下列欄位已設為以下值:

    1. 「失敗時的預設動作」清單設為「修復執行個體」。

    2. 「VM 執行個體修復期間的更新設定」設為「更新執行個體設定」。

    3. 在「在 VM 執行個體修復期間變更可用區」部分,選取「允許在替代可用區修復 VM」核取方塊。

  5. 其他設定可以保留預設值,也可以修改欄位。

  6. 完成後,請按一下現有 MIG 的「儲存」或新 MIG 的「建立」。

gcloud

如要設定現有 MIG 在替代可用區修復 VM,請使用 update 指令:

gcloud compute instance-groups managed update MIG_NAME \
    --on-repair-allow-changing-zone=YES \
    --force-update-on-repair \
    --region=REGION

如要建立可在替代可用區修復 VM 的 MIG,請使用 create 指令:

gcloud compute instance-groups managed create MIG_NAME \
    --template=INSTANCE_TEMPLATE_URL \
    --size=SIZE \
    --zones=ZONES \
    --target-distribution-shape=SHAPE \
    --instance-redistribution-type=none \
    --on-repair-allow-changing-zone=YES \
    --force-update-on-repair

更改下列內容:

  • MIG_NAME:MIG 的名稱。
  • INSTANCE_TEMPLATE_URL:您要用來在代管執行個體群組中建立執行個體的執行個體範本網址。網址可以包含執行個體範本的 ID 或名稱。請指定下列其中一個值:
    • 如果是區域執行個體範本:projects/PROJECT_ID/regions/REGION/instanceTemplates/INSTANCE_TEMPLATE_ID
    • 全域執行個體範本:INSTANCE_TEMPLATE_ID
  • SIZE:MIG 的目標大小。
  • ZONES:要在 MIG 中建立 VM 的區域可用區清單。
  • SHAPE:目標分配型態。這個值可以是 balanced 或 any。
  • REGION:MIG 所在的區域。

Terraform

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

如要建立可在替代可用區修復 VM 的 MIG,請使用 google_compute_region_instance_group_manager 資源。

resource "google_compute_region_instance_group_manager" "default" {
  provider           = google-beta
  name               = "example-rmig"
  base_instance_name = "example-rmig-instance"
  region             = "us-central1"

  target_size                      = 3
  distribution_policy_target_shape = "BALANCED"

  version {
    instance_template = google_compute_instance_template.default.id
  }

  instance_lifecycle_policy {
    default_action_on_failure = "REPAIR"
    force_update_on_repair    = "YES"
    on_repair {
      allow_changing_zone = "YES"
    }
  }

  update_policy {
    instance_redistribution_type = "NONE"
    type                         = "OPPORTUNISTIC"
    minimal_action               = "REPLACE"
    max_surge_fixed              = 0
    max_unavailable_fixed        = 6
  }
}

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

REST

如要設定現有 MIG,以便在替代可用區修復 VM,請使用 regionInstanceGroupManagers.patch 方法:

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/MIG_NAME
{
    "instanceLifecyclePolicy": {
      "onRepair": {
        "allowChangingZone": "YES"
      },
      "forceUpdateOnRepair": "YES"
    }
}

如要建立可在替代可用區修復 VM 的 MIG,請使用 regionInstanceGroupManagers.insert 方法:

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

{
  "name": "MIG_NAME",
  "instanceTemplate": "INSTANCE_TEMPLATE_URL",
  "targetSize": SIZE,
  "distributionPolicy": {
    "targetShape": "SHAPE"
  }
  "updatePolicy": {
    "instanceRedistributionType": none
  }
  "instanceLifecyclePolicy": {
    "forceUpdateOnRepair": "YES",
    "onRepair": {
      "allowChangingZone": "YES"
    }
  }
}

更改下列內容:

  • PROJECT_ID:您的專案 ID。
  • REGION:MIG 所在的區域。
  • MIG_NAME:MIG 的名稱。
  • INSTANCE_TEMPLATE_URL:您要用來在代管執行個體群組中建立執行個體的執行個體範本網址。網址可以包含執行個體範本的 ID 或名稱。請指定下列其中一個值:
    • 如果是區域執行個體範本:projects/PROJECT_ID/regions/REGION/instanceTemplates/INSTANCE_TEMPLATE_ID
    • 全域執行個體範本:INSTANCE_TEMPLATE_ID
  • SIZE:MIG 的目標大小。
  • SHAPE:目標分配型態。這個值可以是 BALANCED 或 ANY。

禁止在替代可用區修復

如果您已將 MIG 設為在替代可用區修復 VM,則可以還原預設設定,讓 MIG 在原始可用區修復 VM。

如要禁止在替代可用區修復,請選取下列任一選項:

控制台

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

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

  2. 按一下 MIG 名稱。

  3. 按一下 [編輯]。

  4. 前往「VM 執行個體生命週期」部分。

  5. 在「在修復 VM 執行個體時變更可用區」部分,取消勾選「允許在替代可用區修復 VM」核取方塊。

  6. 按一下 [儲存]。

gcloud

如要禁止在替代可用區修復,請使用 update 指令:

gcloud compute instance-groups managed update MIG_NAME \
    --on-repair-allow-changing-zone=NO \
    --region=REGION

更改下列內容:

  • MIG_NAME:MIG 的名稱。
  • REGION:MIG 所在的區域。

REST

如要禁止在替代可用區修復 VM,請使用 regionInstanceGroupManagers.patch 方法:

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/MIG_NAME
{
    "instanceLifecyclePolicy": {
      "onRepair": {
        "allowChangingZone": "NO"
      }
    }
}

更改下列內容:

  • PROJECT_ID:您的專案 ID。
  • REGION:MIG 所在的區域。
  • MIG_NAME:MIG 的名稱。

後續步驟