在代管執行個體群組 (MIG) 中設定有狀態 IP 位址,即可確保群組中的 VM 執行個體在自動修復、更新和重新建立時,IP 位址會保留下來。
您可以保留內部和外部 IPv4 位址。您可以設定自動指派 IP 位址,或為 MIG 中的每個 VM 執行個體指派特定 IP 位址。
事前準備
- 請參閱使用有狀態 MIG 的時機和有狀態 MIG 的運作方式。
-
如果尚未設定驗證,請先完成設定。驗證機制會確認您的身分,以便授予 Google Cloud 服務和 API 的存取權。如要從本機開發環境執行程式碼或範例,您可以選取下列其中一個選項,向 Compute Engine 進行驗證:
請根據您打算如何使用本頁範例,選取對應的分頁標籤:
控制台
使用 Google Cloud 控制台存取 Google Cloud 服務和 API 時,不需要設定驗證機制。
gcloud
-
安裝 Google Cloud CLI。 安裝完成後,請執行下列指令,初始化 Google Cloud CLI:
gcloud init若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
-
- 設定預設區域和可用區。
-
安裝 Google Cloud CLI。
-
若您採用的是外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
-
如果您使用的是本機殼層,請為使用者帳戶建立本機驗證憑證:
gcloud auth application-default login
如果您使用的是 Cloud Shell,則不必執行這項操作。
如果系統傳回驗證錯誤,且您使用的是外部識別資訊提供者 (IdP),請確認您已使用聯合身分登入 gcloud CLI。
Terraform
如要在本機開發環境中使用本頁的 Terraform 範例,請安裝並初始化 gcloud CLI,然後使用使用者憑證設定應用程式預設憑證。
詳情請參閱「為本機開發環境設定驗證機制」。
REST
如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。
安裝 Google Cloud CLI。
若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
詳情請參閱 Google Cloud 驗證說明文件中的「使用 REST 進行驗證」一節。
限制
具備有狀態 IP 位址的 MIG 有下列限制:
系統不支援 IPv6 位址。
不含子網路的網路 (例如舊版網路) 不支援內部 IP 位址。
具有有狀態設定的 MIG (有狀態 MIG) 有下列限制:
- 如果 MIG 具有有狀態設定,則無法使用自動調度資源或調度排程。如要排定有狀態 MIG 的啟動和停止作業,可以使用外部自動化工作流程。例如,使用 Cloud Scheduler 觸發 Cloud Run 函式,呼叫 MIG 專屬的
stopInstances和startInstances方法。 - 如要使用自動滾動式更新,請務必將替換方法設為
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。
控制台
前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。
選取您的專案並點選 [繼續]。
點選「建立執行個體群組」。
選取「New managed instance group (stateful)」(新增代管執行個體群組 (有狀態))。
指定執行個體群組的 [名稱]。
選取「執行個體範本」。
在「Number of instances」(執行個體數量) 下方,指定要納入代管執行個體群組的執行個體數量。
在「Stateful configuration」(有狀態設定) 下方,展開「External IP」(外部 IP) 和「Internal IP」(內部 IP) 區段,將這些 IP 位址類型設為有狀態。
- 在「Stateful」(有狀態) 部分,選取「Yes」(是)。
- 在「On permanent instance deletion」(永久刪除執行個體時) 清單中,選取刪除 VM 執行個體時,要對有狀態 IP 位址執行的動作。可用的選項如下:
- Detach IP:(預設) 在刪除執行個體時取消指派位址,並保留位址。
- 刪除 IP:從執行個體群組永久刪除執行個體時 (例如手動刪除執行個體或縮減群組大小),刪除靜態 IP 位址預留項目。
- 完成有狀態設定後,請按一下「Done」(完成)。
點選「建立」。
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 執行個體時,相關聯的靜態位址資源應如何處理。可用選項如下:
never:(預設) 請勿刪除靜態 IP 位址。請改為在刪除執行個體時取消指派位址,並保留位址。on-permanent-instance-deletion:從執行個體群組永久刪除執行個體時 (例如手動刪除執行個體或縮減群組大小),刪除靜態 IP 位址預留項目。
無論刪除規則的值為何,群組一律會在執行個體自動修復、更新和重新建立作業時,保留有狀態 IP 位址。
範例
您需要為預設和自訂網路建立具有靜態內部 IP 位址的 VM 執行個體區域群組,並僅為預設網路建立靜態外部 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
nic0 和 nic1 網路介面中的內部 IP,以及 nic0 網路介面中的外部 IP,都設為群組中所有執行個體的有狀態 IP。群組會自動為每個執行個體預留靜態內部和外部 IP 位址。由於 auto-delete 旗標設為 on-permanent-instance-deletion,因此當您刪除相關聯的執行個體或整個群組時,群組會自動刪除靜態 IP 位址預留項目。
如要確認 nic0 和 nic1 網路介面中的內部 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
...
您可以看到群組的有狀態政策宣告 nic0 和 nic1 網路介面中的內部 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 資源。
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
REST
建立 MIG 時,如要指定執行個體範本中網路介面的哪些 IP 位址應為有狀態,請將這些 IP 位址加入 instanceGroupManagers.insert 或 regionInstanceGroupManagers.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 執行個體時,相關聯的靜態位址資源應如何處理。可用選項如下:
NEVER:(預設) 永不刪除靜態 IP 位址。請改為在刪除執行個體時取消指派位址,並保留位址。ON_PERMANENT_INSTANCE_DELETION:從執行個體群組永久刪除執行個體時 (例如手動刪除執行個體或縮減群組大小),刪除靜態 IP 位址預留項目。
無論刪除規則的值為何,群組一律會在執行個體自動修復、更新和重新建立作業時,保留有狀態 IP 位址。
範例
您需要為預設和自訂網路建立具有靜態內部 IP 位址的 VM 執行個體區域群組,並僅為預設網路建立靜態外部 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"
}
}
nic0 和 nic1 網路介面中的內部 IP,以及 nic0 網路介面中的外部 IP,都已設為群組中所有執行個體的具狀態 IP。群組會自動為每個執行個體預留靜態內部和外部 IP 位址。由於 auto-delete 欄位設為 ON_PERMANENT_INSTANCE_DELETION,因此當您刪除相關聯的執行個體或整個群組時,群組會自動刪除靜態 IP 位址預留項目。
使用 regionInstanceGroupManagers.get 方法,確認 nic0 和 nic1 網路介面中的內部 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" }
}
}
}
...
}
您可以看到群組的有狀態政策宣告 nic0 和 nic1 網路介面中的內部 IP,以及 nic0 網路介面中的外部 IP 為有狀態,並設定規則,在永久刪除執行個體時刪除相關聯的靜態 IP 位址保留項目。
為現有 MIG 中的 IP 位址設定及更新有狀態設定
如果您在無狀態 MIG (沒有任何有狀態設定的 MIG) 上執行工作負載,且工作負載需要靜態 IP 位址,可以將已指派給代管 VM 執行個體的 IP 位址設為有狀態。這樣一來,在執行個體自動修復、更新和重新建立事件中,現有 VM 的 IP 位址就會保留。您也可以選擇在刪除執行個體後,保留靜態 IP 位址預留項目。
為現有 MIG 中的 IP 位址設定有狀態政策,即可執行下列操作:
- 將群組中所有現有和未來的執行個體 IP 位址設為有狀態。這會將所有現有執行個體的對應臨時 IP 位址升級為靜態 IP 位址。
- 更新現有的 IP 位址有狀態設定。
MIG 會自動將有狀態政策中的更新設定,以非同步方式套用至所有執行個體。更新有狀態政策中的 IP 位址設定,不會中斷執行中的 VM 執行個體。詳情請參閱套用有狀態政策更新。
控制台
前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。
按一下要指定有狀態 IP 位址的執行個體群組名稱。
按一下「Edit」(編輯),修改代管執行個體群組。
按一下「Stateful & per-instance configuration」(有狀態和個別執行個體設定),展開該部分。
在「Group config」(群組設定) 區段中,按一下要設為有狀態的「External IP」(外部 IP) 和「Internal IP」(內部 IP)。
- 在「Stateful」(有狀態) 部分,選取「Yes」(是)。
- 在「On permanent instance deletion」(永久刪除執行個體時) 清單中,選取刪除 VM 執行個體時,要對有狀態 IP 位址執行的動作。可用的選項如下:
- Detach IP:(預設) 在刪除執行個體時取消指派位址,並保留位址。
- 「Delete IP」(刪除 IP):從執行個體群組永久刪除執行個體時,刪除靜態 IP 位址預留項目,例如手動刪除執行個體或縮減群組大小時。
- 更新有狀態設定後,請按一下「Done」(完成)。
- 按一下「儲存」即可完成更新。
gcloud
如要指定哪些 IP 位址應為有狀態,或更新現有 MIG 的有狀態 IP 設定,請使用一或多個 --stateful-internal-ip 或 --stateful-external-ip 旗標,搭配 gcloud compute instance-groups managed update 指令。
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 執行個體時,相關聯的靜態位址資源應如何處理。可用選項如下:
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.patch 或 regionInstanceGroupManagers.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 執行個體時,相關聯的靜態位址資源應如何處理。可用選項如下:
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 位址。
從有狀態政策中移除有狀態 IP 設定時,MIG 會自動以非同步方式,從群組中所有執行個體的保留狀態中移除 IP 位址。這項作業不會中斷執行中的 VM 執行個體。IP 位址在執行個體上仍會保持有效,但不再具有狀態。當您重新建立或更新執行個體,或執行個體自動修復時,MIG 會取消指派相關聯的靜態 IP 位址,並自動指派臨時位址。如果不再需要保留靜態外部 IP 位址,現在可以釋出。
詳情請參閱下列文件:
控制台
前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。
找出要移除 IP 位址有狀態設定的執行個體群組,然後按一下該群組的名稱。
按一下「Edit」(編輯),修改代管執行個體群組。
按一下「Stateful & per-instance configuration」(有狀態和個別執行個體設定),展開該部分。
在「Group config」(群組設定) 區段中,展開要設為無狀態的「External IP」(外部 IP) 和「Internal IP」(內部 IP)。
- 將「Stateful」(有狀態) 選項變更為「No」(否)。
- 按一下「完成」。
完成變更後,按一下「儲存」。
gcloud
如要指定 MIG 有狀態政策中的哪些 IP 位址應設為臨時,請使用 --remove-stateful-internal-ips 或 --remove-stateful-external-ips 旗標搭配 gcloud compute instance-groups managed update 指令:
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
範例
您的應用程式已透過 MIG (名為 example-group) 中 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
如要指定 MIG 有狀態政策中的哪些 IP 位址應設為臨時,請使用 instanceGroupManagers.patch 或 regionInstanceGroupManagers.patch 方法,從 MIG 的有狀態政策中移除各個 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 位址,這項功能就非常實用,可將有狀態應用程式從現有的獨立 VM 遷移至有狀態 MIG。
在 MIG 中手動建立執行個體並提供靜態 IP 位址時,MIG 會執行下列動作:
- 如果提供的 IP 位址尚不存在,則為其建立靜態內部或外部 IP 位址預留項目。
- 使用提供的執行個體名稱和 IP 位址,從執行個體範本建立執行個體。
- 使用提供的 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 會將預留項目指派給執行個體。
- 地址。靜態 IP 位址預留項目的網址,例如:
DELETE_RULE:(選用) 規定永久刪除 VM 執行個體時,相關聯的靜態位址資源應如何處理。可用選項如下:
never:(預設) 請勿刪除靜態 IP 位址。請改為在刪除執行個體時取消指派位址,並保留位址。on-permanent-instance-deletion:從執行個體群組永久刪除執行個體時 (例如手動刪除執行個體或縮減群組大小),刪除靜態 IP 位址預留項目。
無論刪除規則的值為何,群組一律會在執行個體自動修復、更新和重新建立作業時,保留有狀態 IP 位址。
範例
您需要在 Proxy 伺服器叢集 (在名為 proxy-cluster 的 MIG 上執行) 中,再新增一個 VM 執行個體。您已建立名為 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 資源。
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
REST
如要在 MIG 中建立一或多個執行個體、設定自訂執行個體名稱,以及為這些執行個體指派預先定義的靜態 IP 位址,請使用 instanceGroupManagers.createInstances 或 regionInstanceGroupManagers.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 位址時,您必須且只能一次設定一個欄位,即address或literal。 - LITERAL:(選用) 要指派給執行個體的靜態 IP 位址,格式為常值,例如:
"130.211.181.55"。指派靜態 IP 位址時,您必須且只能一次設定一個欄位,即address或literal。- 如果提供的常值 IP 位址尚未預留,MIG 會自動建立對應的 IP 位址預留項目。
- 如果提供的常值 IP 位址已預留,MIG 會將預留項目指派給執行個體。
DELETE_RULE:(選用) 規定永久刪除 VM 執行個體時,相關聯的靜態位址資源應如何處理。可用選項如下:
NEVER:(預設) 請勿刪除靜態 IP 位址。請改為在刪除執行個體時取消指派位址,並保留位址。ON_PERMANENT_INSTANCE_DELETION:從執行個體群組永久刪除執行個體時 (例如手動刪除執行個體或縮減群組大小),刪除靜態 IP 位址預留項目。
無論刪除規則的值為何,群組一律會在執行個體自動修復、更新和重新建立作業時,保留有狀態 IP 位址。
範例
您需要在 Proxy 伺服器叢集 (在名為 proxy-cluster 的 MIG 上執行) 中,再新增一個 VM 執行個體。您已建立名為 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 的執行個體,將名為 proxy-node-03-ip 的靜態內部 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 會將預留項目指派給執行個體。
- 如果執行個體的個別執行個體設定中已定義位址,則可不使用這個子旗標。否則就必須提供。
- 如果省略,設定的位址會維持不變。
- 地址。靜態 IP 位址預留項目的網址,例如:
DELETE_RULE:(選用) 規定永久刪除 VM 執行個體時,相關聯的靜態位址資源應如何處理。可用選項如下:
never:(預設) 請勿刪除靜態 IP 位址。請改為在刪除執行個體時取消指派位址,並保留位址。on-permanent-instance-deletion:從執行個體群組永久刪除執行個體時 (例如手動刪除執行個體或縮減群組大小),刪除靜態 IP 位址預留項目。- 如果省略,系統會為新的有狀態 IP 設定指定預設值;現有設定中的值則維持不變。
無論刪除規則的值為何,群組一律會在執行個體自動修復、更新和重新建立作業時,保留有狀態 IP 位址。
--update-instance:(選用。Default.) 立即將變更套用至執行個體。如果使用--no-update-instance旗標,變更會保持未套用狀態,並在您稍後重新建立或套用更新至執行個體時套用。MINIMAL_ACTION:(選用) 將個別執行個體設定更新套用至執行個體時,至少執行指定動作。必須與
--update-instance旗標搭配使用。這個值必須是下列其中一項:none:不採取任何行動。refresh:套用可在不停止執行個體的情況下套用的更新。restart:停止執行個體,然後重新啟動。replace:重新建立執行個體。
如未指定,系統會採用更新作業所需、干擾程度最低的動作。
範例
您有一個名為 file-server 的檔案伺服器執行個體,這是有狀態 MIG fs-group 中的單一執行個體。該群組具有對應的個別執行個體設定,其中設定了有狀態資料磁碟。檔案伺服器原本只能從內部存取,但現在有使用者需要透過靜態 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
這項指令會執行以下作業:
- 更新
file-server執行個體的個別執行個體設定:- 新增有狀態外部 IP 設定,指向
file-server-ip位址預留項目。 - 現有的有狀態資料磁碟設定會維持不變。
- 新增有狀態外部 IP 設定,指向
- 由於包含
--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 執行個體時,相關聯的靜態位址資源應如何處理。可用選項如下:
NEVER:(預設) 請勿刪除靜態 IP 位址。請改為在刪除執行個體時取消指派位址,並保留位址。ON_PERMANENT_INSTANCE_DELETION:從執行個體群組永久刪除執行個體時 (例如手動刪除執行個體或縮減群組大小),刪除靜態 IP 位址預留項目。- 如果省略,系統會為新的有狀態 IP 設定指定預設值;現有設定中的值則維持不變。
無論刪除規則的值為何,群組一律會在執行個體自動修復、更新和重新建立作業時,保留有狀態 IP 位址。
FINGERPRINT:(選用) 指定設定的指紋 (如果已存在)。用於樂觀鎖定。如果指紋與提供的值不同,作業就會失敗,因為這表示個別執行個體設定自上次讀取後已變更。如要查看最新的指紋,請參閱區域或可用區 MIG 的
listPerInstanceConfigs方法輸出內容。如果省略fingerprint,系統會直接執行作業,不進行指紋比較。
updatePerInstanceConfigs 和 patchPerInstanceConfigs 方法會更新指定的個別執行個體設定,但不會將設定更新套用至相關聯的代管執行個體。當 MIG 收到重新建立或更新執行個體的指示時,就會將變更套用至執行個體。您可以手動套用更新,將變更套用至執行個體。
範例
您有一個名為 file-server 的檔案伺服器執行個體,這是有狀態 MIG fs-group 中的單一執行個體。該群組具有對應的個別執行個體設定,其中設定了有狀態資料磁碟。檔案伺服器原本只能從內部存取,但現在有使用者需要透過靜態 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 執行個體的個別執行個體設定:
- 新增有狀態外部 IP 設定,指向
file-server-ip位址保留。 - 現有的有狀態資料磁碟設定會維持不變。
設定更新尚未套用至 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"]
}
這個方法會將 file-server-ip 預留項目中設定的靜態外部 IP 位址指派給代管執行個體。這個方法會重新整理 file-server 執行個體,指派外部 IP 位址。
由於有狀態 IP 設定中的 autoDelete 設為 NEVER,因此即使您日後刪除執行個體,系統仍會保留 IP。
將靜態 IP 位址與 MIG 中的現有 VM 取消關聯
您可能需要取消靜態 IP 位址與現有 VM 的關聯,讓 VM 的網路介面變成臨時介面。這項功能適用於下列情境:
- 您重新架構應用程式,不再依賴靜態 IP 位址。
- 您誤將 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:(選用。Default.) 立即將變更套用至執行個體。如果使用--no-update-instance旗標,變更會保持未套用狀態,並在您稍後重新建立或套用更新至執行個體時套用。MINIMAL_ACTION:(選用) 將個別執行個體設定更新套用至執行個體時,至少執行指定動作。這個旗標只能與
--update-instance旗標搭配使用。這個值必須是下列其中一項:none:不採取任何行動。refresh:套用可在不停止執行個體的情況下套用的更新。restart:停止執行個體,然後重新啟動。replace:重新建立執行個體。
如未指定,系統會採用更新作業所需、干擾程度最低的動作。
範例
您的應用程式已透過 MIG (名為 example-group) 中 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
這項指令會執行以下作業:
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。
移除有狀態設定
如要從 MIG 中所有 VM 的有狀態政策中移除設定,請參閱下列文件:
- 如要只移除有狀態的 IP 位址,請參閱「將先前有狀態的 IP 位址宣告為無狀態」。
- 如要從有狀態政策中移除所有有狀態設定,請參閱「移除有狀態政策」。
如要從 MIG 中特定 VM 的個別執行個體設定中移除設定,請參閱下列文件:
- 如要只移除有狀態 IP 位址,請參閱「將靜態 IP 位址與 MIG 中的現有 VM 取消關聯」。
- 如要從個別執行個體設定中移除所有有狀態設定,請參閱「移除特定 VM 的有狀態設定」。
清理未使用的靜態 IP 位址
為群組中的代管執行個體設定有狀態 IP 位址時,您可以選擇在執行個體永久刪除時,要手動或自動釋出相關聯的靜態 IP 位址預留項目:
- 如要在永久刪除執行個體時自動釋出靜態 IP 位址預留項目,請將
autoDelete參數設為ON_PERMANENT_INSTANCE_DELETION。 - 如要手動釋出靜態 IP 位址預留項目,請將
autoDelete參數設為NEVER。如要清理未使用的靜態 IP 位址預留項目 (例如避免產生不必要的費用),請參閱下列文件:
如果您已指示 MIG 絕不刪除相關聯的 IP 預留項目,則在對應的執行個體或 MIG 不存在後,靜態 IP 位址仍會保留。
意見回饋
我們想瞭解您的用途、遇到的難題,以及對有狀態 MIG 的意見。歡迎透過 mig-discuss@google.com 與我們的團隊分享意見。
後續步驟
- 瞭解如何套用、查看及移除有狀態設定。
- 取得特定 MIG 及其代管執行個體的資訊,包括 VM 狀態和屬性。
- 進一步瞭解如何使用代管執行個體。