執行個體中繼資料可用於設定應用程式的屬性,以及透過中繼資料伺服器與應用程式通訊。舉例來說,您可以使用中繼資料設定虛擬機器 (VM) 執行個體的身分、環境變數、叢集架構相關資訊,或 VM 負責的資料範圍。
在代管執行個體群組 (MIG) 中設定有狀態的中繼資料,即可確保在代管執行個體自動修復、更新和重新建立事件期間,保留執行個體專屬的中繼資料。
如要為 MIG 中的 VM 執行個體個別設定有狀態的中繼資料,請在每個執行個體的設定中設定,然後套用設定。您可以在建立執行個體時,或針對現有代管執行個體設定個別執行個體設定。套用每個執行個體的設定後,MIG 會將有狀態中繼資料儲存在受管理執行個體的「保留的設定狀態」(preservedStateFromConfig
) 欄位中。
事前準備
- 請參閱使用有狀態 MIG 的時機,以及有狀態 MIG 的運作方式。
-
如果尚未設定驗證,請先完成設定。
「驗證」是指驗證身分的程序,確認您有權存取 Trusted Cloud by S3NS 服務和 API。如要從本機開發環境執行程式碼或範例,請選取下列任一選項,向 Compute Engine 進行驗證:
Select the tab for how you plan to use the samples on this page:
gcloud
-
安裝 Google Cloud CLI,然後 使用同盟身分登入 gcloud CLI。 登入後,執行下列指令初始化 Google Cloud CLI:
gcloud init
- Set a default region and zone.
Terraform
如要在本機開發環境中使用本頁的 Terraform 範例,請安裝並初始化 gcloud CLI,然後使用您的使用者憑證設定應用程式預設憑證。
安裝 Google Cloud CLI,然後 使用同盟身分登入 gcloud CLI。
Create local authentication credentials for your user account:
gcloud auth application-default login
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 的憑證。
安裝 Google Cloud CLI,然後 使用同盟身分登入 gcloud CLI。
詳情請參閱 Trusted Cloud 驗證說明文件中的「Authenticate for using REST」。
限制
具備有狀態中繼資料的 MIG 有下列限制:
具有有狀態設定的 MIG (即有狀態的 MIG) 具有下列限制:
- 如果 MIG 具有有狀態的設定,則無法使用自動調度資源功能。
- 如要使用自動輪替更新,請將替代方法設為
RECREATE
。 - 對於有狀態的地區 MIG,您必須停用主動式重新分配功能 (將重新分配類型設為
NONE
),才能防止系統自動跨區域重新分配,進而刪除有狀態的執行個體。 如果您使用所有執行個體通用的設定來覆寫執行個體範本屬性,就無法在任何個別執行個體設定中指定這些屬性,也無法同時在群組的所有執行個體通用設定中指定這些屬性。
永久刪除執行個體 (手動或透過調整大小),MIG 不會保留執行個體的有狀態中繼資料。
在建立執行個體時設定有狀態中繼資料
在 MIG 中手動建立執行個體時,請設定有狀態中繼資料。這項功能有助於將獨立 VM 上的有狀態應用程式遷移至有狀態 MIG,以及建立有狀態執行個體。
在 MIG 中手動建立執行個體並提供有狀態的中繼資料時,MIG 會執行下列工作:
- 使用提供的執行個體名稱,從執行個體範本建立代管執行個體。
- 使用提供的有狀態中繼資料建立個別執行個體設定,並在執行個體上設定該中繼資料。
- 將有狀態中繼資料儲存在相關聯受管理執行個體的設定 (
preservedStateFromConfig
) 中保留的狀態。
gcloud
如要建立具有自訂名稱的受管理執行個體,並在該 VM 上設定具狀態中繼資料,請使用
gcloud compute instance-groups managed create-instance
指令搭配--stateful-metadata
旗標。gcloud compute instance-groups managed create-instance NAME \ --instance INSTANCE_NAME \ --stateful-metadata KEY=VALUE[,KEY=VALUE,...]
更改下列內容:
NAME
:要在其中建立執行個體的 MIG 名稱INSTANCE_NAME
:要建立的執行個體名稱KEY
和VALUE
:有狀態的中繼資料鍵/值組合,可為執行個體個別設定,並加入執行個體範本中定義的中繼資料- 您在此設定的鍵值優先於執行個體範本中的任何衝突鍵值
示例
您需要部署節點叢集
example-cluster
,該叢集可以下列兩種模式之一運作:active
或standby
。您可以使用中繼資料,為叢集中的每個 VM 個別設定模式,例如:mode:active
。您也可以使用logging
中繼資料鍵,為每個節點設定詳細程度不同的記錄,這個鍵可以設為basic
或elaborate
。節點上的應用程式會使用執行個體中繼資料中的值進行設定。如要建立具有詳細記錄的有效節點
node-12
,請執行下列指令:gcloud compute instance-groups managed create-instance example-cluster \ --instance node-12 \ --stateful-metadata mode=active,logging=elaborate
這項指令會在
example-cluster
MIG 中建立 VMnode-12
,並為新執行個體設定兩個中繼資料鍵值組合mode:active
和logging:elaborate
。Terraform
如要建立具有自訂名稱的代管執行個體,並在該 VM 上設定具狀態中繼資料,請使用
google_compute_per_instance_config
資源。以下範例使用區域 MIG。如果還沒有可用區 MIG,請建立可用區 MIG,並將 VM 限制在單一可用區。
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
REST
如要在 MIG 中建立一或多個具有自訂 VM 名稱的代管執行個體,並在這些 VM 上個別設定具狀態中繼資料,請使用
instanceGroupManagers.createInstances
方法。如果是區域 MIG,請使用regionInstanceGroupManagers.createInstances
方法。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/NAME/createInstances { "perInstanceConfigs": [ { "name": "INSTANCE_NAME", "preservedState" : { "metadata": { "KEY" : "VALUE", ... } } }, ... ] }
更改下列內容:
PROJECT_ID
:要求的專案 IDZONE
:MIG 所在的區域 (適用於區域 MIG)- 如果是區域 MIG,請將
zones/ZONE
替換為regions/REGION
,並指定 MIG 的區域
- 如果是區域 MIG,請將
NAME
:要在其中建立執行個體的 MIG 名稱INSTANCE_NAME
:要建立的執行個體名稱KEY
和VALUE
:有狀態的中繼資料鍵/值組合,可為執行個體個別設定,並加入執行個體範本中定義的中繼資料- 您在此設定的鍵值優先於執行個體範本中的任何衝突鍵值
示例
您需要部署節點叢集
example-cluster
,該叢集可以下列兩種模式之一運作:active
或standby
。您可以使用中繼資料,為叢集中的每個 VM 個別設定模式,例如:mode:active
。您也可以使用logging
中繼資料鍵,為每個節點設定詳細程度不同的記錄,這個鍵可以設為basic
或elaborate
。節點上的應用程式會使用執行個體中繼資料中的值進行設定。如要建立具有詳細記錄功能的有效節點
node-12
,請執行下列方法:POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-cluster/createInstances { "instance": [ { "name": "node-12", "preservedState" : { "metadata": { "mode":"active", "logging":"elaborate" } } } ] }
這個方法會在
example-cluster
MIG 中建立 VM (node-12
),並為新執行個體設定兩個中繼資料鍵值組合 (mode:active
和logging:elaborate
)。為現有 VM 執行個體個別設定、修改及移除有狀態的中繼資料
如要為 MIG 中的現有執行個體設定、修改或移除具狀態中繼資料,請在相關聯的每個執行個體設定中設定中繼資料,然後更新執行個體來套用設定。
gcloud
如要為 MIG 中的 VM 執行個體個別設定有狀態中繼資料,請在相關聯的執行個體專屬設定中設定或移除有狀態中繼資料。如果您同時將設定套用至執行個體 (
--update-instance
),可以選擇讓執行個體繼續執行、重新啟動或重新建立。如果您未套用設定 (--no-update-instance
),變更不會生效,直到您重新建立或更新執行個體為止。如果特定執行個體沒有執行個體專屬設定,請使用
gcloud compute instance-groups managed instance-configs create
指令搭配下列其中一個旗標:gcloud compute instance-groups managed instance-configs create NAME \ --instance INSTANCE_NAME \ --stateful-metadata KEY=VALUE[,KEY=VALUE,...] \ [--no-update-instance | --update-instance] \ [--instance-update-minimal-action MINIMAL_ACTION]
如果特定執行個體已有執行個體專屬設定,請使用
gcloud compute instance-groups managed instance-configs update
指令,並搭配下列參數:- 設定或修改中繼資料的
--stateful-metadata
旗標,或 --remove-stateful-metadata
旗標,用於移除執行個體專屬的有狀態中繼資料。
gcloud compute instance-groups managed instance-configs update NAME \ --instance INSTANCE_NAME \ [--stateful-metadata KEY=VALUE[,KEY=VALUE,...]] \ [--remove-stateful-metadata KEY[,KEY,...]] \ [--no-update-instance | --update-instance] \ [--instance-update-minimal-action MINIMAL_ACTION]
更改下列內容:
NAME
:代管執行個體群組的名稱。INSTANCE_NAME
:要設定有狀態中繼資料的執行個體名稱。KEY=VALUE
:有狀態中繼資料鍵值組合,除了執行個體範本中定義的中繼資料,還可個別為執行個體設定。您在此設定的鍵值會優先於執行個體範本中的任何衝突鍵值。KEY
:要從個別執行個體設定中移除的執行個體專屬有狀態中繼資料鍵。- 如果執行個體範本未定義鍵的值,系統會在套用變更時,從執行個體中完全移除鍵/值組合。
- 如果執行個體範本定義了鍵的值,系統會在套用變更時,將執行個體範本的值設定在執行個體上。
MINIMAL_ACTION
:將個別執行個體設定更新套用至執行個體時,至少要執行指定動作。只有在使用--update-instance
旗標時,才能設定MINIMAL_ACTION
。這個值必須是下列其中之一:none
:不執行任何動作。refresh
:套用可套用的更新,不必停止執行個體。restart
:停止執行個體,然後重新啟動。replace
:重新建立執行個體。
如果省略這個值,系統會使用更新作業所需的干擾程度最低動作。
示例
您有一組節點 (
example-cluster
),可透過active
或standby
兩種模式運作。您可以使用中繼資料,為叢集中的每個 VM 個別設定模式,例如:mode:active
。您也可以使用可設為basic
或elaborate
的logging
中繼資料鍵,為每個節點設定詳細記錄的程度。每個節點上的應用程式都會取用執行個體中繼資料中的值。執行個體範本會定義
mode:active
和logging:basic
中繼資料,做為所有執行個體的預設值。您已在叢集中的node-12
VM 執行個體設定中設定logging:elaborate
。現在,您想將node-12
切換為待機模式,並將這個 VM 的記錄切換為basic
。如要將
node-12
執行個體切換為待命狀態,並將記錄功能切換為基本模式,請執行下列指令:gcloud compute instance-groups managed instance-configs update example-cluster \ --instance node-12 \ --stateful-metadata mode=standby \ --remove-stateful-metadata logging
這項指令會執行以下作業:
- 在與
example-cluster
MIG 中的 VM 相關聯的個別執行個體設定中,設定mode:standby
中繼資料node-12
。 - 從
node-12
執行個體的每個執行個體設定中移除logging:elaborate
中繼資料。 - 將個別執行個體設定變更套用至
node-12
VM:- 根據設定,設定
mode:standby
中繼資料。 - 從執行個體範本設定
logging:basic
中繼資料,因為logging
鍵的值不再由每個執行個體的設定定義。
- 根據設定,設定
- 由於省略了
--no-update-instance
標記,變更預設會立即套用至 VM。 - 由於省略了
--instance-update-minimal-action
標記,且系統預設會選擇干擾性最低的更新動作 (在本例中為refresh
),因此 VM 會在更新期間持續執行。
REST
如要為 MIG 中現有的 VM 執行個體個別設定有狀態的中繼資料,請在相關聯的每個執行個體設定中設定或移除中繼資料。然後更新執行個體,套用設定。
如果指定執行個體尚未有執行個體專屬設定,請使用
instanceGroupManagers.updatePerInstanceConfigs
方法 搭配有狀態中繼資料:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/NAME/updatePerInstanceConfigs { "perInstanceConfigs": [ { "name": "INSTANCE_NAME", "preservedState" : { "metadata": { "KEY": "VALUE", ... } }, "fingerprint: "FINGERPRINT" }, ... ] }
如果指定執行個體已有個別執行個體設定,請使用
instanceGroupManagers.patchPerInstanceConfigs
方法POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/NAME/patchPerInstanceConfigs { "perInstanceConfigs": [ { "name": "INSTANCE_NAME", "preservedState" : { "metadata": { "KEY": "VALUE", ... } }, "fingerprint: "FINGERPRINT" }, ... ] }
更改下列內容:
PROJECT_ID
:要求的專案 ID。ZONE
:MIG 所在的區域 (適用於可用區 MIG)。- 如果是區域 MIG,請將
zones/ZONE
替換為regions/REGION
,並指定 MIG 的區域。
- 如果是區域 MIG,請將
NAME
:MIG 的名稱。INSTANCE_NAME
:要設定具狀態中繼資料的 VM 名稱。KEY
和VALUE
:有狀態的中繼資料鍵值組合,可為執行個體個別設定,此外,您也可以在執行個體範本中定義中繼資料。- 針對執行個體範本中已存在的鍵定義的具狀態中繼資料值,會覆寫執行個體範本中的值。
- 執行個體範本中的其他中繼資料項目不受影響,仍可使用。
- 提供
null
做為值,即可從每個執行個體的設定中移除金鑰。
FINGERPRINT
:(選用)。如果指定設定已存在,則為該設定的指紋。用於樂觀鎖定。
updatePerInstanceConfigs
和patchPerInstanceConfigs
方法會更新指定的個別執行個體設定,但不會將設定更新套用至相關聯的 VM 執行個體。更新或重新建立執行個體時,系統會將變更套用至 VM。如要將變更套用至 VM,您可以手動套用更新,或在主動或隨機模式下使用 Updater。示例
您有一組節點 (
example-cluster
),可透過active
或standby
兩種模式運作。您可以使用中繼資料,為叢集中的每個 VM 個別設定模式,例如:mode:active
。您也可以使用可設為basic
或elaborate
的logging
中繼資料鍵,為每個節點設定詳細記錄的程度。每個節點上的應用程式都會取用執行個體中繼資料中的值。執行個體範本會定義
mode:active
和logging:basic
中繼資料,做為所有執行個體的預設值。您已在叢集中的node-12
VM 執行個體設定中設定logging:elaborate
。現在,您想將node-12
切換至待機模式,並將這個執行個體的記錄切換至basic
。如要將
node-12
VM 切換為待命狀態,並將記錄檔切換為基本記錄檔,請使用patchPerInstanceConfigs
方法修補相關聯的個別執行個體設定:POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-cluster/patchPerInstanceConfigs { "perInstanceConfigs": [ { "name": "node-12", "preservedState" : { "metadata": { "mode": "standby", "logging": null } } } ] }
這個方法會執行下列作業:
- 在與 VM 相關聯的個別執行個體設定中,於
example-cluster
MIG 內設定mode:standby
中繼資料node-12
。 - 從每個執行個體的設定中移除
logging:elaborate
中繼資料,因為提供的值為null
。
設定更新尚未套用至
node-12
VM 執行個體。下次重新建立或更新執行個體時,或使用主動自動更新時,系統就會套用設定更新。如要將個別執行個體設定更新套用至
node-12
VM 執行個體,請對該執行個體呼叫instanceGroupManagers.applyUpdatesToInstances
方法:POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-cluster/applyUpdatesToInstances { "instances": ["/zones/us-east1-c/instances/node-12"], "minimalAction": "NONE" }
這個方法會將更新後的個別執行個體設定套用至
node-12
VM:- 根據每個執行個體的設定,設定
mode:standby
中繼資料。 - 從執行個體範本設定
logging:basic
中繼資料,因為logging
鍵的值不再由每個執行個體的設定定義。 - 由於
minimalAction
設為NONE
,因此 VM 會在更新期間持續執行,MIG 也能使用更新所需的最低干擾動作。更新執行個體中繼資料需要REFRESH
動作,這不會中斷執行中的執行個體。
意見回饋
我們想要瞭解您的用途、難題和有關有狀態 MIG 的意見。請前往以下網址,並與我們的團隊分享您的寶貴意見:mig-discuss@google.com。
後續步驟
- 進一步瞭解如何儲存及擷取執行個體中繼資料。
- 為 MIG 中的 VM 設定有狀態永久磁碟。
- 瞭解如何套用、查看及移除有狀態設定。
- 進一步瞭解MIG 和如何使用代管型執行個體。
除非另有註明,否則本頁面中的內容是採用創用 CC 姓名標示 4.0 授權,程式碼範例則為阿帕契 2.0 授權。詳情請參閱《Google Developers 網站政策》。Java 是 Oracle 和/或其關聯企業的註冊商標。
上次更新時間:2025-08-08 (世界標準時間)。
[[["容易理解","easyToUnderstand","thumb-up"],["確實解決了我的問題","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["缺少我需要的資訊","missingTheInformationINeed","thumb-down"],["過於複雜/步驟過多","tooComplicatedTooManySteps","thumb-down"],["過時","outOfDate","thumb-down"],["翻譯問題","translationIssue","thumb-down"],["示例/程式碼問題","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["上次更新時間:2025-08-08 (世界標準時間)。"],[[["Instance metadata allows for setting properties and communicating with applications through the metadata server, such as configuring VM identity, environment variables, or cluster architecture."],["Stateful metadata in managed instance groups (MIGs) preserves instance-specific metadata during autohealing, updates, and recreate events, stored in the `preservedStateFromConfig` field."],["Stateful metadata can be set individually for VMs within a MIG using per-instance configurations, either during instance creation or on existing instances, with per-instance configurations taking priority over instance template settings."],["Modifications to stateful metadata for existing instances involve updating the per-instance configuration, which can then be applied to the instance with options to keep the instance running, restart, or recreate it."],["A MIG with stateful configuration can not be used with autoscaling, must use `RECREATE` for rolling updates, and proactive redistribution must be disabled for stateful regional MIGs."]]],[]] -