在 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. 「有狀態設定」部分會顯示執行個體範本中指定的磁碟。按一下磁碟即可編輯其有狀態設定。

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

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

  9. 按一下 [建立]。

gcloud

如要指定在建立 MIG 時,哪些執行個體範本磁碟應為有狀態,請使用 --stateful-disk 標記搭配 gcloud compute instance-groups managed create 指令:

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 時保留資料磁碟。

  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. 在「有狀態」下方,選取「是」
    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. 在「有狀態設定」下方,展開要設為無狀態的磁碟。

    1. 將「有狀態」選項變更為「否」
    2. 按一下 [完成]
  5. 完成變更後,按一下「儲存」

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 的區域。
  • 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 個別設定有狀態永久磁碟

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

如果您需要:

  • 將現有工作負載 (帶有現有磁碟) 從獨立 VM 遷移至有狀態的 MIG,以便享有自動修復和簡易更新的優勢。
  • 還原磁碟備份,這些磁碟是為個別 VM 設定的。
  • 將額外的有狀態磁碟暫時連接至特定 VM,以便測試、偵錯或複製資料。

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

您可以將現有的有狀態磁碟新增至在 MIG 中手動建立的新執行個體。這項功能可用於將有狀態應用程式從現有的獨立虛擬機器遷移至有狀態的 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 有狀態磁碟建立相應的個別執行個體設定,然後將磁碟連結至新的 VM,並使用 data-disk 做為裝置名稱。

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-data-disk-1db-instance 中分離,然後刪除 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 的磁碟來源,從 data-disk-1 (上次設定) 更新為 data-disk-2 (新設定)。
    2. 由於 auto-delete 參數已在 --stateful-disk 標記中省略,且預設刪除規則為 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 的無狀態磁碟。例如:

  • 如果您重新架構應用程式,將狀態從磁碟移出。
  • 如果您誤將磁碟設為有狀態,並想要還原設定。

從相關聯的個別執行個體設定中移除磁碟的含狀態設定,或刪除整個個別執行個體設定,即可卸離含狀態磁碟,或讓個別 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 卸離有狀態磁碟,或個別宣告 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 方法,例如為 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-1 VM 執行個體。設定更新會在下次重建或更新執行個體時套用。

  2. 如要將個別執行個體設定更新套用至 node-1 VM 執行個體,請為執行個體呼叫 instanceGroupManagers.applyUpdatesToInstances method

    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 會從 node-1 執行個體的 preservedStateFromConfig 中移除開機磁碟,並將磁碟視為無狀態。也就是說,在後續的執行個體重新建立、更新或自動修復事件中,MIG 會從執行個體範本中的開機映像檔重新建立磁碟。

意見回饋

我們想瞭解您對有狀態 MIG 的使用情境、難題和意見。請前往以下網址,並與我們的團隊分享您的寶貴意見:mig-discuss@google.com

後續步驟