在 MIG 中設定有狀態 IP 位址


代管執行個體群組 (MIG) 中設定有狀態 IP 位址,可確保系統在自動修復、更新及重新建立群組中的 VM 執行個體時,保留 IP 位址。

您可以保留內部和外部 IPv4 位址。您可以設定自動指派 IP 位址,也可以為 MIG 中的每個 VM 執行個體指派特定 IP 位址。

事前準備

限制

具有有狀態 IP 位址的 MIG 有下列限制:

  • 系統不支援 IPv6 位址。

  • 沒有子網路的網路 (例如舊版網路) 不支援內部 IP 位址。

有狀態設定的 MIG (有狀態的 MIG) 有下列限制:

  • 如果 MIG 有有狀態設定,就無法使用自動調度資源功能。
  • 如果您想使用自動滾動更新,請務必將替換方法設為 RECREATE
  • 針對有狀態的地區 MIG,您必須停用主動式重新分配功能 (將重新分配類型設為 NONE),才能防止自動跨區重新分配功能刪除有狀態的執行個體。
  • 如果您使用所有執行個體設定覆寫執行個體範本屬性,就無法在任何個別執行個體設定中指定這些屬性,同時在群組的所有執行個體設定中指定這些屬性。

定價

系統會依據網路定價收取外部 IP 位址費用。

使用有狀態 IP 位址的時機

在下列情況下,保留執行個體的 IP 位址會很有幫助:

  • 應用程式需要在 IP 位址指派後保持靜態狀態,例如 Kafka。
  • 應用程式的設定取決於特定 IP 位址,例如 DNS 伺服器。
  • 使用者 (包括其他應用程式) 會透過專屬的靜態 IP 位址存取伺服器,例如檔案伺服器。
  • 您需要在不變更網路設定的情況下遷移現有工作負載。

為群組中的所有 VM 設定有狀態 IP 位址

在下列情況下,為 MIG 中的所有 VM 設定有狀態 IP 位址會很實用:

  • 應用程式需要在 IP 位址指派後保持靜態。但應用程式不需要為特定執行個體指派特定 IP 位址。建立執行個體時,系統會自動指派 IP 位址。
  • 使用者 (包括其他應用程式) 會透過您在部署應用程式後發布的靜態 IP 位址存取伺服器。
  • 您想在執行個體建立時自動指派的靜態 IP 位址,同時享有執行個體自動修復和自動更新的優點。

如要為群組中的現有和未來 VM 執行個體維護靜態內部或外部 IP 位址,請在有狀態政策中進行設定。

將有狀態 IP 位址設定新增至群組的有狀態政策時,MIG 會以以下方式套用設定:

  • 對於新執行個體,MIG 會自動指派及保留靜態 IP 位址。
  • 針對現有執行個體,MIG 會保留對應的靜態 IP 位址,將使用中的臨時內部外部 IP 位址升級為靜態位址。
  • 針對沒有外部 IP 位址的現有執行個體,MIG 會指派及保留靜態 IP 位址,並在對應的網路介面中新增存取權設定,並使用下列預設值:

    "accessConfigs": [
      {
        "kind": "compute#accessConfig",
        "name": "External NAT",
        "natIP": "XX.XX.XX.XX",
        "networkTier": "PREMIUM",
        "type": "ONE_TO_ONE_NAT"
      }
    ]
    

如要預留靜態 IP 位址,MIG 會建立位址資源。

在建立 MIG 時設定有狀態 IP 位址

使用 Google Cloud 控制台、gcloud CLI、Terraform 或 REST。

主控台

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

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

  2. 選取您的專案並點選 [繼續]

  3. 點選「建立執行個體群組」

  4. 選取「New managed instance group (stateful)」(新增代管執行個體群組 (有狀態))

  5. 指定執行個體群組的 [名稱]

  6. 選取執行個體範本

  7. 在「Number of instances」(執行個體數) 底下,指定您希望這個代管執行個體群組包含的執行個體數。

  8. 在「有狀態設定」下方,展開要設為有狀態的「外部 IP」和「內部 IP」。

    1. 在「有狀態」下方,選取「是」
    2. 從「On permanent instance deletion」(永久刪除執行個體時) 下拉式選單中,選取刪除 VM 執行個體時要對有狀態 IP 位址執行的動作。可用的選項如下:
      • Detach IP:(預設) 在刪除執行個體時取消指派地址,並保留該地址。
      • 刪除 IP:當從執行個體群組中永久刪除執行個體時,刪除靜態 IP 位址保留值,例如手動刪除執行個體或減少群組大小。
    3. 完成有狀態設定後,請按一下「完成」
  9. 按一下 [建立]。

gcloud

建立 MIG 時,如要指定執行個體範本中哪些網路介面中的 IP 位址應具有狀態,請搭配 gcloud compute instance-groups managed create 指令使用下列一或多個旗標:

  • --stateful-internal-ip 標示特定網路介面的內部 IP 位址為有狀態。
  • --stateful-external-ip,將特定網路介面的外部 IP 位址標示為有狀態。
gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
    --template INSTANCE_TEMPLATE \
    --size SIZE \
    --instance-redistribution-type NONE \
    --stateful-internal-ip [enabled | interface-name=NI_NAME][,auto-delete=DELETE_RULE] \
    --stateful-external-ip [enabled | interface-name=NI_NAME][,auto-delete=DELETE_RULE]

更改下列內容:

  • INSTANCE_GROUP_NAME:要建立的 MIG 名稱。
  • INSTANCE_TEMPLATE:建立新執行個體時要使用的執行個體範本名稱。
  • SIZE:這個群組中所需的初始執行個體數量。
  • NI_NAME:(選填)網路介面名稱。如果未提供,則必須使用 enabled 選項,並預設使用名為 nic0 的主要網路介面。如果您有多個網路介面,則可為每個網路介面中的每個 IP 指定此標記。
  • DELETE_RULE:(選填)當 VM 執行個體永久刪除時,應對相關靜態 Address 資源採取的動作。可用的選項如下:

    • never:(預設)。請勿刪除靜態 IP 位址。請改為在刪除執行個體時取消指派地址,並保留該地址。
    • on-permanent-instance-deletion:當從執行個體群組中永久刪除執行個體時,刪除靜態 IP 位址保留值,例如手動刪除執行個體或減少群組大小。

    無論刪除規則的值為何,群組一律會在執行個體自動修復、更新和重新建立作業時保留有狀態 IP 位址。

示例

您需要建立地區性的 VM 執行個體群組,並為預設和自訂網路提供靜態內部 IP 位址,以及僅為預設網路提供靜態外部 IP 位址。您希望系統自動指派地址,但需要在執行個體自動修復、更新和重新建立事件中保留這些地址。您可以在名為 node-template 的執行個體範本中儲存執行個體設定。

如要建立群組,請執行下列指令:

gcloud compute instance-groups managed create example-group \
    --region us-east1 \
    --template node-template \
    --base-instance-name node \
    --instance-redistribution-type NONE \
    --size 3 \
    --stateful-internal-ip interface-name=nic0,auto-delete=on-permanent-instance-deletion
    --stateful-internal-ip interface-name=nic1,auto-delete=on-permanent-instance-deletion
    --stateful-external-ip enabled,auto-delete=on-permanent-instance-deletion

群組中所有執行個體的 nic0nic1 網路介面內部 IP 和 nic0 網路介面中的外部 IP 都設為有狀態。群組會自動為每個執行個體保留靜態內部和外部 IP 位址。由於 auto-delete 標記已設為 on-permanent-instance-deletion,因此當您刪除相關聯的執行個體或整個群組時,群組會自動刪除靜態 IP 位址預留項目。

如要驗證 nic0nic1 網路介面中的內部 IP 和 nic0 網路介面中的外部 IP 是否已設為有狀態,請執行下列指令:

gcloud compute instance-groups managed describe example-group \
    --zone us-east1-c

輸出內容會類似以下內容:

baseInstanceName: node
...
name: example-group
...
statefulPolicy:
  preservedState:
    internalIPs:
      nic0:
        autoDelete: ON_PERMANENT_INSTANCE_DELETION
      nic1:
        autoDelete: ON_PERMANENT_INSTANCE_DELETION
    externalIPs:
      nic0:
        autoDelete: ON_PERMANENT_INSTANCE_DELETION
...

您可以看到,群組的狀態資料政策會將 nic0nic1 網路介面中的內部 IP 和 nic0 網路介面中的外部 IP 宣告為有狀態,並設定刪除永久執行個體時刪除靜態 IP 保留資料的規則。

Terraform

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

建立 MIG 時,如要指定哪些網路介面中的 IP 位址應為有狀態,請使用一或多個下列區塊:

  • stateful_internal_ip 標示特定網路介面的內部 IP 位址為有狀態。
  • stateful_external_ip 標記特定網路介面的外部 IP 位址為有狀態。

以下範例會在建立區域 MIG 時設定有狀態 IP 位址。如要進一步瞭解範例中使用的資源,請參閱 google_compute_region_instance_group_manager 資源

resource "google_compute_region_instance_group_manager" "default" {
  name               = "example-group"
  base_instance_name = "node"
  target_size        = 3
  region             = "us-east1"

  version {
    instance_template = google_compute_instance_template.default.id
    name              = "primary"
  }
  update_policy {
    type                         = "OPPORTUNISTIC"
    minimal_action               = "REFRESH"
    instance_redistribution_type = "NONE"
    max_unavailable_fixed        = 3
  }
  stateful_internal_ip {
    interface_name = "nic0"
    delete_rule    = "ON_PERMANENT_INSTANCE_DELETION"
  }
  stateful_internal_ip {
    interface_name = "nic1"
    delete_rule    = "ON_PERMANENT_INSTANCE_DELETION"
  }
  stateful_external_ip {
    interface_name = "nic0"
    delete_rule    = "ON_PERMANENT_INSTANCE_DELETION"
  }
}

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

REST

建立 MIG 時,如要指定執行個體範本中哪些網路介面應具有狀態,請在 instanceGroupManagers.insertregionInstanceGroupManagers.insert 方法的 statefulPolicy 欄位中加入這些介面:

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

{
  "name": "INSTANCE_GROUP_NAME",
  "versions": [
    {
      "instanceTemplate": "global/instanceTemplates/INSTANCE_TEMPLATE"
    }
  ],
  "targetSize": SIZE,
  "statefulPolicy": {
    "preservedState": {
      "internalIPs": {
        "NI_NAME": {"autoDelete": "DELETE_RULE" }
      },
      "externalIPs": {
        "NI_NAME": {"autoDelete": "DELETE_RULE" }
      }
    }
  },
  "updatePolicy": {
    "instanceRedistributionType": "NONE"
  }
}

更改下列內容:

  • PROJECT:要求的專案 ID。
  • REGION:如果是區域 MIG,則是群組所在的區域。如果是區域 MIG,請將 regions/REGION 替換為 zones/ZONE,並指定 MIG 所在的區域。
  • NAME:要建立的 MIG 名稱。
  • INSTANCE_TEMPLATE:建立新執行個體時要使用的執行個體範本名稱。
  • SIZE:這個群組中所需的初始執行個體數量。
  • NI_NAME:(選填)網路介面名稱。如果未提供,則必須使用 enabled 選項,並預設使用名為 nic0 的主要網路介面。如果您有多個網路介面,可以指定多個 NI_NAMES
  • DELETE_RULE:(選用) 在永久刪除 VM 執行個體時,規定相關聯的靜態 Address 資源應採取的動作。可用的選項如下:

    • NEVER:(預設) 永不刪除靜態 IP 位址。請改為在刪除執行個體時取消指派地址,並保留該地址。
    • ON_PERMANENT_INSTANCE_DELETION:當從執行個體群組中永久刪除執行個體時,刪除靜態 IP 位址保留值,例如手動刪除執行個體或減少群組大小。

    無論刪除規則的值為何,群組一律會在執行個體自動修復、更新和重新建立作業時保留有狀態 IP 位址。

示例

您需要建立地區性的 VM 執行個體群組,並為預設和自訂網路提供靜態內部 IP 位址,以及僅為預設網路提供靜態外部 IP 位址。您希望系統自動指派地址,但需要在執行個體自動修復、更新和重新建立事件中保留這些地址。您可以在名為 node-template 的執行個體範本中儲存執行個體設定。

如要建立群組,請使用 regionInstanceGroupManagers.insert 方法:

POST https://compute.googleapis.com/compute/v1/projects/example-project/regions/us-east1/instanceGroupManagers

{
  "name": "example-group",
  "baseInstanceName": "node",
  "versions": [
    {
      "instanceTemplate": "global/instanceTemplates/node-template"
    }
  ],
  "targetSize": 3,
  "statefulPolicy": {
    "preservedState": {
      "internalIPs": {
        "nic0": {"autoDelete": "ON_PERMANENT_INSTANCE_DELETION" },
        "nic1": {"autoDelete": "ON_PERMANENT_INSTANCE_DELETION" }
      }
      "externalIPs": {
        "nic0": {"autoDelete": "ON_PERMANENT_INSTANCE_DELETION" }
      }
    }
  },
  "updatePolicy": {
    "instanceRedistributionType": "NONE"
  }
}

群組中所有執行個體的 nic0nic1 網路介面內部 IP 和 nic0 網路介面中的外部 IP 都會設為有狀態。群組會自動為每個執行個體保留靜態內部和外部 IP 位址。由於 auto-delete 欄位已設為 ON_PERMANENT_INSTANCE_DELETION,因此當您刪除相關聯的執行個體或整個群組時,群組會自動刪除靜態 IP 位址預留項目。

使用 regionInstanceGroupManagers.get 方法驗證 nic0nic1 網路介面中的內部 IP 和 nic0 網路介面中的外部 IP,是否已在新的 regionInstanceGroupManagers 資源有狀態政策中設定:

GET https://compute.googleapis.com/compute/v1/projects/example-project/regions/us-east1/instanceGroupManagers/example-group

回應包含已設定的有狀態政策:

{
  "name": "example-group",
  "baseInstanceName": "node",
  ...
  "statefulPolicy": {
    "preservedState": {
      "internalIPs": {
        "nic0": {"autoDelete": "ON_PERMANENT_INSTANCE_DELETION" },
        "nic1": {"autoDelete": "ON_PERMANENT_INSTANCE_DELETION" }
      }
      "externalIPs": {
        "nic0": {"autoDelete": "ON_PERMANENT_INSTANCE_DELETION" }
      }
    }
  }
  ...
}

您可以看到,群組的有狀態政策會將 nic0nic1 網路介面中的內部 IP 和 nic0 網路介面中的外部 IP 宣告為有狀態,並透過規則在永久刪除執行個體時刪除相關的靜態 IP 位址保留項目。

設定及更新現有 MIG 中 IP 位址的有狀態設定

如果您在無狀態 MIG (沒有任何有狀態設定的 MIG) 上執行工作負載,且工作負載需要靜態 IP 位址,您可以將已指派給受管理 VM 執行個體的 IP 位址設定為有狀態。這樣可確保在執行個體自動修復、更新和重新建立事件中,現有 VM 的 IP 位址會保留。您可以選擇在刪除執行個體後保留靜態 IP 位址保留項目。

您可以在現有 MIG 中為 IP 位址設定有狀態政策,以便執行下列操作:

  • 針對群組中所有現有和日後新增的執行個體,將 IP 位址設為具狀態。這會將所有現有執行個體的對應臨時 IP 位址升級為靜態 IP 位址。
  • 更新 IP 位址的現有有狀態設定。

MIG 會自動且非同步地將有狀態政策中的更新設定套用至所有執行個體。在具狀態政策中更新 IP 位址設定不會中斷執行中的 VM 執行個體。如需進一步瞭解,請參閱套用有狀態政策更新

主控台

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

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

  2. 按一下要指定有狀態 IP 位址的執行個體群組名稱。

  3. 按一下「編輯」,修改代管執行個體群組。

  4. 在「有狀態設定」下方,展開您要設為有狀態的外部 IP 和內部 IP。

    1. 在「有狀態」下方,選取「是」
    2. 從「On permanent instance deletion」(永久刪除執行個體時) 下拉式選單中,選取刪除 VM 執行個體時要對有狀態 IP 位址執行的動作。可用的選項如下:
      • Detach IP:(預設) 在刪除執行個體時取消指派地址,並保留該地址。
      • 刪除 IP:當從執行個體群組中永久刪除執行個體時,刪除靜態 IP 位址預留空間,例如手動刪除執行個體或減少群組大小。
    3. 更新具狀態設定後,請按一下「完成」
    4. 按一下「儲存」,完成更新。

gcloud

如要指定哪些 IP 位址應具有狀態,或更新現有 MIG 的狀態 IP 設定,請使用 gcloud compute instance-groups managed update 指令搭配一或多個 --stateful-internal-ip--stateful-external-ip 旗標。

gcloud compute instance-groups managed update INSTANCE_GROUP_NAME \
    --stateful-internal-ip [enabled | interface-name=NI_NAME][,auto-delete=DELETE_RULE] \
    --stateful-external-ip [enabled | interface-name=NI_NAME][,auto-delete=DELETE_RULE]

更改下列內容:

  • INSTANCE_GROUP_NAME:要更新的 MIG 名稱。
  • NI_NAME:(選填)網路介面名稱。如果未提供,則必須使用 enabled 選項,並預設使用名為 nic0 的主要網路介面。如果您有多個網路介面,則可為每個網路介面中的每個 IP 指定此標記。
  • DELETE_RULE:(選填)當 VM 執行個體永久刪除時,應對相關靜態 Address 資源採取的動作。可用的選項如下:

    • never:(預設)。請勿刪除靜態 IP 位址。請改為在刪除執行個體時取消指派地址,並保留該地址。
    • on-permanent-instance-deletion:當從執行個體群組中永久刪除執行個體時,刪除靜態 IP 位址保留值,例如手動刪除執行個體或減少群組大小。

    無論刪除規則的值為何,群組一律會在執行個體自動修復、更新和重新建立作業時保留有狀態 IP 位址。

如果已針對特定網路介面,在有狀態政策中設定指定的 IP 位址,則這項指令會更新設定。

示例

您必須透過靜態外部 IP 位址,將在名為 example-fs-group 的有狀態 MIG 上執行的檔案伺服器公開給外部使用者。群組中的執行個體具有臨時外部 IP 位址。您必須確保 IP 位址在執行個體自動修復和更新時保留,以便外部使用者能透過已發布的 IP 位址持續存取伺服器。您也必須保留 IP 位址,以便在意外刪除群組時維持連續性。

請使用下列指令更新 MIG,將外部 IP 位址定義為有狀態:

gcloud compute instance-groups managed update example-fs-group \
    --stateful-external-ip enabled

因此,群組會以非同步方式,將 nic0 網路介面中的臨時外部 IP 位址升級為所有受管理執行個體的靜態 IP 位址。

外部 IP 位址現在會在執行個體自動修復、更新和重新建立事件中保留。由於未指定的 auto-delete 規則預設為 never,因此系統會在刪除執行個體時取消指派並保留相關的靜態 IP 位址預留。

您可以執行 gcloud compute instance-groups managed describe example-fs-group 指令,驗證有狀態外部 IP 是否已在有狀態政策中設定。

REST

如要指定哪些 IP 位址應為有狀態的,或更新現有 MIG 的有狀態 IP 設定,請使用 instanceGroupManagers.patchregionInstanceGroupManagers.patch 方法:

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

{
  "statefulPolicy": {
    "preservedState": {
      "internalIPs": {
        "NI_NAME": {"autoDelete": "DELETE_RULE" }
      },
      "externalIPs": {
        "NI_NAME": {"autoDelete": "DELETE_RULE" }
      }
    }
  }
}

更改下列內容:

  • PROJECT:要求的專案 ID。
  • REGION:如果是區域 MIG,則是群組所在的區域。如果是區域 MIG,請將 regions/REGION 替換為 zones/ZONE,並指定 MIG 所在的區域。
  • NAME:要建立的 MIG 名稱。
  • NI_NAME:(必填) 網路介面名稱。主要網路介面名稱為 nic0。如果您有多個網路介面,可以指定多個 NI_NAMES
  • DELETE_RULE:(選用) 在永久刪除 VM 執行個體時,規定相關聯的靜態 Address 資源應採取的動作。可用的選項如下:

    • NEVER:(預設) 永不刪除靜態 IP 位址。請改為在刪除執行個體時取消指派地址,並保留該地址。
    • ON_PERMANENT_INSTANCE_DELETION:當從執行個體群組中永久刪除執行個體時,刪除靜態 IP 位址保留值,例如手動刪除執行個體或減少群組大小。

    無論刪除規則的值為何,群組一律會在執行個體自動修復、更新和重新建立作業時保留有狀態 IP 位址。

如果狀態保留政策中已設定指定的 IP 位址,此方法會修補設定。

示例

您必須透過靜態外部 IP 位址,將在名為 example-fs-group 的有狀態 MIG 上執行的檔案伺服器公開給外部使用者。群組中的執行個體具有臨時外部 IP 位址。您必須確保 IP 位址在執行個體自動修復及更新時保留,以便外部使用者可透過已發布網路介面持續存取伺服器。您也必須保留 IP 位址,以便在意外刪除群組時維持連續性。

修正 MIG,將外部 IP 位址定義為有狀態:

PATCH https://compute.googleapis.com/compute/v1/projects/example-project/regions/us-east1/instanceGroupManagers/example-fs-group

{
  "statefulPolicy": {
    "preservedState": {
      "externalIPs": {
        "nic0": {"autoDelete": "NEVER" }
      }
    }
  }
}

因此,群組會將 nic0 網路介面中的臨時外部 IP 位址,以非同步方式升級為所有受管理執行個體的靜態 IP 位址。

外部 IP 位址現在會在執行個體自動修復、更新和重新建立事件中保留。由於 autoDelete 規則已設為 NEVER,因此在刪除執行個體時,系統會取消保留相關的靜態 IP 位址預留。

查看 regionInstanceGroupManagers.get 方法傳回的 regionInstanceGroupManagers 資源,確認外部 IP 位址是否已在有狀態政策中設定。

將先前具狀態的 IP 位址宣告為無狀態

您可能需要將有狀態 IP 位址設定為臨時狀態,例如基於下列原因:

  • 您重新架構應用程式,不再依賴靜態 IP 位址。
  • 您誤將 IP 設定為有狀態,並想將其還原。

您可以從群組的有狀態政策中移除有狀態 IP 設定,為所有受管理的執行個體宣告特定網路介面中的臨時 IP 位址。

從有狀態政策中移除有狀態 IP 設定時,MIG 會自動且非同步地從群組中所有例項的保留狀態中移除 IP 位址。這項作業不會中斷執行中的 VM 執行個體。這些 IP 位址仍會在執行個體上保持有效,但不再具有狀態。重新建立或更新執行個體,或執行個體進行自動修復時,MIG 會取消指派相關聯的靜態 IP 位址,並自動指派臨時位址。如果您不再需要保留靜態外部 IP 位址預留,現在可以釋出

如需更多資訊,請參閱下列文件:

主控台

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

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

  2. 按一下要移除 IP 位址狀態設定的執行個體群組名稱。

  3. 按一下「編輯」,修改代管執行個體群組。

  4. 在「有狀態設定」下方,展開要設為無狀態的「外部 IP」和「內部 IP」。

    1. 將「有狀態」選項變更為「否」
    2. 按一下 [完成]
  5. 完成變更後,按一下「儲存」

gcloud

如要指定要將哪些 IP 位址從 MIG 的有狀態政策設為臨時狀態,請搭配 gcloud compute instance-groups managed update 指令使用 --remove-stateful-internal-ips--remove-stateful-external-ips 標記:

gcloud compute instance-groups managed update INSTANCE_GROUP_NAME \
    --remove-stateful-internal-ips NI_NAME[,NI_NAME,...] \
    --remove-stateful-external-ips NI_NAME[,NI_NAME,...]

更改下列內容:

  • INSTANCE_GROUP_NAME:要更新的 MIG 名稱。
  • NI_NAME:(必要)網路介面名稱。主要網路介面名稱為 nic0。如果您有多個網路介面,可以指定多個 NI_NAMES

如果您需要將名為 nic0 的預設主要網路介面中的有狀態 IP 位址轉換為臨時 IP 位址,也可以使用下列指令:

gcloud compute instance-groups managed update INSTANCE_GROUP_NAME \
    --stateful-internal-ip disabled \
    --stateful-external-ip disabled

示例

您的應用程式已透過名為 example-group 的 MIG 中 VM 執行個體的已發布靜態外部 IP 位址,向使用者公開。您已在 MIG 前部署負載平衡器,並透過負載平衡器將流量路由至受管理的 VM。您不再需要維護靜態外部 IP 位址,且想讓 VM 的外部 IP 位址為臨時性。

如要讓 MIG 中的 VM 具有暫時性的有狀態外部 IP 位址,請執行下列指令:

gcloud compute instance-groups managed update example-group \
    --remove-stateful-external-ips nic0

MIG 會自動且非同步地從群組中所有執行個體的保留狀態中移除 nic0 網路介面的靜態外部 IP 位址。外部 IP 位址仍會在執行個體上保持有效,但不再具有狀態。重新建立或更新執行個體,或是執行個體自動修復時,MIG 會取消指派相關聯的靜態 IP 位址,並自動指派臨時位址。如果您不再需要保留靜態外部 IP 位址預留,現在可以釋出

REST

如要指定要將哪些 IP 位址從 MIG 的 stateful 政策中移除,請使用 instanceGroupManagers.patchregionInstanceGroupManagers.patch 方法,從 MIG 的 stateful 政策中移除每個 IP 的設定:

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

{
  "statefulPolicy": {
    "preservedState": {
      "internalIPs": {
        "NI_NAME": null
      },
      "externalIPs": {
        "NI_NAME": null
      }
    }
  }
}

更改下列內容:

  • PROJECT:要求的專案 ID。
  • REGION:如果是區域 MIG,則是群組所在的區域。如果是區域 MIG,請將 regions/REGION 替換為 zones/ZONE,並指定 MIG 所在的區域。
  • INSTANCE_GROUP_NAME:要建立的 MIG 名稱。
  • NI_NAME:(必填) 網路介面名稱。主要網路介面名稱為 nic0。如果您有多個網路介面,可以指定多個 NI_NAMES

示例

您的應用程式已透過名為 example-group 的 MIG 中 VM 執行個體的已發布靜態外部 IP 位址,向使用者公開。您已在 MIG 前端部署負載平衡器,並透過該負載平衡器將流量轉送至受管理的 VM,藉此重新架構服務。您不再需要維護靜態外部 IP 位址,且希望將 VM 的外部 IP 位址設為臨時。

如要讓 MIG 中的 VM 具備臨時狀態外部 IP 位址,請套用 MIG 修補程式:

PATCH https://compute.googleapis.com/compute/v1/projects/example-project/regions/us-east1/instanceGroupManagers/example-group

{
  "statefulPolicy": {
    "preservedState": {
      "externalIPs": {
        "nic0": null
      }
    }
  }
}

MIG 會自動且非同步地從群組中所有執行個體的保留狀態中移除 nic0 網路介面的靜態外部 IP 位址。外部 IP 位址仍會在執行個體上保持有效,但不再具有狀態。重新建立或更新執行個體,或是執行個體自動修復時,MIG 會取消指派相關聯的靜態 IP 位址,並自動指派臨時位址。如果您不再需要保留靜態外部 IP 位址預留項目,現在可以釋出這些項目。

為 MIG 中的 VM 個別設定有狀態 IP 位址

在下列情況下,為 MIG 中的 VM 個別設定有狀態 IP 位址會很有幫助:

  • 將現有工作負載 (將現有的保留靜態 IP 位址) 從獨立 VM 執行個體遷移至有狀態 MIG,以便享有自動修復和自動更新的優勢。
  • 指派架構或工作負載設定所需的特定保留靜態 IP 位址。

在 MIG 中建立 VM 時設定靜態 IP 位址

您可以在 MIG 中個別建立這些執行個體時,為特定執行個體保留並指派靜態 IP 位址。在架構、設定或使用者依賴特定靜態 IP 位址的情況下,這項功能可用於將有狀態應用程式從現有的獨立虛擬機器遷移至有狀態的 MIG。

當您在 MIG 中手動建立執行個體並提供靜態 IP 位址時,MIG 會執行下列動作:

  1. 為提供的 IP 位址建立靜態內部外部 IP 位址保留項目 (如果尚未存在)。
  2. 使用提供的執行個體名稱和 IP 位址,從執行個體範本建立執行個體。
  3. 使用提供的 IP 位址狀態設定,建立個別執行個體設定

gcloud

如要建立具有預先定義靜態 IP 位址的執行個體,請使用 gcloud compute instance-groups managed create-instance 指令,並搭配下列一或多個旗標:

  • --stateful-internal-ip 可設定特定網路介面的靜態內部 IP 位址。
  • --stateful-external-ip 設定特定網路介面的靜態外部 IP 位址。
gcloud compute instance-groups managed create-instance INSTANCE_GROUP_NAME \
    --instance INSTANCE_NAME \
    --stateful-internal-ip address=ADDRESS[,interface-name=NI_NAME][,auto-delete=DELETE_RULE] \
    --stateful-external-ip address=ADDRESS[,interface-name=NI_NAME][,auto-delete=DELETE_RULE]

更改下列內容:

  • INSTANCE_GROUP_NAME:MIG 名稱。
  • INSTANCE_NAME:要建立的執行個體名稱。
  • NI_NAME:(選填)網路介面名稱。如果未提供,系統會預設使用名為 nic0 的主要網路介面。如果您有多個網路介面,則可為每個網路介面中的每個 IP 指定此標記。
  • ADDRESS:(必要)要指派給執行個體的靜態 IP 位址,格式如下:

    • 地址。靜態 IP 位址預留的網址,例如:"projects/example-project/regions/us-east1/addresses/example-ip-name"
    • 常值,例如:"130.211.181.55"
      • 如果提供的 IP 位址尚未預留,MIG 會自動建立相應的 IP 位址預留。
      • 如果提供的 IP 位址已保留,MIG 會將保留項目指派給執行個體。
  • DELETE_RULE:(選填) 當 VM 執行個體永久刪除時,應對相關靜態 Address 資源採取的動作。可用的選項如下:

    • never:(預設)。請勿刪除靜態 IP 位址。請改為在刪除執行個體時取消指派地址,並保留該地址。
    • on-permanent-instance-deletion:當從執行個體群組中永久刪除執行個體時,刪除靜態 IP 位址保留值,例如手動刪除執行個體或減少群組大小。

    無論刪除規則的值為何,群組一律會在執行個體自動修復、更新和重新建立作業時保留有狀態 IP 位址。

示例

您需要在 Proxy 伺服器叢集中新增一個 VM 執行個體,並在名為 proxy-cluster 的 MIG 上執行。您已建立名為 proxy-node-03-ip 的靜態內部 IP 位址預留,並需要將其指派給新節點。即使您決定在日後刪除節點,也要保留 IP 位址保留項目。

執行下列指令建立節點:

gcloud compute instance-groups managed create-instance proxy-cluster \
    --instance proxy-node-03 \
    --stateful-internal-ip address="projects/example-project/regions/us-east1/addresses/proxy-node-03-ip",auto-delete=never

這項指令會建立名為 proxy-node-03 的執行個體,將提供的靜態內部 IP 位址 (名為 proxy-node-03-ip) 指派給執行個體,並在對應的個別執行個體設定中儲存 IP 的具狀態設定。由於 auto-delete 旗標已設為 never,因此日後刪除執行個體時,IP 仍會保留。

Terraform

如要建立含有預先定義靜態 IP 位址的 VM,請使用下列一個或多個區塊:

  • preserved_state.internal_ip 標示特定網路介面的內部 IP 位址為有狀態。
  • preserved_state.external_ip,將特定網路介面的外部 IP 位址標示為有狀態。

以下範例會在區域 MIG 中,針對建立 VM 時設定靜態 IP 位址。如要進一步瞭解範例中使用的資源,請參閱 google_compute_region_per_instance_config 資源。如果是區域 MIG,請使用 google_compute_per_instance_config 資源

resource "google_compute_region_per_instance_config" "default" {
  region_instance_group_manager = google_compute_region_instance_group_manager.default.name
  region                        = google_compute_region_instance_group_manager.default.region
  name                          = "proxy-node-03-ip"
  preserved_state {
    internal_ip {
      interface_name = "nic0"
      auto_delete    = "NEVER"
      ip_address {
        address = google_compute_address.default.id
      }
    }
  }
}

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

REST

如要在 MIG 中建立一或多個執行個體、設定自訂執行個體名稱,以及將預先定義的靜態 IP 位址指派給這些執行個體,請使用 instanceGroupManagers.createInstancesregionInstanceGroupManagers.createInstances 方法。

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

{
  "instances": [
    {
      "name": "INSTANCE_NAME",
      "preservedState" : {
        "internalIPs": {
          "NI_NAME" : {
            "ipAddress": {
              "address": "ADDRESS",
              "literal": "LITERAL"
            },
            "autoDelete": "DELETE_RULE"
          },
          ...
        },
        "externalIPs": {
          "NI_NAME" : {
            "ipAddress": {
              "address": "ADDRESS",
              "literal": "LITERAL"
            },
            "autoDelete": "DELETE_RULE"
          },
          ...
        },
        ...
      }
    },
    ...
  ]
}

更改下列內容:

  • PROJECT_ID:要求的專案 ID。
  • NAME:MIG 名稱。
  • REGION:如果是區域 MIG,則是群組所在的區域。如果是區域 MIG,請將 regions/REGION 替換為 zones/ZONE,並指定 MIG 所在的區域。
  • INSTANCE_NAME:要建立的執行個體名稱。
  • NI_NAME:(必要)網路介面名稱。主要網路介面名稱為 nic0。如果您有多個網路介面,可以指定多個 NI_NAMES
  • ADDRESS:(選填)要指派給執行個體的靜態 IP 位址,格式為靜態 IP 位址預留的網址,例如:"projects/example-project/regions/us-east1/addresses/example-ip-name"。指派靜態 IP 位址時,您必須且只能一次設定一個欄位 (addressliteral)。
  • LITERAL:(選填)要指派給執行個體的靜態 IP 位址,格式為文字表示法,例如:"130.211.181.55"。指派靜態 IP 位址時,您必須且只能一次設定一個欄位 (addressliteral)。
    • 如果提供的 IP 位址文字尚未預留,MIG 會自動建立相應的 IP 位址預留。
    • 如果提供的字面 IP 位址已保留,MIG 會將保留項目指派給執行個體。
  • DELETE_RULE:(選填)當 VM 執行個體永久刪除時,應對相關靜態 Address 資源採取的動作。可用的選項如下:

    • NEVER:(預設值)。請勿刪除靜態 IP 位址。請改為在刪除執行個體時取消指派地址,並保留該地址。
    • ON_PERMANENT_INSTANCE_DELETION:當從執行個體群組中永久刪除執行個體時,刪除靜態 IP 位址保留值,例如手動刪除執行個體或減少群組大小。

    無論刪除規則的值為何,群組一律會在執行個體自動修復、更新和重新建立作業時保留有狀態 IP 位址。

示例

您需要在 Proxy 伺服器叢集中新增一個 VM 執行個體,並在名為 proxy-cluster 的 MIG 上執行。您已建立名為 proxy-node-03-ip 的靜態內部 IP 位址預留,並需要將其指派給新節點。即使您決定在日後刪除節點,也要保留 IP 位址保留項目。

呼叫 regionInstanceGroupManagers.createInstances 方法來建立其他例項:

POST https://compute.googleapis.com/compute/v1/projects/example-project/regions/us-east1/instanceGroupManagers/proxy-cluster/createInstances

{
  "instances": [
    {
      "name": "proxy-node-03",
      "preservedState" : {
        "internalIPs": {
          "nic0" : {
            "ipAddress": {
              "address": "projects/example-project/regions/us-east1/addresses/proxy-node-03-ip"
            },
            "autoDelete": "NEVER"
          }
        }
      }
    }
  ]
}

這個方法會建立名為 proxy-node-03 的執行個體,將提供的靜態內部 IP 位址 (名為 proxy-node-03-ip) 指派給執行個體,並在對應的個別執行個體設定中儲存 IP 的具狀態設定。由於 autoDelete 欄位已設為 NEVER,因此日後刪除執行個體時,IP 仍會保留。

為 MIG 中現有的 VM 設定靜態 IP 位址

您可以為受管理的個體個別設定預先定義的靜態 IP 位址,或更新有狀態 IP 設定,例如:

  • 將靜態 IP 位址指派給 MIG 中的現有執行個體。針對靜態外部 IP,這項作業需要重新整理執行個體,而針對靜態內部 IP,則需要重新建立執行個體。
  • 更新已指派靜態 IP 位址的刪除規則。這項作業可在不中斷執行中的執行個體的情況下完成。

如果是沒有外部 IP 位址的現有執行個體,您需要設定外部有狀態 IP,MIG 會在對應的網路介面中加入存取設定,並使用下列預設值:

"accessConfigs": [
  {
    "kind": "compute#accessConfig",
    "name": "External Nat",
    "natIP": "XX.XX.XX.XX",
    "networkTier": "PREMIUM",
    "type": "ONE_TO_ONE_NAT"
  }
]

gcloud

如要為 MIG 中的 VM 個別設定有狀態 IP 位址,請在相關聯的個別執行個體設定中新增或更新有狀態 IP 設定。

如果執行個體尚未有個別設定,請使用 gcloud compute instance-groups managed instance-configs create 指令搭配下列一或多個旗標:

  • --stateful-internal-ip 可設定特定網路介面的靜態內部 IP 位址。
  • --stateful-external-ip 設定特定網路介面的靜態外部 IP 位址。
gcloud compute instance-groups managed instance-configs create INSTANCE_GROUP_NAME \
    --instance INSTANCE_NAME \
    --stateful-internal-ip address=ADDRESS[,interface-name=NI_NAME][,auto-delete=DELETE_RULE] \
    --stateful-external-ip address=ADDRESS[,interface-name=NI_NAME][,auto-delete=DELETE_RULE] \
    [--no-update-instance | --update-instance]
    [--instance-update-minimal-action MINIMAL_ACTION]

如果執行個體已存在個別設定,請使用 gcloud compute instance-groups managed instance-configs update 指令搭配一或多個 --stateful-internal-ip--stateful-external-ip 旗標:

gcloud compute instance-groups managed instance-configs update INSTANCE_GROUP_NAME \
    --instance INSTANCE_NAME \
    --stateful-internal-ip address=ADDRESS[,interface-name=NI_NAME][,auto-delete=DELETE_RULE] \
    --stateful-external-ip address=ADDRESS[,interface-name=NI_NAME][,auto-delete=DELETE_RULE] \
    [--no-update-instance | --update-instance]
    [--instance-update-minimal-action MINIMAL_ACTION]

更改下列內容:

  • INSTANCE_GROUP_NAME:MIG 名稱。
  • INSTANCE_NAME:要設定有狀態 IP 位址的執行個體名稱。
  • NI_NAME:(選填) 網路介面名稱。如果未提供,系統會預設使用名為 nic0 的主要網路介面。如果您有多個網路介面,則可以為每個網路介面中的每個 IP 指定這個標記。
  • ADDRESS:要指派給執行個體的靜態 IP 位址,格式如下:
    • 地址。靜態 IP 位址預留的網址,例如:"projects/example-project/regions/us-east1/addresses/example-ip-name"
    • 文字。例如:"130.211.181.55"
      • 如果提供的 IP 位址尚未預留,MIG 會自動建立相應的 IP 位址預留。
      • 如果提供的 IP 位址已保留,MIG 會將保留項目指派給執行個體。
    • 如果在執行個體的個別執行個體設定中已定義地址,則這個子旗標為選用項目。否則為必填項目。
    • 如果省略,則設定的地址保持不變。
  • DELETE_RULE:(選填)當 VM 執行個體永久刪除時,應對相關靜態 Address 資源採取的動作。可用的選項如下:

    • never:(預設)。請勿刪除靜態 IP 位址。請改為在刪除執行個體時取消指派地址,並保留該地址。
    • on-permanent-instance-deletion:當從執行個體群組中永久刪除執行個體時,刪除靜態 IP 位址保留值,例如手動刪除執行個體或減少群組大小。
    • 如果省略,系統會為新的有狀態 IP 設定預設值;在現有設定中,該值會維持不變。

    無論刪除規則的值為何,群組一律會在執行個體自動修復、更新和重新建立作業時保留有狀態 IP 位址。

  • --update-instance:(選填。預設值)。立即將變更套用至執行個體。如果您使用 --no-update-instance 旗標,變更不會套用,而是會在您稍後重新建立執行個體或套用更新時套用

  • MINIMAL_ACTION:(選填)將個別執行個體設定更新套用至執行個體時,至少要執行指定的動作。必須與 --update-instance 旗標搭配使用。值必須是下列其中一個:

    • none:無動作。
    • refresh:套用可在未停止執行個體的情況下套用的更新。
    • restart:停止執行個體,然後重新啟動。
    • replace:重新建立執行個體。

如果省略,系統會使用更新作業所需的干擾程度最低的動作。

示例

您有一個名為 file-server 的檔案伺服器執行個體,這是名為 fs-group 的有狀態 MIG 中的單一執行個體。群組會提供相應的個別執行個體設定,其中會設定有狀態資料磁碟。檔案伺服器只能在內部存取,但現在有使用者需要透過靜態 IP 位址從外部存取檔案伺服器。您已透過建立 file-server-ip 位址預留功能保留靜態外部 IP 位址。接下來,您必須將這個 IP 指派給檔案伺服器執行個體。

執行下列指令,為檔案伺服器執行個體設定有狀態的外部 IP:

gcloud compute instance-groups managed instance-configs update fs-group \
    --instance file-server \
    --stateful-external-ip interface-name=nic0,address="projects/example-project/regions/us-east1/addresses/file-server-ip",auto-delete=never \
    --update-instance

這項指令會執行以下作業:

  1. 更新 file-server 執行個體的個別執行個體設定:
    1. 新增有狀態的外部 IP 設定,指向 file-server-ip 位址預留。
    2. 維持現有有狀態資料磁碟設定不變。
  2. 由於包含 --update-instance 標記,因此會立即將個別執行個體設定更新套用至 file-server 執行個體:重新整理執行個體,並從 file-server-ip 保留項目指派靜態外部 IP 位址。

REST

如要為 MIG 中的 VM 個別設定有狀態 IP,請在相關聯的個別執行個體設定中新增或更新有狀態 IP 設定。

如果指定的執行個體尚未有個別執行個體設定,請使用 instanceGroupManagers.updatePerInstanceConfigs 方法regionInstanceGroupManagers.updatePerInstanceConfigs 方法,為一或多個 IP 位址設定狀態:

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

{
  "perInstanceConfigs": [
    {
      "name": "INSTANCE_NAME",
      "preservedState" : {
        "internalIPs": {
          "NI_NAME" : {
            "ipAddress": {
              "address": "ADDRESS",
              "literal": "LITERAL"
            },
            "autoDelete": "DELETE_RULE"
          },
          ...
        },
        "externalIPs": {
          "NI_NAME" : {
            "ipAddress": {
              "address": "ADDRESS",
              "literal": "LITERAL"
            },
            "autoDelete": "DELETE_RULE"
          },
          ...
        },
        ...
      },
      "fingerprint: "FINGERPRINT"
    },
    ...
  ]
}

如果已為指定的執行個體設定個別執行個體設定,請使用 instanceGroupManagers.patchPerInstanceConfigs 方法regionInstanceGroupManagers.patchPerInstanceConfigs 方法,為一或多個 IP 位址設定狀態:

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

{
  "perInstanceConfigs": [
    {
      "name": "INSTANCE_NAME",
      "preservedState" : {
        "internalIPs": {
          "NI_NAME" : {
            "ipAddress": {
              "address": "ADDRESS",
              "literal": "LITERAL"
            },
            "autoDelete": "DELETE_RULE"
          },
          ...
        },
        "externalIPs": {
          "NI_NAME" : {
            "ipAddress": {
              "address": "ADDRESS",
              "literal": "LITERAL"
            },
            "autoDelete": "DELETE_RULE"
          },
          ...
        },
        ...
      },
      "fingerprint: "FINGERPRINT"
    },
    ...
  ]
}

更改下列內容:

  • PROJECT_ID:要求的專案 ID。
  • NAME:MIG 的名稱。
  • REGION:如果是區域 MIG,則是群組所在的區域。如果是區域 MIG,請將 regions/REGION 替換為 zones/ZONE,並指定 MIG 所在的區域。
  • INSTANCE_NAME:(必要)要設定有狀態 IP 的執行個體名稱。
  • NI_NAME:(必要)網路介面名稱。主要網路介面名稱為 nic0。如果您有多個網路介面,可以指定多個 NI_NAMES
  • ADDRESS:(選填)要指派給執行個體的靜態 IP 位址,格式為靜態 IP 位址預留的網址,例如:"projects/example-project/regions/us-east1/addresses/example-ip-name"。指派靜態 IP 位址時,您必須且只能一次設定一個欄位 (位址或文字常值)。
  • LITERAL:(選填)要指派給執行個體的靜態 IP 位址,格式為文字常值。例如:"130.211.181.55"。指派靜態 IP 位址時,您必須且只能一次設定一個欄位 (位址或文字常值)。
    • 如果提供的 IP 位址文字尚未預留,MIG 會自動建立相應的 IP 位址預留。
    • 如果提供的字面 IP 位址已保留,MIG 會將保留項目指派給執行個體。
  • DELETE_RULE:(選填)當 VM 執行個體永久刪除時,應對相關靜態 Address 資源採取的動作。可用的選項如下:

    • NEVER:(預設值)。請勿刪除靜態 IP 位址。請改為在刪除執行個體時取消指派地址,並保留該地址。
    • ON_PERMANENT_INSTANCE_DELETION:當從執行個體群組中永久刪除執行個體時,刪除靜態 IP 位址保留值,例如手動刪除執行個體或減少群組大小。
    • 如果省略,系統會為新的有狀態 IP 設定預設值;在現有設定中,該值會維持不變。

    無論刪除規則的值為何,群組一律會在執行個體自動修復、更新和重新建立作業時保留有狀態 IP 位址。

  • FINGERPRINT:(選填)指定設定的指紋 (如果已存在)。用於樂觀式鎖定。如果指紋與提供的指紋不同,作業就會失敗,因為這表示自上次讀取以來,個別例項設定已變更。如要查看最新的指紋,請查看區域可用區 MIG 的 listPerInstanceConfigs 方法輸出內容。如果省略 fingerprint,作業會繼續進行,但不會進行指紋比對。

updatePerInstanceConfigspatchPerInstanceConfigs 方法會更新指定的個別執行個體設定,但不會將設定更新套用至相關聯的受管理執行個體。當 MIG 收到重建或更新執行個體的指示時,系統會將變更套用至執行個體。您可以手動套用更新,將變更套用至執行個體。

示例

您有一個名為 file-server 的檔案伺服器執行個體,這是名為 fs-group 的有狀態 MIG 中的單一執行個體。群組會提供相應的個別執行個體設定,其中會設定有狀態資料磁碟。檔案伺服器只能在內部存取,但現在有使用者需要透過靜態 IP 位址從外部存取檔案伺服器。您已透過建立 file-server-ip 位址預留功能保留靜態外部 IP 位址。接下來,您必須將這個 IP 指派給檔案伺服器執行個體。

如要使用新的有狀態外部 IP 位址,更新 file-server 的個別例項設定,請呼叫 patchPerInstanceConfigs 方法:

POST https://compute.googleapis.com/compute/v1/projects/example-project/regions/us-east1/instanceGroupManagers/fs-group/patchPerInstanceConfigs

{
  "perInstanceConfigs": [
    {
      "name": "file-server",
      "preservedState" : {
        "externalIPs": {
          "nic0" : {
            "ipAddress": {
              "address": "projects/example-project/regions/us-east1/addresses/file-server-ip"
            },
            "autoDelete": "NEVER"
          }
        }
      }
    }
  ]
}

這個方法會為 file-server 例項修補個別例項設定:

  1. 新增有狀態的外部 IP 設定,指向 file-server-ip 位址保留。
  2. 維持現有有狀態資料磁碟設定不變。

設定更新尚未套用至 file-server VM 執行個體。日後重新建立執行個體或套用更新時,MIG 就會套用設定更新。

如要將個別執行個體設定更新套用至 file-server VM 執行個體,請為該執行個體呼叫 regionInstanceGroupManagers.applyUpdatesToInstances 方法

POST https://compute.googleapis.com/compute/v1/projects/example-project/regions/us-east1/instanceGroupManagers/gs-group/applyUpdatesToInstances

{
  "instances": ["/zones/us-east1-b/instances/file-server"]
}

這個方法會將已設定的靜態外部 IP 位址從 file-server-ip 保留項目指派給受管理的執行個體。這個方法會重新整理 file-server 執行個體,以便指派外部 IP 位址。

由於在有狀態 IP 設定中將 autoDelete 設為 NEVER,因此如果您日後刪除執行個體,IP 仍會保留。

將靜態 IP 位址與 MIG 中現有的 VM 解除關聯

您可能需要將靜態 IP 位址與現有 VM 解除關聯,讓 VM 的網路介面變成臨時性。這在下列情況中很實用:

  • 您重新架構應用程式,不再依賴靜態 IP 位址。
  • 您誤將 IP 設定為有狀態,並想將其還原。

您可以從 MIG 中的現有 VM 取消關聯靜態 IP 位址,並將 IP 位址設為個別 VM 的臨時狀態,方法是從相關聯的個別執行個體設定中移除 IP 位址的狀態設定,或是刪除整個個別執行個體設定 (如果不含任何其他狀態)。套用變更後會產生下列影響:

  • IP 位址仍會在執行個體上運作,但不再具有狀態。
  • 重新建立或更新執行個體,或是執行個體自動修復時,MIG 會取消指派相關聯的靜態 IP 位址預留項目,並自動指派臨時位址。
  • 取消指派後,靜態 IP 位址仍會保留。

除非您明確選擇移除,否則從個別執行個體設定移除有狀態 IP 設定,不會中斷執行中的 VM 執行個體。

如需詳細資訊,請參閱下列文件:

gcloud

如要從相關聯的個別執行個體設定中移除有狀態 IP 設定,請使用 gcloud compute instance-groups managed instance-configs update 指令搭配 --remove-stateful-internal-ips--remove-stateful-external-ips 標記:

gcloud compute instance-groups managed instance-configs update INSTANCE_GROUP_NAME \
    --instance INSTANCE_NAME \
    --remove-stateful-internal-ips NI_NAME[,NI_NAME,...] \
    --remove-stateful-external-ips NI_NAME[,NI_NAME,...]
    [--no-update-instance | --update-instance] \
    [--instance-update-minimal-action MINIMAL_ACTION]

更改下列內容:

  • INSTANCE_GROUP_NAME:MIG 名稱。
  • INSTANCE_NAME:(必要)要移除有狀態 IP 設定的執行個體名稱。
  • NI_NAME:(必要)網路介面名稱。主要網路介面名稱為 nic0。如果您有多個網路介面,可以指定多個 NI_NAMES
  • --update-instance:(選填。預設值)。立即將變更套用至執行個體。如果您使用 --no-update-instance 旗標,變更不會套用,而是會在您稍後重新建立執行個體或套用更新時套用
  • MINIMAL_ACTION:(選填)將個別執行個體設定更新套用至執行個體時,至少要執行指定的動作。這個標記只能與 --update-instance 標記搭配使用。這個值必須是下列其中一個:

    • none:無動作。
    • refresh:套用可在未停止執行個體的情況下套用的更新。
    • restart:停止執行個體,然後重新啟動。
    • replace:重新建立執行個體。

    如果省略,系統會使用更新作業所需的干擾程度最低的動作。

示例

您的應用程式已透過名為 example-group 的 MIG 中 VM 執行個體的特定已發布靜態外部 IP 位址,向使用者公開。您已在 MIG 前端部署負載平衡器,並透過負載平衡器將流量轉送至受管理的 VM,藉此重新架構服務。您不再需要維護靜態外部 IP 位址,並希望將 VM 的外部 IP 位址設為臨時。

如要讓 MIG 中的 VM 具狀態外部 IP 位址為臨時性,請為每個執行個體執行下列指令,例如 node-1

gcloud compute instance-groups managed instance-configs update example-group \
    --instance node-1 \
    --remove-stateful-external-ips nic0 \
    --update-instance

這項指令會執行以下作業:

  1. node-1 的個別執行個體設定中,移除 nic0 網路介面中外部 IP 位址的狀態設定。
  2. 由於包含 --update-instance 標記,因此會立即將個別執行個體設定更新套用至 node-1 VM 執行個體。VM 執行個體不會中斷,且會繼續透過相同的 IP 提供服務,而該 IP 不再具有狀態。MIG 會從受管理執行個體的 preservedStateFromConfig 中移除對靜態 IP 保留的參照,並將外部 IP 位址視為臨時。MIG 會在後續的執行個體重新建立、更新或自動修復事件中自動指派外部 IP。
  3. 取消指派後,原始靜態 IP 仍會保留。如果不再需要 IP,您可以釋出 IP。

REST

如要從相關聯的個別執行個體設定中移除有狀態 IP 設定,請使用 instanceGroupManagers.patchPerInstanceConfigs 方法regionInstanceGroupManagers.patchPerInstanceConfigs 方法

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

{
  "perInstanceConfigs": [
    {
      "name": "INSTANCE_NAME",
      "preservedState" : {
        "internalIPs": {
          "NI_NAME" : null
        },
        "externalIPs": {
          "NI_NAME" : null
        }
      },
      "fingerprint: "FINGERPRINT"
    },
    ...
  ]
}

更改下列內容:

  • PROJECT_ID:要求的專案 ID。
  • NAME:MIG 名稱。
  • REGION:如果是區域 MIG,則是群組所在的區域。如果是區域 MIG,請將 regions/REGION 替換為 zones/ZONE,並指定 MIG 所在的區域。
  • INSTANCE_NAME:(必要)要移除有狀態 IP 設定的執行個體名稱。
  • NI_NAME:(必要)網路介面名稱。主要網路介面名稱為 nic0。如果您有多個網路介面,可以指定多個 NI_NAMES
  • FINGERPRINT:(選填)指定設定的指紋 (如果已存在)。用於樂觀式鎖定。如果指紋與提供的指紋不同,作業就會失敗,因為這表示自上次讀取以來,個別例項設定已變更。如要查看最新的指紋,請查看區域可用區 MIG 的 listPerInstanceConfigs 方法輸出內容。如果省略 fingerprint,作業會繼續進行,但不會進行指紋比對。

patchPerInstanceConfigs 方法會更新指定的個別執行個體設定,但不會將設定更新套用至相關聯的受管理執行個體。當 MIG 收到重新建立或更新執行個體的指示時,系統會將變更套用至執行個體。您可以手動套用更新,將變更套用至執行個體。

示例

您的應用程式已透過名為 example-group 的 MIG 中 VM 執行個體的特定已發布靜態外部 IP 位址,向使用者公開。您已在 MIG 前端部署負載平衡器,並透過該負載平衡器將流量路由至受管理的 VM。您不再需要維護靜態外部 IP 位址,並希望將 VM 的外部 IP 位址設為臨時。

如要讓 MIG 中的 VM 具有暫時性的有狀態外部 IP 位址,請為每個執行個體執行下列方法,例如 node-1,並為網路介面的有狀態設定提供 null 值:

POST https://compute.googleapis.com/compute/v1/projects/example-project/regions/us-east1/instanceGroupManagers/example-group/patchPerInstanceConfigs

{
  "perInstanceConfigs": [
    {
      "name": "node-1",
      "preservedState" : {
        "externalIPs": {
          "nic0" : null
        }
      }
    }
  ]
}

這個方法會從 node-1 的個別執行個體設定中,移除 nic0 網路介面中的有狀態 IP 位址設定。設定更新尚未套用至 node-1 VM 執行個體。MIG 會在下次重建或更新執行個體時套用設定更新。

如要將個別執行個體設定更新套用至 node-1 VM 執行個體,請為該執行個體執行 regionInstanceGroupManagers.applyUpdatesToInstances 方法

POST https://compute.googleapis.com/compute/v1/projects/example-project/regions/us-east1/instanceGroupManagers/example-group/applyUpdatesToInstances

{
  "instances": ["/zones/us-east1-c/instances/node-1"]
}

MIG 會從 node-1 執行個體的 preservedStateFromConfig 欄位移除對靜態 IP 保留的參照,並將 IP 位址視為臨時性。MIG 會在後續的執行個體重新建立、更新或自動修復事件中,自動指派外部 IP。

取消指派後,原始靜態 IP 仍會保留。如果不再需要 IP,您可以釋出 IP。

移除有狀態設定

如要為 MIG 中的所有 VM 從具狀態政策中移除設定,請參閱下列文件:

如要移除 MIG 中特定 VM 的個別執行個體設定,請參閱下列文件:

清理未使用的靜態 IP 位址

為群組中的受管理執行個體設定有狀態 IP 位址時,您可以選擇在執行個體永久刪除時,要手動或自動釋出相關聯的靜態 IP 位址預留空間:

  • 如要在刪除永久執行個體時自動釋出靜態 IP 位址預留項目,請將 autoDelete 參數設為 ON_PERMANENT_INSTANCE_DELETION
  • 如要手動釋出靜態 IP 位址預留,請將 autoDelete 參數設為 NEVER。如要清除未使用的靜態 IP 位址預訂項目,例如避免不必要的費用,請參閱下列文件:

如果您已指示 MIG 永遠不要刪除相關聯的 IP 預留,則在對應的執行個體或 MIG 停止存在後,靜態 IP 位址仍會保留。

意見回饋

我們想瞭解您對有狀態 MIG 的使用情境、難題和意見。歡迎透過 mig-discuss@google.com 與我們的團隊分享意見。

後續步驟