在 MIG 中設定有狀態永久磁碟


將永久磁碟設定為有狀態,即可享有 VM 執行個體自動修復和自動更新功能,同時保留磁碟狀態。

如要將執行個體範本中定義的任何磁碟設為代管執行個體群組 (MIG) 中所有執行個體的具狀態磁碟,請將該磁碟的裝置名稱新增至 MIG 的具狀態政策

您也可以設定每個執行個體的設定,為 MIG 中的執行個體個別設定有狀態永久磁碟;這些磁碟不需要在執行個體範本中定義。

事前準備

限制

具備有狀態磁碟的 MIG 有下列限制:

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

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

  • 有狀態的區域性 MIG 不會自動協調跨區域容錯移轉。使用區域性 MIG 時,您可以將多餘的副本部署到多個可用區,並依賴應用程式的資料複製功能,讓有狀態的應用程式免於可用區故障影響。

使用有狀態永久磁碟的時機

使用有狀態永久磁碟,即可享有 VM 自動修復自動更新功能,同時保留磁碟上的資料。詳情請參閱有狀態 MIG 的使用案例

設定有狀態磁碟後,系統會在 VM 執行個體自動修復、更新和重新建立時保留這些磁碟。但這也表示無法從原始映像檔重新建立有狀態磁碟,也無法更新至新映像檔。

建議的最佳做法是讓開機磁碟保持無狀態。

將開機磁碟設為無狀態有下列優點:

  • 您可以從原始映像檔重新建立開機磁碟,修復已損毀的開機磁碟。自動修復功能會自動執行這類修復作業。
  • 您可以將開機磁碟更新至最新映像檔,取得新版本和安全性修補程式。

詳情請參閱自動修復更新如何處理保留狀態。

為 MIG 中的所有 VM 設定有狀態永久磁碟

如要將執行個體範本中定義的任何磁碟設為有狀態,請將該磁碟的裝置名稱新增至 MIG 的有狀態政策。 MIG 會將具有該裝置名稱的磁碟視為所有現有和未來 VM 執行個體的有狀態磁碟。

在建立 MIG 時設定有狀態磁碟

主控台

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

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

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

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

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

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

  6. 選取「執行個體範本」。如果沒有可用的範本,請建立執行個體範本

  7. 在「Number of instances」(執行個體數量) 底下,指定執行個體群組的執行個體數量。

  8. 「Stateful configuration」(具狀態設定) 區段會顯示執行個體範本中指定的磁碟。按一下磁碟即可編輯其有狀態設定。

    1. 在「Stateful」(有狀態) 下方,選取「Yes」(是)
    2. 從「On permanent instance deletion」(永久刪除執行個體時) 下拉式選單中,選取在刪除 VM 執行個體時要對有狀態磁碟執行的動作。可用的選項如下:

      • 卸離磁碟:(預設) 請勿刪除磁碟,而是刪除 VM 時卸離磁碟。
      • 刪除磁碟:從執行個體群組永久刪除 VM 時,一併刪除有狀態磁碟,例如手動刪除代管執行個體,或縮減群組大小時。
    3. 完成有狀態設定後,按一下「完成」

  9. 點選「建立」

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 個分片的資料庫,每個分片都有包含作業系統和資料庫二進位的無狀態開機磁碟,以及有狀態的資料磁碟。操作步驟如下:

  1. 建立執行個體範本,其中包含以映像檔 img-example-db-v01 為基礎的無狀態開機磁碟 (已預先安裝 OS 和資料庫),以及有狀態的資料磁碟:

    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 執行下列操作:

    1. 從預先準備的空白 ext4 映像檔,為每個 VM 執行個體建立新的 10 GB 磁碟。
    2. 使用裝置名稱 data-disk,以讀寫模式將磁碟附加至 VM。
  2. 依據執行個體範本建立 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 執行個體。系統會在自動修復、更新及重新建立 VM 時保留資料磁碟。

  3. 確認資料磁碟已在具狀態政策中設定:

    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 資源

resource "google_compute_instance_group_manager" "default" {
  name               = "example-database-group"
  base_instance_name = "shard"
  target_size        = 12
  zone               = "us-central1-f"
  version {
    instance_template = google_compute_instance_template.default.id
    name              = "primary"
  }
  stateful_disk {
    device_name = "data-disk"
    delete_rule = "ON_PERMANENT_INSTANCE_DELETION"
  }
}

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

REST

如要指定執行個體範本中的哪些磁碟應在建立 MIG 時具備狀態,請將這些磁碟納入 instanceGroupManagers.insert method 的要求主體中的 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 的區域。
  • NAME:要建立的 MIG 名稱。
  • TEMPLATE:建立執行個體時要使用的執行個體範本名稱。
  • SIZE:這個群組所需的初始執行個體數量。
  • DEVICE_NAME:執行個體範本中指定的磁碟裝置名稱。
  • DELETE_RULE:這個值會指定刪除 VM 執行個體時,有狀態磁碟應如何處理。可用的選項如下:

    • never:(預設值)。請勿刪除磁碟,刪除 VM 時請卸離磁碟。
    • on_permanent_instance_deletion:在 VM 從執行個體群組永久刪除時,刪除有狀態磁碟,例如手動刪除代管執行個體,或縮減群組大小時。

示例

您想部署 12 個分片的資料庫,每個分片都有包含作業系統和資料庫二進位的無狀態開機磁碟,以及有狀態的資料磁碟。請按照下列步驟操作。

  1. 使用 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 映像檔建立,並以讀取/寫入模式附加。

  2. 依據執行個體範本建立 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),以便在自動修復、更新和重新建立執行個體時保留資料磁碟。
  3. 使用 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,您必須先停用主動式跨可用區執行個體重新分配功能,才能設定有狀態磁碟。詳情請參閱區域群組如何處理保留狀態

主控台

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

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

  2. 按一下要為磁碟指定具狀態設定的執行個體群組名稱。

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

  4. 在「Stateful configuration」(有狀態設定) 下方,展開要設為有狀態的磁碟。

    1. 在「Stateful」(有狀態) 下方,選取「Yes」(是)
    2. 從「On permanent instance deletion」(永久刪除執行個體時) 下拉式選單中,選取在刪除 VM 執行個體時,要對有狀態磁碟執行的動作。

      • 卸離磁碟:(預設) 請勿刪除磁碟,而是刪除 VM 時卸離磁碟。
      • 刪除磁碟:從執行個體群組永久刪除 VM 時,一併刪除有狀態磁碟,例如手動刪除代管執行個體,或縮減群組大小時。

    3. 更新有狀態設定後,按一下「完成」

  5. 按一下「儲存」即可完成更新。

gcloud

如要指定執行個體範本中的哪些磁碟應為有狀態,或更新現有 MIG 的有狀態磁碟設定,請搭配 gcloud compute instance-groups managed update 指令使用一或多個 --stateful-disk 旗標:

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 時,資料磁碟不會一併遭到刪除。

  1. 使用下列指令更新 MIG,將資料磁碟定義為具備狀態:

    gcloud compute instance-groups managed update example-database-group \
      --stateful-disk device-name=data-disk,auto-delete=never
    

    因此,MIG 會自動且非同步地將有狀態政策設定更新套用至所有執行個體的資料磁碟。現在,自動修復、更新及重新建立執行個體時,資料磁碟都會保留,且刪除執行個體時,資料磁碟會分離,因為 auto-delete 規則設為 never

  2. 執行 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 的區域。
  • NAME:要更新的 MIG 名稱。
  • DEVICE_NAME:磁碟的裝置名稱 (在執行個體範本中指定),您要更新該磁碟的有狀態設定。
  • DELETE_RULE:這個值會指定刪除 VM 執行個體時,有狀態磁碟應如何處理。可用的選項如下:

    • never:(預設值)。請勿刪除磁碟,而是在執行個體遭到刪除時卸離磁碟。
    • on-permanent-instance-deletion:當執行個體從執行個體群組永久刪除時,刪除有狀態磁碟,例如手動刪除執行個體,或縮減群組大小時。

如果指定裝置名稱已在具狀態政策中設定,patch 方法會更新其設定。

示例

您在名為 example-database- group 的 MIG 上執行具有多個分片的資料庫。MIG 中的每個 VM 都會將分片儲存在裝置名稱為 data-disk 的額外磁碟上,這是由執行個體範本定義。MIG 沒有有狀態的設定,且您希望在重新建立、自動修復及更新執行個體時保留資料磁碟。您也希望在刪除 VM 時,資料磁碟不會一併遭到刪除。

  1. 修補 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,因此系統會在刪除執行個體時卸離資料磁碟。

  2. 查看 instanceGroupManagers.get 方法傳回的 instanceGroupManagers 資源,確認資料磁碟已在具狀態政策中設定

將先前有狀態的永久磁碟宣告為無狀態

您可能需要將有狀態磁碟設定為無狀態磁碟。例如:

  • 如果重新架構應用程式,將狀態移出磁碟。
  • 如果您不小心將磁碟設為有狀態,但想還原設定。

如要將具有特定裝置名稱的所有磁碟宣告為無狀態,請從有狀態政策中移除磁碟的設定。

MIG 會自動將變更非同步套用至所有執行個體的有狀態政策。更新有狀態政策中的磁碟設定時,不會中斷執行中的 VM 執行個體。

詳情請參閱「套用有狀態政策更新」。

主控台

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

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

  2. 按一下要移除磁碟有狀態設定的執行個體群組名稱。

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

  4. 在「Stateful configuration」(有狀態設定) 下方,展開要設為無狀態的有狀態磁碟。

    1. 將「Stateful」選項變更為「No」
    2. 按一下 [完成]
  5. 完成變更後,按一下「儲存」

gcloud

如要指定要將 MIG 有狀態政策中的哪些磁碟設為無狀態,請搭配 --remove-stateful-disks 標記使用 gcloud compute instance-groups managed update 指令

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 的區域。
  • 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 不允許移除有狀態磁碟,因此您必須執行下列步驟:

  1. 從有狀態政策中移除磁碟的有狀態設定。這會讓具有指定裝置名稱的磁碟成為無狀態。
  2. 如要保留磁碟,請從 VM 卸離磁碟。
  3. 推出新的執行個體範本,不再使用指定裝置名稱定義磁碟。

為 MIG 中的 VM 個別設定有狀態永久磁碟

如要為 MIG 中的特定 VM 設定有狀態的永久磁碟,請將磁碟的裝置名稱新增至該 VM 的每個執行個體設定。更新 VM,套用個別執行個體設定並生效。

如果您需要執行下列操作,個別為 MIG 中的特定 VM 設定有狀態永久磁碟會很有幫助:

  • 將現有工作負載 (攜帶現有磁碟) 從獨立 VM 遷移至有狀態 MIG,即可享有自動修復和輕鬆更新的優勢。
  • 還原為 VM 個別設定的磁碟備份。
  • 暫時將額外的有狀態磁碟附加至特定 VM,以進行測試、偵錯或複製資料。

將現有有狀態磁碟新增至 MIG 中的新 VM

您可以將現有的有狀態磁碟新增至您在 MIG 中手動建立的新執行個體。這項功能有助於將有狀態應用程式從現有的獨立 VM 遷移至有狀態 MIG,例如:

  1. 建立執行個體範本,為所有 VM 執行個體設定通用設定。
  2. 卸離獨立執行個體的資料磁碟,然後刪除這些執行個體。如果開機磁碟含有應保留的狀態,您也可以卸離開機磁碟
  3. 使用先前建立的執行個體範本,建立空白 MIG。
  4. 在 MIG 中建立執行個體,並使用適當名稱和上一步的相關聯磁碟。MIG 會執行下列動作來回應您的要求:

    1. 使用提供的執行個體名稱,從執行個體範本建立 VM。
      • 區域 MIG 會在磁碟所在的可用區中建立 VM。如果磁碟是區域性的,區域性 MIG 會在磁碟的任一副本可用區中建立 VM。
    2. 使用提供的磁碟有狀態設定,建立每個執行個體的設定
    3. 將磁碟連結至新執行個體。

使用 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:要附加至指定 DEVICE_NAME 的現有永久磁碟 URI,格式為區域磁碟的 projects/project-id/zones/zone/disks/disk-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 以有狀態磁碟的形式連接至新執行個體:

  1. 在維護期間停止 VM db-instance
  2. 使用 db-instance 設定建立名為 db-template執行個體範本
  3. db-data-disk-1db-instance 中分離,然後刪除 db-instance
  4. db-template 建立空白 MIG example-database-mig,並設定自動修復功能。
  5. 使用原始 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 的區域。
  • NAME:要在其中建立執行個體的 MIG 名稱。
  • VM_NAME:要建立的執行個體名稱。
  • DEVICE_NAME:附加磁碟時要使用的裝置名稱。
  • DISK:要附加至指定 DEVICE_NAME 下方的現有永久磁碟 URI,格式為區域磁碟的 projects/project-id/zones/zone/disks/disk-name 或區域磁碟的 projects/project-id/regions/region/disks/disk-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:

  1. 在維護期間停止 VM db-instance
  2. 使用 db-instance 設定建立名為 db-template執行個體範本
  3. db-instance 中卸載 db-data-disk-1,然後刪除 db-instance
  4. db-template 建立空白 MIG example-database-mig,並設定自動修復功能。
  5. 建立具有原始 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:要附加至指定 DEVICE_NAME 的現有永久磁碟 URI,格式為區域磁碟的 projects/project-id/zones/zone/disks/disk-name,以及地區磁碟的 projects/project-id/regions/region/disks/disk-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

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

  1. 更新 db-instance-1 的每個執行個體設定:
    1. 將磁碟的來源從 data-disk-1 (上次設定) 更新為 data-disk-2 (新設定),裝置名稱為 data-disk
    2. 保留自動刪除規則,永遠不會刪除磁碟,因為 --stateful-disk 標記中省略了 auto-delete 參數,且刪除規則預設為 never
  2. 由於包含 --update-instance 標記,因此系統會立即將個別執行個體設定更新套用至 db-instance-1 VM。MIG 會在同一個裝置名稱 data-disk 下卸離 data-disk-1 並附加 data-disk-2
  3. 由於最少動作設為 restart,MIG 會重新啟動 db-instance-1 執行個體來更新 VM,協助資料庫應用程式開始使用新磁碟。

Terraform

如要為 MIG 中的 VM 個別設定具狀態磁碟,請在相關聯的每個執行個體設定中新增具狀態磁碟設定。然後更新執行個體,套用設定

如要為 VM 新增每個執行個體的設定,請使用 google_compute_per_instance_config 資源,並加入 preserved_state 區塊,如下列範例所示。

resource "google_compute_per_instance_config" "default" {
  instance_group_manager = google_compute_instance_group_manager.default.name
  zone                   = google_compute_instance_group_manager.default.zone
  name                   = "db-instance"
  preserved_state {
    disk {
      device_name = "data-disk"
      source      = google_compute_disk.default.id
      delete_rule = "NEVER"
    }
  }
}

如要瞭解如何套用或移除 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 的區域。
  • NAME:MIG 的名稱。
  • VM_NAME:要設定具狀態磁碟的 VM 名稱。
  • DEVICE_NAME:用於附加磁碟的裝置名稱。
  • DISK:要附加至指定 DEVICE_NAME 的現有永久磁碟 URI,格式為區域磁碟的 projects/project-id/zones/zone/disks/disk-name,以及地區磁碟的 projects/project-id/regions/region/disks/disk-name

    如果執行個體的個別執行個體設定中已定義裝置,則 "source": "DISK" 欄位為選用。否則為必填。

    如果省略 source 欄位,目前設定的磁碟 URI 就不會變更。

  • MODE:(選用)。指定磁碟模式。只有在指定 source 時,才能指定 mode。支援的選項如下:

    • READ_ONLY:唯讀。
    • READ_WRITE:(預設值)。讀取/寫入。

    如未填寫此欄位,系統會為新的有狀態磁碟設定預設值;現有設定的值則維持不變。

  • DELETE_RULE:(選用)。這個值會規定刪除 VM 時,有狀態磁碟應如何處理。可用選項如下:

    • never:(預設值)。請勿刪除磁碟,而是在執行個體遭刪除時卸離磁碟。
    • on-permanent-instance-deletion:從執行個體群組永久刪除執行個體時,一併刪除有狀態磁碟,例如手動刪除執行個體,或縮減群組大小時。

    如果省略 autoDelete 欄位,系統會為新的有狀態磁碟設定預設值;現有設定的值則維持不變。

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

  • FINGERPRINT:(選用)。如果指定設定已存在,則為該設定的指紋。用於樂觀鎖定。如要查看最新指紋,請發出 get() 要求來擷取資源。

updatePerInstanceConfigspatchPerInstanceConfigs 方法會更新指定的個別執行個體設定,但不會將設定更新套用至相關聯的受管理 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 的每個執行個體設定:

  1. 將裝置名稱為 data-disk 的磁碟 sourcedata-disk-1 (上一個設定) 更新為 data-disk-2 (新設定)。
  2. 由於要求中省略了參數,因此 modeautoDelete 參數維持不變。

設定更新尚未套用至 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 下卸離 data-disk-1 和連結 data-disk-2。由於 minimalAction 設為 RESTART,這個方法會重新啟動 db-instance-1 VM,讓資料庫應用程式開始使用新磁碟。

為個別 VM 分離有狀態磁碟或宣告為無狀態

您可能需要卸離有狀態磁碟,或將磁碟設定為無狀態,以供個別 VM 使用。例如:

  • 如果重新架構應用程式,將狀態移出磁碟。
  • 如果您不小心將磁碟設為有狀態,但想還原設定。

如要卸離有狀態磁碟或將其設為無狀態,請從相關聯的每個執行個體設定中移除磁碟的有狀態設定,或刪除整個每個執行個體設定。套用變更後:

  • 如果執行個體範本中未定義磁碟,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

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

  1. node-1 的每個執行個體設定中,移除裝置名稱為 boot-disk 的磁碟設定。
  2. 由於包含 --update-instance 旗標,因此系統會立即將個別執行個體設定更新套用至 node-1 VM。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 的區域。
  • NAME:MIG 的名稱。
  • VM_NAME:要移除有狀態設定的 VM 名稱。
  • DEVICE_NAME:用於附加磁碟的裝置名稱。
  • FINGERPRINT:如果指定設定已存在,則為該設定的指紋。用於樂觀鎖定。如要查看最新指紋,請發出 get() 要求來擷取資源。

patchPerInstanceConfigs 方法會修補指定的每個執行個體設定,但不會將變更套用至相關聯的 VM。重新建立或更新執行個體時,系統會將變更套用至 VM。您可以手動套用變更,也可以使用自動滾動式更新。

示例

您在名為 example-legacy-group 的 MIG 上執行舊版應用程式。MIG 中的每個 VM 都會將應用程式資料儲存在裝置名稱為 boot-disk 的開機磁碟中。將獨立 VM 遷移至 MIG 時,您在 MIG 的每個執行個體設定中,將開機磁碟設為有狀態。您已將應用程式資料移至額外磁碟,現在想為每個 VM 建立無狀態開機磁碟,方便更新至新映像檔。

  1. 呼叫執行個體的 patchPerInstanceConfigs 方法,例如,針對開機磁碟的 null 值為 node-1

    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-1 VM 執行個體。設定更新會在下次重新建立或更新執行個體時套用。

  2. 如要將個別執行個體設定更新套用至 node-1 VM 執行個體,請呼叫執行個體的 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 的意見。請前往以下網址,並與我們的團隊分享您的寶貴意見:mig-discuss@google.com

後續步驟