執行個體中繼資料可用於設定應用程式屬性,並透過中繼資料伺服器與應用程式通訊。舉例來說,您可以使用中繼資料設定虛擬機器 (VM) 執行個體的 ID、環境變數、叢集架構相關資訊,或 VM 負責的資料範圍。
在代管執行個體群組 (MIG) 中設定有狀態中繼資料,可確保在代管執行個體的自動修復、更新和重新建立事件中,保留特定執行個體的中繼資料。
在 MIG 中為 VM 例項個別設定有狀態的中繼資料,方法是在個別例項設定中設定並套用設定。您可以在建立執行個體時,或針對現有的受管理執行個體設定個別執行個體設定。套用每個執行個體設定後,MIG 會將有狀態中繼資料儲存在管理執行個體的保留設定狀態 (preservedStateFromConfig
) 欄位中。
事前準備
- 請參閱使用有狀態的 MIG 的時機和有狀態的 MIG 如何運作。
-
如果尚未設定,請先設定驗證機制。驗證是指驗證身分,以便存取 Google Cloud 服務和 API 的程序。如要在本機開發環境中執行程式碼或範例,您可以選取下列任一選項,向 Compute Engine 進行驗證:
Select the tab for how you plan to use the samples on this page:
gcloud
-
After installing the Google Cloud CLI, initialize it by running the following command:
gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
- Set a default region and zone.
Terraform
To use the Terraform samples on this page in a local development environment, install and initialize the gcloud CLI, and then set up Application Default Credentials with your user credentials.
- Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
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.
For more information, see Set up authentication for a local development environment.
REST
To use the REST API samples on this page in a local development environment, you use the credentials you provide to the gcloud CLI.
After installing the Google Cloud CLI, initialize it by running the following command:
gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
For more information, see Authenticate for using REST in the Google Cloud authentication documentation.
-
限制
具備有狀態中繼資料的 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
:除了在執行個體範本中定義的中繼資料外,您還可以為個別執行個體設定有狀態的中繼資料鍵/值組合- 您在此設定的值優先於執行個體範本中的任何衝突值
示例
您需要部署可在 active
或 standby
兩種模式下運作的節點叢集 example-cluster
。您可以使用中繼資料,為叢集中的每個 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 中建立 VM node-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
:除了在執行個體範本中定義的中繼資料外,您還可以為個別執行個體設定有狀態的中繼資料鍵/值組合- 您在此設定的值優先於執行個體範本中的任何衝突值
示例
您需要部署可在 active
或 standby
兩種模式下運作的節點叢集 example-cluster
。您可以使用中繼資料,為叢集中的每個 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
:重新建立執行個體。
如果省略,系統會使用更新作業所需的干擾程度最低的動作。
示例
您有一個可在兩種模式 (active
或 standby
) 中運作的節點叢集 example-cluster
。您可以使用中繼資料,為叢集中的每個 VM 個別設定模式,例如:mode:active
。您也可以使用 logging
中繼資料鍵,設定每個節點的詳細記錄方式,該鍵可設為 basic
或 elaborate
。每個節點上的應用程式會使用執行個體中繼資料中的值。
執行個體範本會定義 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 中,針對與 VMnode-12
相關聯的個別執行個體設定,設定mode:standby
中繼資料。 - 從
node-12
執行個體的個別執行個體設定中移除logging:elaborate
中繼資料。 - 將個別執行個體設定變更套用至
node-12
VM:- 根據設定,設定
mode:standby
中繼資料。 - 設定執行個體範本中的
logging:basic
中繼資料,因為logging
鍵的值不再由個別執行個體設定定義。
- 根據設定,設定
- 由於省略標記
--no-update-instance
,因此系統會根據預設立即將變更套用至 VM。 - 由於省略了
--instance-update-minimal-action
標記,且預設會為更新選擇最不干擾的動作,因此 VM 會在更新期間持續執行,在本例中為refresh
。
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,您可以手動套用更新,也可以在主動或隨機模式下使用更新工具。
示例
您有一個可在兩種模式 (active
或 standby
) 中運作的節點叢集 example-cluster
。您可以使用中繼資料,為叢集中的每個 VM 個別設定模式,例如:mode:active
。您也可以使用 logging
中繼資料鍵,設定每個節點的詳細記錄方式,該鍵可設為 basic
或 elaborate
。每個節點上的應用程式會使用執行個體中繼資料中的值。
執行個體範本會定義 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 } } } ] }
該方法會執行以下作業:
- 在
example-cluster
MIG 中,針對與 VMnode-12
相關聯的個別執行個體設定,設定mode:standby
中繼資料。 - 由於提供的值為
null
,因此會從個別執行個體設定中移除logging:elaborate
中繼資料。
設定更新尚未套用至 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 和如何使用代管型執行個體。