將永久磁碟設為有狀態,即可在享有 VM 執行個體自動修復和自動更新的同時,保留磁碟狀態。
如要將執行個體範本中定義的任何磁碟設為代管執行個體群組 (MIG) 中所有執行個體的具狀態磁碟,請將該磁碟的裝置名稱新增至 MIG 的具狀態政策。
您也可以設定每個執行個體的設定,為 MIG 中的執行個體個別設定具狀態的永久磁碟;這些磁碟不需要在執行個體範本中定義。
事前準備
- 請參閱使用有狀態 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 進行驗證」。
限制
具備有狀態設定的 MIG (即有狀態 MIG) 具有下列限制:
- 如果 MIG 具有有狀態的設定,就無法使用自動調度資源功能。
- 如要使用自動化輪替更新,請務必將取代方法設為
RECREATE。 - 對於有狀態區域 MIG,您必須停用主動式重新分配 (將重新分配類型設為
NONE),才能防止自動跨區域重新分配功能刪除有狀態執行個體。 如果您使用所有執行個體通用的設定覆寫執行個體範本屬性,就無法在任何個別執行個體設定中指定這些屬性,同時在群組的所有執行個體通用設定中指定這些屬性。
有狀態區域性 MIG 不會自動協調跨可用區容錯移轉。使用區域性 MIG 時,您可以將多餘的副本部署到多個可用區,並依賴應用程式的資料複製功能,讓有狀態的應用程式免於可用區故障的影響。
使用具狀態的 Persistent Disk 的時機
使用有狀態永久性磁碟,充分發揮 VM 自動修復和自動更新功能,同時保留磁碟中的資料。詳情請參閱有狀態 MIG 的使用案例。
設定有狀態的磁碟後,系統會在 VM 執行個體自動修復、更新和重新建立時保留這些磁碟。但這也表示有狀態磁碟無法從原始映像檔重新建立,也無法更新為新映像檔。
最佳做法是讓開機磁碟保持無狀態。
讓開機磁碟保持無狀態有以下優點:
- 您可以從原始映像檔重新建立開機磁碟,藉此修復已損毀的開機磁碟。自動修復功能會自動執行這類修復作業。
- 您可以將開機磁碟更新至最新映像檔,取得新版本和安全性修補程式。
詳情請參閱「自動修復」和「更新」一文,瞭解如何處理保留狀態。
為 MIG 中的所有 VM 設定有狀態永久磁碟
如要將執行個體範本中定義的磁碟設為有狀態,請將該磁碟的裝置名稱新增至 MIG 的有狀態政策。MIG 會將具有該裝置名稱的磁碟視為所有現有和未來 VM 執行個體的有狀態磁碟。
在建立 MIG 時設定有狀態磁碟
控制台
前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。
選取您的專案並點選 [繼續]。
點選「建立執行個體群組」。
選取「New managed instance group (stateful)」(新增代管執行個體群組 (有狀態))。
指定執行個體群組的 [名稱]。
選取「Instance template」(執行個體範本)。如果沒有可用的範本,請建立執行個體範本。
在「Number of instances」(執行個體數量) 欄位中,指定執行個體群組的執行個體數量。
「有狀態設定」部分會顯示執行個體範本中指定的磁碟。按一下磁碟,即可編輯有狀態設定。
- 在「Stateful」(有狀態) 下方,選取「Yes」(是)。
從「On permanent instance deletion」(永久刪除執行個體時) 下拉式選單中,選取在刪除 VM 執行個體時,要對具狀態磁碟執行的動作。可用的選項如下:
- 卸載磁碟:(預設) 請勿刪除磁碟,刪除 VM 時請卸載磁碟。
- 刪除磁碟:從執行個體群組永久刪除 VM 時,一併刪除有狀態磁碟,例如手動刪除受管理執行個體,或縮減群組大小時。
完成有狀態設定後,請按一下「完成」。
點選「建立」。
gcloud
如要指定執行個體範本中的哪些磁碟應在 MIG 建立時成為有狀態磁碟,請使用 gcloud compute instance-groups managed create 指令搭配 --stateful-disk 旗標:
gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
--template INSTANCE_TEMPLATE \
--size SIZE \
--stateful-disk device-name=DEVICE_NAME[,auto-delete=DELETE_RULE]
更改下列內容:
INSTANCE_GROUP_NAME:要建立的受管理執行個體群組名稱。INSTANCE_TEMPLATE:建立執行個體時要使用的執行個體範本名稱。SIZE:這個群組所需的 VM 初始數量。DEVICE_NAME:執行個體範本中指定的磁碟裝置名稱。DELETE_RULE:這個值會規定刪除 VM 時,有狀態磁碟應如何處理。可用選項包括:never:(預設值)。請勿刪除磁碟,而是在刪除 VM 時卸離磁碟。on-permanent-instance-deletion:當 VM 執行個體從執行個體群組中永久刪除時,系統會刪除磁碟,例如手動刪除代管執行個體,或縮減群組大小時。
無論刪除規則的值為何,在 VM 自動修復、更新和重新建立作業中,有狀態磁碟一律會保留。
範例
您想部署 12 個分片的資料庫,每個分片都有無狀態的開機磁碟,內含作業系統和資料庫二進位檔,以及有狀態的資料磁碟。操作步驟如下:
根據已預先安裝 OS 和資料庫的映像檔
img-example-db-v01,建立含有無狀態開機磁碟和有狀態資料磁碟的執行個體範本:gcloud compute instance-templates create example-database-template-v01 \ --image img-example-db-v01 \ --create-disk device-name=data-disk,mode=rw,image=empty10GBext4--create-disk旗標會指示 MIG 執行下列操作:- 從預先準備的空白 ext4 映像檔,為每個 VM 執行個體建立新的 10 GB 磁碟。
- 使用裝置名稱
data-disk,以讀寫模式將磁碟掛接到 VM。
依據執行個體範本建立 MIG,並將資料磁碟定義為有狀態:
gcloud compute instance-groups managed create example-database-group \ --template example-database-template-v01 \ --base-instance-name shard \ --size 12 \ --stateful-disk device-name=data-disk,auto-delete=on-permanent-instance-deletion
裝置名稱
data-disk是從執行個體範本取得。資料磁碟已設定為在永久刪除 VM 時一併刪除 (手動刪除執行個體或手動縮減群組大小時)。自動修復、更新和重新建立 VM 時,資料磁碟會保留下來。確認資料磁碟已在具狀態政策中設定:
gcloud compute instance-groups managed describe example-database-group baseInstanceName: shard ... name: example-database-group ... statefulPolicy: preservedState: disks: data-disk: autoDelete: ON_PERMANENT_INSTANCE_DELETION ...您可以看到有狀態政策將裝置名稱為
data-disk的磁碟宣告為有狀態,並在永久刪除 VM 時刪除這類磁碟。
Terraform
如果您尚未建立執行個體範本,指定 MIG 中每個 VM 的機型、開機磁碟映像檔、網路和其他 VM 屬性,請建立執行個體範本。
以下範例會建立具備有狀態磁碟的可用區 MIG。如要指定執行個體範本中的哪個磁碟應在建立 MIG 時成為有狀態,請加入 stateful_disk 區塊。如要進一步瞭解範例中使用的資源,請參閱 google_compute_instance_group_manager 資源。如要建立區域性 MIG,請使用 google_compute_region_instance_group_manager 資源。
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
REST
如要指定例項範本中的哪些磁碟應在 MIG 建立時保持狀態,請將這些磁碟納入 instanceGroupManagers.insert
方法的要求主體中的 statefulPolicy 欄位:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/instanceGroupManagers
{
"name": "NAME",
"versions": [
{
"instanceTemplate": "global/instanceTemplates/TEMPLATE"
}
],
"targetSize": SIZE,
"statefulPolicy": {
"preservedState": {
"disks": {
"DEVICE_NAME": {"autoDelete": "DELETE_RULE" },
"DEVICE_NAME": {"autoDelete": "DELETE_RULE" }
}
}
}
}
更改下列內容:
PROJECT:要求的專案 ID。ZONE:MIG 所在的可用區 (適用於可用區 MIG)。- 如果是區域 MIG,請將
zones/ZONE替換為regions/REGION,並指定 MIG 的區域。
- 如果是區域 MIG,請將
NAME:要建立的 MIG 名稱。TEMPLATE:建立執行個體時要使用的執行個體範本名稱。SIZE:這個群組所需的執行個體初始數量。DEVICE_NAME:執行個體範本中指定的磁碟裝置名稱。DELETE_RULE:這個值會規定刪除 VM 執行個體時,有狀態磁碟應如何處理。可用的選項如下:never:(預設值)。請勿刪除磁碟,刪除 VM 時請卸載磁碟。on_permanent_instance_deletion:在從執行個體群組永久刪除 VM 時,刪除有狀態磁碟,例如手動刪除代管執行個體,或縮減群組大小時。
範例
您想部署 12 個分片的資料庫,每個分片都有無狀態的開機磁碟,內含作業系統和資料庫二進位檔,以及有狀態的資料磁碟。請按照下列步驟操作。
使用
instanceTemplates.insert方法,根據映像檔img-example-db-v01建立執行個體範本,其中包含預先安裝 OS 和資料庫的無狀態開機磁碟,以及有狀態資料磁碟:POST https://compute.googleapis.com/compute/v1/projects/example-project/global/instanceTemplates { "name": "example-database-template-v01", "properties": { "machineType":"e2-standard-2", "disks": [ { "boot": true, "deviceName": "boot-disk", "initializeParams": { "sourceImage": "projects/example-project/global/images/mg-example-db-v01" } }, { "deviceName": "data-disk", "mode": "READ_WRITE", "initializeParams": { "sourceImage": "projects/example-project/global/images/empty10GBext4" } } ], "networkInterfaces": [ { "network": "global/networks/default" } ] } }執行個體範本中的資料磁碟具有裝置名稱
data-disk,並設定為從預先準備的空白 ext4 映像檔建立,且以讀取/寫入模式附加。依據執行個體範本建立 MIG,並使用
instanceGroupManagers.insert方法將資料磁碟定義為有狀態:POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers { "name": "example-database-group", "baseInstanceName": "shard", "versions": [ { "instanceTemplate": "global/instanceTemplates/example-database-template-v01" } ], "targetSize": 12, "statefulPolicy": { "preservedState": { "disks": { "data-disk": {"autoDelete": "ON_PERMANENT_INSTANCE_DELETION" } } } } }MIG 會建立 12 個執行個體,每個執行個體都有一個磁碟,且具備下列屬性:
- 從執行個體範本取得的裝置名稱
data-disk。 - 刪除規則:在刪除 VM 時刪除資料磁碟 (可能是手動刪除執行個體,或是手動縮減群組大小)。
- 每個代管執行個體的政策 (
preservedStateFromPolicy) 中保留的狀態項目,以便在自動修復、更新和重新建立執行個體時保留資料磁碟。
- 從執行個體範本取得的裝置名稱
使用
instanceGroupManagers.get方法,確認資料磁碟已在新instanceGroupManagers資源的有狀態政策中設定:GET https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-database-group
{ "name": "example-database-group", "baseInstanceName": "shard", ... "statefulPolicy": { "preservedState": { "disks": { "data-disk": {"autoDelete": "ON_PERMANENT_INSTANCE_DELETION" } } } } ... }您可以看到有狀態政策會將磁碟宣告為有狀態,並以裝置名稱
data-disk為名,且有規則會在永久刪除執行個體時刪除這類磁碟。
為現有 MIG 中的磁碟設定及更新有狀態設定
如果您在無狀態 MIG (沒有任何有狀態設定的 MIG) 上執行有狀態應用程式,可以將執行個體範本中定義的現有磁碟,設定為這個 MIG 中所有執行個體的有狀態磁碟。這樣一來,您就能在重新建立執行個體、自動修復及更新作業時保留磁碟,並視需要保留刪除作業的磁碟。
您可以執行下列作業:
- 將執行個體範本中定義的磁碟新增至現有 MIG 的有狀態政策,即可將這些磁碟宣告為有狀態。這會將具有指定裝置名稱的磁碟標示為有狀態,適用於 MIG 中所有現有和未來的執行個體。
- 更新有狀態政策,變更磁碟的有狀態設定。
MIG 會自動將有狀態政策中的更新設定,非同步套用至所有執行個體。更新有狀態政策中的磁碟設定時,不會中斷執行中的 VM。詳情請參閱「套用具狀態的政策更新」。
如果是區域 MIG,您必須先停用主動式跨可用區執行個體重新分配功能,才能設定有狀態磁碟。詳情請參閱區域群組如何處理保留的狀態。
控制台
前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。
按一下要為磁碟指定具狀態設定的執行個體群組名稱。
按一下「編輯」,修改代管執行個體群組。
按一下「具狀態和每個執行個體的設定」,展開該部分。
在「Group config」(群組設定) 區段中,按一下要設為有狀態的磁碟。在展開的部分中,執行下列操作:
- 在「Stateful」部分,選取「Yes」。
在「On permanent instance deletion」(永久刪除執行個體時) 清單中,選取 VM 執行個體刪除時,要對具狀態磁碟執行的動作。
- 卸載磁碟:(預設) 請勿刪除磁碟,刪除 VM 時請卸載磁碟。
刪除磁碟:從執行個體群組永久刪除 VM 時,一併刪除有狀態磁碟,例如手動刪除代管執行個體,或縮減群組大小時。
更新有狀態設定後,按一下「完成」。
按一下「儲存」即可完成更新。
gcloud
如要指定執行個體範本中的哪些磁碟應為有狀態,或更新現有 MIG 的有狀態磁碟設定,請使用一或多個 --stateful-disk 旗標搭配 gcloud compute instance-groups managed update 指令:
gcloud compute instance-groups managed update NAME \ --stateful-disk device-name=DEVICE_NAME[,auto-delete=DELETE_RULE]
更改下列內容:
NAME:要更新的受管理執行個體群組名稱。DEVICE_NAME:執行個體範本中指定的磁碟裝置名稱。DELETE_RULE:這個值會指定刪除 VM 執行個體時,有狀態磁碟應如何處理。可用的選項如下:never:(預設值)。請勿刪除磁碟,而是在執行個體刪除時卸離磁碟。on-permanent-instance-deletion:在執行個體從執行個體群組永久刪除時刪除具狀態磁碟,例如手動刪除代管執行個體,或縮減群組大小時。
如果指定裝置名稱已在具狀態政策中設定,指令會更新設定。
範例
您在名為 example-database-
group 的 MIG 上執行具有多個分片的資料庫。MIG 中的每個 VM 都會將分片儲存在裝置名稱為 data-disk 的額外磁碟上,這是由執行個體範本定義。MIG 沒有有狀態設定,且您希望在重新建立、自動修復及更新執行個體時保留資料磁碟。您也希望在刪除 VM 時,保護資料磁碟不遭刪除。
使用下列指令更新 MIG,將資料磁碟定義為具備狀態:
gcloud compute instance-groups managed update example-database-group \ --stateful-disk device-name=data-disk,auto-delete=never
因此,MIG 會自動將有狀態政策設定更新非同步套用至所有執行個體的資料磁碟。現在,系統會在自動修復、更新和重新建立執行個體時保留資料磁碟,並在刪除執行個體時卸離資料磁碟,因為
auto-delete規則已設為never。執行
gcloud compute instance-groups managed describe example-database-group指令,確認資料磁碟已在具狀態政策中設定。
REST
如要指定執行個體範本中的哪些磁碟應為有狀態,或更新現有 MIG 的有狀態磁碟設定,請使用 instanceGroupManagers.patch 方法,在 MIG 的有狀態政策中設定磁碟:
PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/instanceGroupManagers/NAME
{
"statefulPolicy": {
"preservedState": {
"disks": {
"DEVICE_NAME": {"autoDelete": "DELETE_RULE" },
"DEVICE_NAME": {"autoDelete": "DELETE_RULE" }
}
}
}
}
更改下列內容:
PROJECT:要求的專案 ID。ZONE:MIG 所在的可用區 (適用於可用區 MIG)。- 如果是區域 MIG,請將
zones/ZONE替換為regions/REGION,並指定 MIG 的區域。
- 如果是區域 MIG,請將
NAME:要更新的 MIG 名稱。DEVICE_NAME:磁碟的裝置名稱 (在執行個體範本中指定),您要更新該磁碟的有狀態設定。DELETE_RULE:這個值會指定刪除 VM 執行個體時,有狀態磁碟應如何處理。可用的選項如下:never:(預設值)。請勿刪除磁碟,而是在執行個體刪除時卸離磁碟。on-permanent-instance-deletion:在執行個體從執行個體群組永久刪除時刪除有狀態磁碟,例如手動刪除執行個體,或縮減群組大小時。
如果指定裝置名稱已在具狀態政策中設定,patch 方法會更新其設定。
範例
您在名為 example-database-
group 的 MIG 上執行具有多個分片的資料庫。MIG 中的每個 VM 都會將分片儲存在裝置名稱為 data-disk 的額外磁碟上,這是由執行個體範本定義。MIG 沒有有狀態設定,且您希望在重新建立、自動修復及更新執行個體時保留資料磁碟。您也希望在刪除 VM 時,保護資料磁碟不遭刪除。
修補 MIG,將資料磁碟定義為有狀態:
PATCH https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-database-group { "statefulPolicy": { "preservedState": { "disks": { "data-disk": {"autoDelete": "NEVER" } } } } }MIG 會自動將這項具狀態設定非同步套用至所有執行個體的資料磁碟。在自動修復、更新和重新建立執行個體時,資料磁碟會保留下來。由於
autoDelete規則設為NEVER,因此系統會在刪除執行個體時卸離資料磁碟。查看
instanceGroupManagers.get方法傳回的instanceGroupManagers資源,確認資料磁碟已在有狀態政策中設定。
將先前具備狀態的永久磁碟宣告為無狀態
您可能需要將有狀態磁碟設為無狀態。例如:
- 如果重新設計應用程式架構,將狀態移出磁碟。
- 如果您不小心將磁碟設為有狀態,並想還原。
如要將具有特定裝置名稱的所有磁碟宣告為無狀態,請從有狀態政策中移除磁碟的設定。
MIG 會自動將變更非同步套用至所有執行個體的有狀態政策。更新有狀態政策中的磁碟設定時,不會中斷執行中的 VM 執行個體。
詳情請參閱「套用具狀態的政策更新」。
控制台
前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。
按一下要移除磁碟有狀態設定的執行個體群組名稱。
按一下「編輯」,修改代管執行個體群組。
按一下「具狀態和每個執行個體的設定」,展開該部分。
在「Group config」(群組設定) 區段中,按一下要設為無狀態的有狀態磁碟。在展開的部分中,執行下列操作:
- 將「Stateful」選項變更為「No」。
- 按一下「完成」。
完成變更後,按一下「儲存」。
gcloud
如要指定要將 MIG 有狀態政策中的哪些磁碟設為無狀態,請搭配 gcloud compute instance-groups managed update 指令使用 --remove-stateful-disks 標記:
gcloud compute instance-groups managed update NAME \ --remove-stateful-disks DEVICE_NAME[,DEVICE_NAME,...]
更改下列內容:
NAME:要更新的 MIG 名稱。DEVICE_NAME:要從具狀態政策中移除,並視為無狀態的磁碟裝置名稱。您可以在清單中提供一或多個裝置名稱。
範例
您在名為「example-legacy-group」的 MIG 上,以多個節點執行舊版應用程式。MIG 中的每個 VM 都會將應用程式資料儲存在裝置名稱為 boot-disk 的開機磁碟上,您已在 MIG 的有狀態政策中將該磁碟設為有狀態。您已將應用程式資料移至額外磁碟,現在想讓開機磁碟成為無狀態磁碟,方便更新至新映像檔。
如要移除開機磁碟的有狀態設定,請更新受管理執行個體群組:
gcloud compute instance-groups managed update example-legacy-group \ --remove-stateful-disks boot-disk
MIG 會自動且非同步地移除群組中所有執行個體開機磁碟的裝置名稱有狀態設定 boot-disk。開機磁碟仍會附加至執行個體,但不再是具狀態的磁碟。當您重新建立或更新執行個體,或是執行個體自動修復時,MIG 會根據執行個體範本中指定的映像檔重新建立開機磁碟。
REST
如要指定要將 MIG 有狀態政策中的哪些磁碟設為無狀態,請使用 instanceGroupManagers.patch 方法,從 MIG 的有狀態政策中移除每個磁碟的設定:
PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/instanceGroupManagers/NAME
{
"statefulPolicy": {
"preservedState": {
"disks": {
"DEVICE_NAME": null,
...
}
}
}
}
更改下列內容:
PROJECT:要求的專案 ID。ZONE:MIG 所在的可用區 (適用於可用區 MIG)。- 如果是區域 MIG,請將
zones/ZONE替換為regions/REGION,並指定 MIG 的區域。
- 如果是區域 MIG,請將
NAME:要更新的 MIG 名稱。DEVICE_NAME:要從具狀態政策中移除的磁碟裝置名稱。提供null值會導致系統移除該磁碟的有狀態設定。你可以提供要移除的一或多個裝置名稱。
範例
您在名為「example-legacy-group」的 MIG 上,以多個節點執行舊版應用程式。MIG 中的每個 VM 都會將應用程式資料儲存在裝置名稱為 boot-disk 的開機磁碟上,您已在 MIG 的有狀態政策中將該磁碟設定為有狀態。您已將應用程式資料移至其他磁碟,現在想讓開機磁碟成為無狀態磁碟,方便更新至新映像檔。
如要移除開機磁碟的有狀態設定,請修補受管理執行個體群組:
PATCH https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-legacy-group
{
"statefulPolicy": {
"preservedState": {
"disks": {
"boot-disk": null
}
}
}
}
MIG 會自動且非同步地移除群組中所有執行個體開機磁碟的裝置名稱有狀態設定 boot-disk。開機磁碟仍會連結至執行個體,但不再是具狀態。當您重新建立或更新執行個體,或是執行個體自動修復時,MIG 會根據執行個體範本中指定的映像檔重新建立開機磁碟。
從 MIG 移除有狀態永久磁碟
您可能需要從 MIG 中的執行個體完全移除有狀態磁碟,例如重新架構應用程式,並將狀態移出該磁碟時。
MIG 不允許移除有狀態磁碟,因此您必須執行下列步驟:
- 從有狀態政策中移除磁碟的有狀態設定。這會讓具有指定裝置名稱的磁碟變成無狀態。
- 如要保留磁碟,請從 VM 卸載磁碟。
- 推出新的執行個體範本,不再使用指定裝置名稱定義磁碟。
為 MIG 中的 VM 個別設定有狀態永久磁碟
如要為 MIG 中的特定 VM 設定有狀態的永久磁碟,請將磁碟的裝置名稱新增至該 VM 的每個執行個體設定。更新 VM,套用個別執行個體設定並生效。
如需執行下列操作,個別為 MIG 中的特定 VM 設定有狀態的永久磁碟就很有用:
- 將現有工作負載 (攜帶現有磁碟) 從獨立 VM 遷移至有狀態 MIG,即可享有自動修復和輕鬆更新的優勢。
- 還原為 VM 個別設定的磁碟備份。
- 將其他具狀態磁碟暫時連接至特定 VM,用於測試、偵錯或複製資料。
將現有的有狀態磁碟新增至 MIG 中的新 VM
您可以將現有的有狀態磁碟新增至您在 MIG 中手動建立的新執行個體。這項功能有助於將有狀態應用程式從現有的獨立 VM 遷移至有狀態 MIG,例如:
- 建立執行個體範本,為所有 VM 執行個體設定通用設定。
- 卸離獨立執行個體的資料磁碟,然後刪除這些執行個體。如果開機磁碟含有應保留的狀態,您也可以卸離開機磁碟。
- 使用先前建立的執行個體範本,建立空白的 MIG。
在 MIG 中建立例項,並使用適當名稱和上一步驟中相關聯的磁碟。MIG 會執行下列動作,以回應您的要求:
- 使用提供的執行個體名稱,依據執行個體範本建立 VM。
- 區域 MIG 會在磁碟所在的可用區中建立 VM。如果磁碟是區域性的,區域性 MIG 會在磁碟的任一副本可用區中建立 VM。
- 使用提供的磁碟有狀態設定,建立每個執行個體設定。
- 將磁碟連接至新執行個體。
- 使用提供的執行個體名稱,依據執行個體範本建立 VM。
使用 gcloud CLI 或 REST 在 MIG 中手動建立特定執行個體時,可以新增現有的有狀態磁碟。MIG 會在建立 VM 時立即套用設定。
gcloud
如要建立自訂名稱的 VM,並將一或多個現有具狀態磁碟連結至該 VM,請使用 gcloud compute instance-groups managed create-instance 指令搭配一或多個 --stateful-disk 旗標。
gcloud compute instance-groups managed create-instance NAME \ --instance VM_NAME \ [--zone ZONE | --region REGION] \ --stateful-disk device-name=DEVICE_NAME,source=DISK[,mode=MODE][,auto-delete=DELETE_RULE]
更改下列內容:
NAME:您要在其中建立執行個體的 MIG 名稱。VM_NAME:要建立的新執行個體名稱。ZONE:MIG 所在的可用區 (適用於可用區 MIG)。REGION:MIG 所在的區域 (適用於區域 MIG)。DEVICE_NAME:附加磁碟時要使用的裝置名稱。DISK:現有永久磁碟的 URI,格式為projects/project-id/zones/zone/disks/disk-name,可附加至指定DEVICE_NAME下,適用於可用區磁碟;格式為projects/project-id/regions/region/disks/disk-name,適用於區域磁碟。MODE:指定磁碟模式。支援的選項包括:ro:唯讀。rw:(預設值)。讀取/寫入。
DELETE_RULE:這個值會指定刪除 VM 執行個體時,有狀態磁碟應如何處理。可用選項如下:never:(預設值)。請勿刪除磁碟,而是在刪除執行個體時卸離磁碟。on-permanent-instance-deletion:在執行個體從執行個體群組永久刪除時刪除有狀態磁碟,例如手動刪除執行個體,或縮減群組大小時。
無論刪除規則的值為何,有狀態磁碟一律會在執行個體自動修復、更新和重新建立作業時保留。
範例
您想為目前在名為 db-instance 的獨立 VM 上執行的資料庫伺服器啟用自動修復功能,該伺服器目前將資料儲存在名為 db-data-disk-1 的磁碟上。
建立具備自動修復功能的有狀態 MIG,在 MIG 內建立類似的 VM,然後將現有的資料磁碟 db-data-disk-1 以有狀態磁碟的形式連接至新執行個體:
- 在維護期間停止 VM (
db-instance)。 - 使用
db-instance設定建立名為db-template的執行個體範本。 - 從
db-instance卸載db-data-disk-1,然後刪除db-instance。 - 從
db-template建立空白 MIGexample-database-mig,並設定自動修復功能。 使用原始
db-instance名稱建立代管執行個體,並將db-data-disk-1附加為具狀態磁碟:gcloud compute instance-groups managed create-instance example-database-mig \ --instance db-instance \ --zone us-east1-c \ --stateful-disk device-name=data-disk,source=projects/example-project/zones/us-east1-c/disks/db-data-disk-1,auto-delete=never
這個指令會在 MIG 中建立執行個體
db-instance,並使用db-data-disk-1有狀態磁碟建立對應的個別執行個體設定,然後使用data-disk做為裝置名稱,將磁碟連結至新的 VM。
REST
如要在 MIG 中建立一或多個執行個體、設定自訂 VM 名稱,並將一或多個現有具狀態磁碟連結至這些執行個體,請使用 instanceGroupManagers.createInstances 方法。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/NAME/createInstances
{
"instances": [
{
"name": "VM_NAME",
"preservedState" : {
"disks": {
"DEVICE_NAME" : {
"source": "DISK",
"mode": "MODE",
"autoDelete": "DELETE_RULE"
},
...
}
}
},
...
]
}
更改下列內容:
PROJECT_ID:要求的專案 ID。ZONE:MIG 所在的可用區 (適用於可用區 MIG)。- 如果是區域 MIG,請將
zones/ZONE替換為regions/REGION,並指定 MIG 的區域。
- 如果是區域 MIG,請將
NAME:要在其中建立執行個體的 MIG 名稱。VM_NAME:要建立的執行個體名稱。DEVICE_NAME:附加磁碟時要使用的裝置名稱。DISK:現有永久磁碟的 URI,格式為projects/project-id/zones/zone/disks/disk-name(可用區磁碟) 或projects/project-id/regions/region/disks/disk-name(區域磁碟),可附加至指定DEVICE_NAME下。MODE:指定磁碟模式。支援的選項包括:READ_ONLY:唯讀。READ_WRITE:(預設值)。讀取/寫入。
DELETE_RULE:這個值會規定刪除 VM 時,有狀態磁碟應如何處理。可用選項如下:never:(預設值)。請勿刪除磁碟,而是在刪除 VM 時卸離磁碟。on-permanent-instance-deletion:在執行個體從執行個體群組永久刪除時刪除有狀態磁碟,例如手動刪除執行個體,或縮減群組大小時。
無論刪除規則的值為何,有狀態磁碟一律會在執行個體自動修復、更新和重新建立作業時保留。
範例
您想為目前在名為 db-instance 的獨立 VM 上執行的資料庫伺服器啟用自動修復功能,該伺服器目前將資料儲存在名為 db-data-disk-1 的磁碟上。
建立具備自動修復功能的有狀態 MIG,在 MIG 內建立類似的執行個體,然後將現有的資料磁碟 db-data-disk-1 連接至新的 VM 做為有狀態磁碟:
- 在維護期間停止 VM (
db-instance)。 - 使用
db-instance設定建立名為db-template的執行個體範本。 - 從
db-instance中卸載db-data-disk-1,然後刪除db-instance。 - 從
db-template建立空白 MIGexample-database-mig,並設定自動修復功能。 使用原始
db-instance名稱建立執行個體,並將db-data-disk-1連接為有狀態磁碟:POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-database-mig/createInstances { "instances": [ { "name": "db-instance", "preservedState" : { "disks": { "data-disk" : { "source": "projects/example-project/zones/us-east1-c/disks/db-data-disk-1", "mode": "READ_WRITE", "autoDelete": "never" } } } } ] }這個方法會在 MIG 中建立執行個體
db-instance,並使用db-data-disk-1有狀態磁碟建立對應的個別執行個體設定,然後使用data-disk做為裝置名稱,將磁碟附加至新執行個體。
為 MIG 中的 VM 個別新增、宣告及更換有狀態磁碟
如要為受管理執行個體個別設定具狀態磁碟,請在相關聯的每個執行個體設定中新增或更新具狀態磁碟設定。然後更新執行個體,將個別執行個體設定套用至 VM。
個別設定有狀態磁碟有助於執行下列工作:
- 將 MIG 外部的有狀態磁碟新增至該 MIG 中的 VM。
- 將先前無狀態的磁碟宣告為 MIG 中 VM 的有狀態磁碟。
- 在 MIG 中,將 VM 的有狀態磁碟替換為其他磁碟。
將 MIG 外部的有狀態磁碟新增至該 MIG 中的 VM。 如要將 MIG 外部的磁碟連結至受管理執行個體,請將磁碟的具狀態設定新增至相關聯的每個執行個體設定。套用設定後,MIG 會自動將磁碟附加至執行個體,並視為有狀態。
將先前無狀態的永久磁碟宣告為有狀態。 您可以為先前無狀態的磁碟 (目前已連結至 VM) 新增有狀態設定,包括裝置名稱和 URI,然後加入相關聯的每個執行個體設定,將該磁碟宣告為有狀態。套用設定後,MIG 就會開始將磁碟保留為有狀態。
以其他磁碟取代有狀態磁碟。 如果需要存取復原的備份,以另一個具狀態磁碟取代具狀態磁碟會很有幫助。您可以在每個執行個體設定中保留相同的裝置名稱,同時更新磁碟的 URI,藉此將一個有狀態磁碟換成另一個。套用更新的個別執行個體設定後,MIG 會卸離舊磁碟,並使用相同的裝置名稱掛接新磁碟。套用更新時,請選擇是否要讓執行個體繼續執行、重新啟動或重新建立。更換開機磁碟時,至少需要重新啟動 VM。
gcloud
如要為 MIG 中的 VM 個別設定有狀態磁碟,請在相關聯的每個執行個體設定中新增或更新有狀態磁碟設定。然後更新執行個體,套用設定。
如果執行個體沒有專屬設定,請使用 gcloud compute instance-groups managed instance-configs create 指令搭配一或多個 --stateful-disk 旗標:
gcloud compute instance-groups managed instance-configs create NAME \ --instance VM_NAME \ --stateful-disk device-name=DEVICE_NAME[,source=DISK][,mode=MODE][,auto-delete=DELETE_RULE] \ [--no-update-instance | --update-instance] \ [--instance-update-minimal-action MINIMAL_ACTION]
如果執行個體已有執行個體專屬設定,請使用 gcloud compute instance-groups managed instance-configs update 指令,並加上一或多個 --stateful-disk 旗標。
--update-instance 旗標 (預設) 會立即將變更套用至執行個體。如果您使用
--no-update-instance,變更不會套用,且會在您下次重新建立或更新執行個體時套用。
gcloud compute instance-groups managed instance-configs update NAME \ --instance VM_NAME \ --stateful-disk device-name=DEVICE_NAME[,source=DISK][,mode=MODE][,auto-delete=DELETE_RULE] \ [--no-update-instance | --update-instance] \ [--instance-update-minimal-action MINIMAL_ACTION]
更改下列內容:
NAME:代管執行個體群組的名稱。VM_NAME:要設定具狀態磁碟的 VM 執行個體名稱。DEVICE_NAME:用於附加磁碟的裝置名稱。DISK:現有永久磁碟的 URI,格式為projects/project-id/zones/zone/disks/disk-name(可用區磁碟) 和projects/project-id/regions/region/disks/disk-name(區域磁碟),可附加至指定DEVICE_NAME下方。如果執行個體設定中已定義裝置,則
source=DISK子旗標為選用。否則為必填。如果省略,目前設定的磁碟 URI 會維持不變。
MODE:指定磁碟模式。只有在指定source時,才能指定mode。 支援的選項包括:ro:唯讀。rw:(預設值)。讀取/寫入。
如省略此值,系統會為新的有狀態磁碟設定預設值;現有設定的值則維持不變。
DELETE_RULE:這個值會指定刪除 VM 時,有狀態磁碟應如何處理。可用選項如下:never:(預設值)。請勿刪除磁碟,而是在刪除執行個體時卸離磁碟。on-permanent-instance-deletion:從執行個體群組永久刪除執行個體時,刪除有狀態磁碟,例如手動刪除執行個體,或減少群組大小時。
如省略此值,系統會為新的有狀態磁碟設定預設值;現有設定的值則維持不變。
無論刪除規則的值為何,有狀態磁碟一律會在執行個體自動修復、更新和重新建立作業時保留。
MINIMAL_ACTION:將個別執行個體設定更新套用至執行個體時,至少要執行指定的動作。必須與--update-instance旗標搭配使用。這個值必須是下列其中一個:none:無動作。refresh:套用可套用的更新,不必停止 VM。restart:停止 VM,然後重新啟動。replace:重新建立 VM。
如果省略,系統會使用更新作業所需干擾程度最低的動作。
範例
目前附加的具狀態磁碟「data-disk-1」上的資料已損毀,您想從最新備份還原資料。您已從快照建立磁碟 data-disk-2,以取代有狀態 MIG example-database-mig 所管理執行個體 db-instance-1 中的損毀磁碟。原始磁碟 data-disk-1 會附加在 data-disk 裝置名稱下方,並套用永不刪除磁碟的自動刪除規則。
如要將 data-disk-1 替換為 data-disk-2,請執行下列指令:
gcloud compute instance-groups managed instance-configs update example-database-mig \ --instance db-instance-1 \ --stateful-disk device-name=data-disk,source=projects/example-project/zones/us-east1-c/disks/data-disk-2 \ --update-instance \ --instance-update-minimal-action restart
這項指令會執行以下作業:
- 更新
db-instance-1的每個執行個體設定:- 將裝置名稱為
data-disk的磁碟來源從data-disk-1(上次設定) 更新為data-disk-2(新設定)。 - 保留自動刪除規則,永遠不會刪除磁碟,因為
--stateful-disk旗標中省略了auto-delete參數,且刪除規則預設為never。
- 將裝置名稱為
- 由於包含
--update-instance標記,因此會立即將個別執行個體設定更新套用至db-instance-1VM。 MIG 會在同一個裝置名稱data-disk下卸離data-disk-1並附加data-disk-2。 - 由於最小動作設為
restart,MIG 會重新啟動db-instance-1執行個體來更新 VM,協助資料庫應用程式開始使用新磁碟。
Terraform
如要為 MIG 中的 VM 個別設定具狀態磁碟,請在相關聯的每個執行個體設定中新增具狀態磁碟設定。然後更新執行個體,套用設定。
如要為 VM 新增每個執行個體的設定,請使用 google_compute_per_instance_config 資源,並加入 preserved_state 區塊,如下列範例所示。
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
REST
如要為 MIG 中的 VM 個別設定有狀態磁碟,請在相關聯的每個執行個體設定中新增或更新有狀態磁碟設定。然後更新執行個體,套用設定。
如果指定 VM 尚未有個別執行個體設定,請使用instanceGroupManagers.updatePerInstanceConfigs 方法或regionInstanceGroupManagers.updatePerInstanceConfigs 方法,為一或多個磁碟設定具狀態的設定:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/NAME/updatePerInstanceConfigs
{
"perInstanceConfigs": [
{
"name": "VM_NAME",
"preservedState" : {
"disks": {
"DEVICE_NAME" : {
"source": "DISK",
"mode": "MODE",
"autoDelete": "DELETE_RULE"
},
...
}
},
"fingerprint: "FINGERPRINT"
},
...
]
}
如果指定 VM 已有個別執行個體設定,請使用 instanceGroupManagers.patchPerInstanceConfigs 方法或 regionInstanceGroupManagers.patchPerInstanceConfigs 方法,為一或多個磁碟設定具狀態的設定:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/NAME/patchPerInstanceConfigs
{
"perInstanceConfigs": [
{
"name": "VM_NAME",
"preservedState" : {
"disks": {
"DEVICE_NAME" : {
"source": "DISK",
"mode": "MODE",
"autoDelete": "DELETE_RULE"
},
...
}
},
"fingerprint: "FINGERPRINT"
},
...
]
}
更改下列內容:
PROJECT_ID:要求的專案 ID。ZONE:MIG 所在的可用區 (適用於可用區 MIG)。- 如果是區域 MIG,請將
zones/ZONE替換為regions/REGION,並指定 MIG 的區域。
- 如果是區域 MIG,請將
NAME:MIG 的名稱。VM_NAME:要設定具狀態磁碟的 VM 名稱。DEVICE_NAME:用於附加磁碟的裝置名稱。DISK:現有永久磁碟的 URI,格式為projects/project-id/zones/zone/disks/disk-name(可用區磁碟) 和projects/project-id/regions/region/disks/disk-name(區域磁碟),可附加至指定DEVICE_NAME下方。如果執行個體設定中已定義裝置,則
"source": "DISK"欄位為選填。否則為必填。如果省略
source欄位,目前設定的磁碟 URI 會維持不變。MODE:(選用。)指定磁碟模式。只有在提供source時,才能指定mode。支援的選項如下:READ_ONLY:唯讀。READ_WRITE:(預設值)。讀取/寫入。
如省略此值,系統會為新的有狀態磁碟設定預設值;現有設定的值則維持不變。
DELETE_RULE:(選用。)這個值會規定刪除 VM 時,有狀態磁碟應如何處理。可用選項如下:- 永不:(預設值)。請勿刪除磁碟,而是在刪除執行個體時卸離磁碟。
on-permanent-instance-deletion:當執行個體從執行個體群組永久刪除時,刪除有狀態磁碟,例如手動刪除執行個體,或縮減群組大小時。
如果省略
autoDelete欄位,系統會為新的有狀態磁碟設定預設值;現有設定的值則維持不變。無論刪除規則的值為何,有狀態磁碟一律會在執行個體自動修復、更新和重新建立作業時保留。
FINGERPRINT:(選填)。如果指定設定已存在,則為該設定的指紋。用於樂觀鎖定。如要查看最新指紋,請發出get()要求來擷取資源。
updatePerInstanceConfigs 和 patchPerInstanceConfigs 方法會更新指定的個別執行個體設定,但不會將設定更新套用至相關聯的受管理 VM。當系統指示 MIG 重新建立或更新執行個體時,變更就會套用至執行個體。您也可以選擇性更新執行個體,套用變更。
範例
目前附加的具狀態磁碟「data-disk-1」上的資料已損毀,您想從最新備份還原資料。您已從快照建立磁碟 data-disk-2,以取代有狀態 MIG example-database-mig 所管理執行個體 db-instance-1 中的損毀磁碟。原始磁碟 data-disk-1 會附加在 data-disk 裝置名稱下方,並套用永不刪除磁碟的自動刪除規則。
如要使用新磁碟更新 db-instance-1 的每個執行個體設定,請呼叫 patchPerInstanceConfigs 方法:
POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-database-mig/patchPerInstanceConfigs
{
"perInstanceConfigs": [
{
"name": "db-instance-1",
"preservedState" : {
"disks": {
"data-disk" : {
"source": "projects/example-project/zones/us-east1-c/disks/data-disk-2"
}
}
}
}
]
}
這個方法會修補 db-instance-1 的每個執行個體設定:
- 將裝置名稱為
data-disk的磁碟source從data-disk-1(上一個設定) 更新為data-disk-2(新設定)。 - 由於要求中省略了參數,因此
mode和autoDelete參數會維持不變。
設定更新尚未套用至 db-instance-1 VM。重新建立或更新執行個體時,MIG 會套用設定更新。
如要將個別執行個體設定更新套用至 db-instance-1 VM,請呼叫執行個體的 instanceGroupManagers.applyUpdatesToInstances 方法:
POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-database-mig/applyUpdatesToInstances
{
"instances": ["/zones/us-east1-c/instances/db-instance-1"],
"minimalAction": "RESTART"
}
這個方法會更新代管執行個體保留的狀態,在相同的裝置名稱下分離 data-disk-1 並附加 data-disk-2。data-disk由於 minimalAction 設為 RESTART,這個方法會重新啟動 db-instance-1 VM,讓資料庫應用程式開始使用新磁碟。
為個別 VM 分離有狀態磁碟或宣告為無狀態
您可能需要卸離有狀態磁碟,或將磁碟設定為個別 VM 的無狀態磁碟。例如:
- 如果重新設計應用程式架構,將狀態移出磁碟。
- 如果誤將磁碟設為有狀態,並想還原設定。
如要卸載有狀態磁碟或將其設為無狀態,請從相關聯的每個執行個體設定中移除磁碟的有狀態設定,或刪除整個每個執行個體設定。套用變更時:
- 如果執行個體範本中未定義磁碟,MIG 會卸離磁碟。
- 無論設定中的自動刪除規則為何,從每個執行個體設定中刪除 MIG 的設定時,MIG 都不會刪除磁碟。
- 如果磁碟是由執行個體範本定義,MIG 會將磁碟視為無狀態,也就是說,在後續的執行個體重建、更新或自動修復事件中,MIG 會從執行個體範本中的來源重建磁碟。
從個別執行個體設定中移除磁碟設定時,除非您明確選擇這麼做,否則系統不會重新啟動正在執行的 VM 執行個體。
詳情請參閱「套用執行個體專屬的設定更新」。
gcloud
如要卸載有狀態磁碟,或為 MIG 中的 VM 個別宣告無狀態磁碟,請從相關的每個執行個體設定中移除有狀態磁碟設定,或刪除整個每個執行個體設定 (如果其中不含任何其他狀態)。更新執行個體以套用設定。
如要從相關聯的每個執行個體設定中移除有狀態磁碟設定,請使用 gcloud compute instance-groups managed instance-configs update 指令搭配 --remove-stateful-disks 標記。--update-instance 旗標 (預設) 會立即將變更套用至執行個體。如果您使用
--no-update-instance,變更不會套用,且會在您下次重新建立或更新執行個體時套用。
gcloud compute instance-groups managed instance-configs update NAME \ --instance VM_NAME \ --remove-stateful-disks DEVICE_NAME[,DEVICE_NAME,...] \ [--no-update-instance | --update-instance] \ [--instance-update-minimal-action MINIMAL_ACTION]
更改下列內容:
NAME:MIG 的名稱。VM_NAME:要移除具狀態設定的 VM 名稱。DEVICE_NAME:用於附加磁碟的裝置名稱。MINIMAL_ACTION:使用個別執行個體設定更新 VM 時,至少要執行指定動作。只能與--update-instance搭配使用。這個值必須是下列其中一個:none:無動作。refresh:套用可套用的更新,不必停止 VM。restart:停止 VM,然後重新啟動。replace:重新建立 VM。
如果省略,系統會使用更新作業所需干擾程度最低的動作。
範例
您在名為 example-legacy-group 的 MIG 上執行舊版應用程式。MIG 中的每個 VM 都會將應用程式資料儲存在裝置名稱為 boot-disk 的開機磁碟中。您使用每個執行個體設定,將每個開機磁碟設定為具備狀態。您已將應用程式資料移至額外磁碟,現在想讓每個 VM 的開機磁碟都無狀態,方便更新至新映像檔。
針對每個執行個體 (例如 node-1),執行下列指令:
gcloud compute instance-groups managed instance-configs update example-legacy-group \ --instance node-1 \ --remove-stateful-disks boot-disk \ --update-instance
這項指令會執行以下作業:
- 從
node-1的每個執行個體設定中,移除裝置名稱為boot-disk的磁碟設定。 - 由於包含
--update-instance標記,因此會立即將個別執行個體設定更新套用至node-1VM。MIG 會從代管執行個體的preservedStateFromConfig移除開機磁碟,並將開機磁碟視為無狀態,也就是說,在後續的執行個體重新建立、更新或自動修復事件中,MIG 會從執行個體範本中的開機映像檔重新建立磁碟。
REST
如要卸載有狀態磁碟,或個別為 MIG 中的 VM 宣告無狀態磁碟,請從相關的每個執行個體設定中移除有狀態磁碟設定,或刪除整個每個執行個體設定 (如果該設定不含任何其他狀態)。然後更新執行個體,套用設定。
如要從相關聯的每個執行個體設定中移除有狀態磁碟設定,請使用 instanceGroupManagers.patchPerInstanceConfigs 方法或 regionInstanceGroupManagers.patchPerInstanceConfigs 方法:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/NAME/patchPerInstanceConfigs
{
"perInstanceConfigs": [
{
"name": "VM_NAME",
"preservedState" : {
"disks": {
"DEVICE_NAME" : null
},
...
},
"fingerprint: "FINGERPRINT"
...
}
]
}
更改下列內容:
PROJECT_ID:要求的專案 ID。ZONE:MIG 所在的可用區 (適用於可用區 MIG)。- 如果是區域 MIG,請將
zones/ZONE替換為regions/REGION,並指定 MIG 的區域。
- 如果是區域 MIG,請將
NAME:MIG 的名稱。VM_NAME:要移除具狀態設定的 VM 名稱。DEVICE_NAME:用於附加磁碟的裝置名稱。FINGERPRINT:如果指定設定已存在,則為該設定的指紋。用於樂觀鎖定。如要查看最新指紋,請發出get()要求來擷取資源。
patchPerInstanceConfigs 方法會修補指定的每個執行個體設定,但不會將變更套用至相關聯的 VM。重新建立或更新執行個體時,系統會將變更套用至 VM。您可以手動套用變更,也可以使用自動輪流更新。
範例
您在名為 example-legacy-group 的 MIG 上執行舊版應用程式。MIG 中的每個 VM 都會將應用程式資料儲存在裝置名稱為 boot-disk 的開機磁碟中。將獨立 VM 遷移至 MIG 時,您在 MIG 的每個執行個體設定中,將開機磁碟設為有狀態。您已將應用程式資料移至額外磁碟,現在想讓每個 VM 的開機磁碟無狀態,方便更新至新映像檔。
呼叫執行個體的
patchPerInstanceConfigs方法,例如,針對開機磁碟的node-1,使用null值:POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-legacy-group/patchPerInstanceConfigs { "perInstanceConfigs": [ { "name": "node-1", "preservedState" : { "disks": { "boot-disk" : null } } } ] }這個方法會從
node-1的每個執行個體設定中,移除裝置名稱為boot- disk的磁碟設定。設定更新尚未套用至node-1VM 執行個體。設定更新會在下次重新建立或更新執行個體時套用。如要將個別執行個體設定更新套用至
node-1VM 執行個體,請呼叫執行個體的instanceGroupManagers.applyUpdatesToInstances方法:POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-legacy-group/applyUpdatesToInstances { "instances": ["/zones/us-east1-c/instances/node-1"] }MIG 會從
preservedStateFromConfig執行個體中移除開機磁碟,並將該磁碟視為無狀態。node-1也就是說,在後續的執行個體重新建立、更新或自動修復事件中,MIG 會從執行個體範本的開機映像檔重新建立磁碟。
帳單
從 MIG 分離有狀態永久磁碟時,Compute Engine 不會自動刪除這類磁碟。系統仍會針對已卸離的永久磁碟佈建空間向您收費。為避免磁碟卸離後產生磁碟空間費用,請刪除磁碟。詳情請參閱「磁碟定價」。
意見回饋
我們想瞭解您對有狀態 MIG 的使用案例、面臨的挑戰和意見。歡迎傳送電子郵件至 mig-discuss@google.com,與我們的團隊分享意見。
後續步驟
- 為 MIG 中的 VM 設定有狀態中繼資料。
- 瞭解如何套用、查看及移除有狀態的設定。
- 取得特定 MIG 及其受管理執行個體的相關資訊,包括 VM 狀態和屬性。
- 進一步瞭解MIG 和如何使用代管型執行個體。