將現有工作負載遷移至有狀態的代管執行個體群組


如果您在獨立 (未管理) Compute Engine 虛擬機器 (VM) 執行個體上有現有的有狀態應用程式,可以將該應用程式遷移至有狀態的代管執行個體群組 (MIG)

設定有狀態的 MIG 並使用受管理的執行個體,可享有下列優點:

  • 保留狀態:即使重新建立執行個體,也能保留執行個體名稱、磁碟和中繼資料。
  • 自動修復:在同一區域內,自動重建有失敗工作負載的 VM。
  • 自動更新:將新的執行個體設定或軟體版本順利部署至 MIG 中的 VM。

限制

  • 您必須停止現有的 VM,才能遷移現有的磁碟,或者拍攝一致的快照,供新的受管理執行個體使用。
  • 如要重複使用現有 VM 的名稱,您必須先刪除這些 VM。
  • 應用程式必須能夠在使用相同機器類型的 VM 上執行。如果現有應用程式需要不同機器類型的多個執行個體,請建立多個執行個體範本和 MIG,每個機器類型一個。
  • 應用程式必須在 VM 啟動時啟動。您可以使用自訂映像檔或開機指令碼。以下將說明每個選項。
  • 如果您選擇建立有狀態的開機磁碟,就無法在 MIG 中推出開機映像檔更新,以更新作業系統或軟體。
  • 您必須在多個可用區建立備援副本,並設定應用程式層級的資料複寫功能,才能實現多可用區高可用性。具狀態的 MIG 只會自動修復同一個可用區的執行個體,不會協調跨可用區的備援作業。
  • 您無法將自動調度資源功能與有狀態的 MIG 搭配使用。
  • 查看有狀態 MIG 的限制

費用

本教學課程使用 Google Cloud 的計費元件,包括:

  • Compute Engine

您可以使用 Pricing Calculator 來根據預測使用量產生預估費用。

事前準備

本指南會使用 gcloud CLI。您可以使用 Cloud Shell 存取這項工具。或者,如果您想改為在本機電腦上執行 gcloud CLI,請下載並安裝最新版 gcloud CLI

遷移作業總覽

  1. 瞭解有狀態 MIG 的組成元件。
  2. 查看現有設定,判斷常見的 VM 規格。
  3. 您可以選擇建立自訂映像檔,做為一般開機磁碟映像檔。
  4. 建立執行個體範本,為 MIG 指定常見的 VM 設定。
  5. 建立空白的 MIG。
  6. 將現有的 VM 轉換為 MIG 中的代管執行個體,包括個別執行個體設定。
  7. 為 MIG 設定自動修復功能,以提高應用程式的復原能力。
  8. 如要減少設定的額外負擔,您可以選擇以有狀態政策取代個別執行個體的設定。

元件

您可以透過多個元件設定有狀態 MIG 的代管執行個體:

  • 執行個體範本包含 MIG 中 VM 的常見設定,包括機器類型、開機磁碟映像檔、額外磁碟的選用規格,以及選用的啟動指令碼
  • 您可以選擇建立自訂映像檔,其中包含應用程式,並做為一般開機磁碟映像檔。
  • 每個執行個體設定包含特定執行個體的有狀態項目。舉例來說,您可以將現有磁碟連結至群組中的特定執行個體。這個磁碟可能已從現有的獨立執行個體中卸離,或從快照或區域磁碟中復原。您不需要在執行個體範本中定義磁碟的裝置名稱。
  • 選用的有狀態政策包含常見的有狀態項目。舉例來說,它會將所有磁碟定義為具有特定裝置名稱 (如執行個體範本中所定義),並為群組中的所有執行個體定義為有狀態。

您需要使用哪些元件?

您需要使用的元件取決於現有的設定。下表概略列出在一個或多個執行個體上執行的應用程式,可能採用的部分設定。在本教學課程的後續部分,您將檢查現有的設定,判斷需要使用哪些設定。

開機磁碟上是否有任何必須維護的有狀態資料或設定? 應用程式如何啟動?
應用程式已在現有開機磁碟上設定 應用程式已使用開機指令碼進行設定
否:開機磁碟是無狀態的
  1. 使用含有自訂映像檔的執行個體範本
  2. 為有狀態資料磁碟新增個別執行個體設定 (或有狀態政策)
  1. 使用含有開機指令碼的執行個體範本
  2. 為有狀態資料磁碟新增個別執行個體設定 (或有狀態政策)
是:至少有一組開機磁碟為有狀態
  1. 使用含有自訂映像檔的執行個體範本
  2. 針對有狀態的開機磁碟和資料磁碟新增個別執行個體設定 (或有狀態政策)
  1. 使用含有開機指令碼的執行個體範本
  2. 針對有狀態的開機磁碟和資料磁碟新增個別執行個體設定 (或有狀態政策)

查看現有設定

查看現有的獨立執行個體,檢查每個執行個體的機器類型、磁碟和中繼資料。

針對每個執行個體使用 instances describe 指令

gcloud compute instances describe INSTANCE_NAME

請回答下列問題,為本指南後續步驟做好準備。

問題 影響
VM 屬性
您想為群組使用哪種機器類型? 在 MIG 的執行個體範本中指定這個機器類型。
應用程式如何啟動:是在開機磁碟上預先設定,還是由開機指令碼安裝、設定及啟動? 如果應用程式已在開機磁碟上預先設定,請建立自訂映像檔,然後在 MIG 的執行個體範本中指定該映像檔。

如果應用程式是由開機指令碼啟動,請在 MIG 的執行個體範本中指定該開機指令碼。

如果應用程式需要自訂開機磁碟映像檔和開機指令碼,請在執行個體範本中指定這兩項項目。
您是否要保留現有的執行個體名稱? 您必須刪除現有的獨立執行個體,才能釋出執行個體名稱。

如果開機磁碟仍處於無狀態狀態,且您想在 MIG 中使用自動滾動式更新,請參閱保留執行個體名稱的說明文件。
有狀態的項目
每個執行個體是否有任何需要保留的執行個體專屬中繼資料? 使用個別執行個體設定指定特定執行個體的中繼資料。
您的開機磁碟是否有狀態?換言之,是否有任何開機磁碟上的資料需要保留狀態? 如果您需要保留開機磁碟的狀態,就無法透過推出開機磁碟映像檔更新來更新作業系統或軟體。
所有執行個體是否都使用相同類型的磁碟?舉例來說,這些磁碟是否都只有一個資料磁碟?或者,它們是否有且需要獨特的磁碟設定? 如果所有執行個體都有相同的磁碟設定,請在執行個體範本中定義這些常見的裝置名稱,例如 `data-disk`。這樣一來,您就能使用有狀態政策,在 MIG 中宣告這些磁碟為有狀態,且相較於個別執行個體設定,這類設定的負擔較小。
如果要擴充群組,目前的磁碟大小是否足夠? 在執行個體範本中指定所需的磁碟大小。只要這些磁碟未在有狀態政策或個別執行個體設定中重新定義,新執行個體就會取得您指定的磁碟。

本指南會先為現有的有狀態磁碟建立個別執行個體設定。不過,如果磁碟具有您在群組執行個體範本中宣告的常用裝置名稱,您可以稍後將這些設定轉換為有狀態政策。

設定範例

本指南會使用以下基本範例說明遷移步驟。假設您有一個在三個獨立 Compute Engine VM 上執行的有狀態應用程式。假設以下虛擬機器規格:

  • 每個 VM 都使用相同的機器類型。
  • 每個 VM 都位於相同的專案和區域。
  • 每個 VM 的開機磁碟都會安裝相同的應用程式,並在開機磁碟上設定,以便在 VM 啟動時啟動。
  • 每個 VM 的開機磁碟都不會包含您必須保留的任何其他資料或設定。
  • 每個 VM 都有一個次要永久磁碟,其中含有狀態資料,也就是您必須維持目前狀態的資料。

請編輯下列值,以便在本教學課程中使用。

- Machine type: n2-standard-2
- Project: my-project
- Zone: europe-west1-c
- Name of one of the VMs to migrate: my-instance-1

建立自訂映像檔

如果應用程式或任何相關需求已在現有開機磁碟上設定,請建立可重複使用的自訂映像檔。或者,如果您只使用開機指令碼安裝、設定及啟動應用程式,請略過這個步驟,直接前往「建立執行個體範本」一節。

在先前討論的範例情境中,每個現有獨立 VM 的開機磁碟都包含已設定的應用程式。因此,您可以按照步驟建立自訂映像檔,以任一 VM 為基礎。

  1. 停止其中一個執行個體。

    gcloud compute instances stop my-instance-1
  2. 描述執行個體,判斷磁碟的來源。

    gcloud compute instances describe my-instance-1

    輸出結果會與下列內容相似:

    ...
    disks:
    – autoDelete: true
      boot: true
      ...
      source: https://www.googleapis.com/compute/v1/projects/my-project/zones/europe-west1-c/disks/my-instance-1
      ...
    

    找出輸出內容中的 source 欄位,並記下該欄位中的引導磁碟完整網址。

  3. 使用 images create 指令準備使用相同來源的自訂映像檔。

    gcloud compute images create my-boot-image \
        --source-disk=https://www.googleapis.com/compute/v1/projects/my-project/zones/europe-west1-c/disks/my-instance-1
    

    輸出結果會與下列內容相似:

    Created [https://www.googleapis.com/compute/v1/projects/my-project/global/images/my-boot-image].
    

建立執行個體範本

執行個體範本是可儲存 VM 設定的不可變更 Compute Engine 資源。範本建立後即無法更新。如果日後需要變更,請建立新範本,然後將新範本推送至群組。

按照「建立新的執行個體範本」一節中的步驟操作,並使用下列設定。

  • 機器類型:指定適用於所有現有執行個體的機器類型

  • 啟動指令碼:如果您使用啟動指令碼啟動應用程式,請指定該指令碼。

  • 開機磁碟

    • 映像檔:為 MIG 中的所有 VM 指定通用開機磁碟映像檔。舉例來說,如果您是根據現有 VM 的開機磁碟建立自訂映像檔,請指定該磁碟。如果您需要為特定 VM 使用現有的開機磁碟,在將該 VM 轉換為受管理的執行個體時,您可以使用個別執行個體設定,明確指定該 VM 的開機磁碟,如本文件稍後所述。
    • 裝置名稱:指定反映磁碟用途的裝置名稱,例如 boot-disk。這樣一來,您就能設定單一有狀態政策,保留 MIG 中所有具有該裝置名稱的磁碟。
    • 大小:指定開機磁碟大小,以便滿足現有執行個體和未來新增的執行個體所需空間。
  • 其他磁碟:根據預設,當您將執行個體新增至 MIG 時,MIG 會根據範本建立磁碟。請注意,執行個體範本不支援設定區域性磁碟,但您可以稍後使用個別執行個體設定來設定區域性磁碟。

    • 裝置名稱:針對每個磁碟指定裝置名稱,以反映磁碟的用途,例如 data-disk
    • 大小:指定磁碟大小,以便在日後新增執行個體時,能有足夠的空間。

為了進行這項遷移作業,每個額外磁碟最重要的規格是裝置名稱,您會使用該名稱做為指定哪些磁碟具有狀態的關鍵。為類似磁碟指定通用裝置名稱,即可使用通用的具狀態政策,在 MIG 中保留所有磁碟。在執行個體範本中,額外磁碟的大小或映像檔規格,只會用於為您可能建立的新執行個體 (而非遷移的執行個體) 建立新磁碟。遷移現有執行個體時,您可以將現有資料磁碟從原始執行個體中卸除,然後將這些磁碟重新連結至新的代管執行個體,以保留現有資料磁碟,如本文件稍後所述。

下列 instance-templates create 指令會為範例情境建立範本。指令包含 --image 標記,可指向先前建立的自訂開機映像檔,以及額外的資料磁碟。

gcloud compute instance-templates create my-instance-template \
 --machine-type=n2-standard-2 \
 --image=https://www.googleapis.com/compute/v1/projects/my-project/global/images/my-boot-image \
 --boot-disk-device-name=boot-disk \
 --create-disk=mode=rw,size=100,type=pd-standard,device-name=data-disk

輸出結果會與下列內容相似:

Created [https://www.googleapis.com/compute/v1/projects/my-project/global/instanceTemplates/my-instance-template].
NAME                     MACHINE_TYPE   PREEMPTIBLE  CREATION_TIMESTAMP
my-instance-template  n2-standard-2               2021-04-27T11:02:07.552-07:00

請注意範本的網址,您可以在輸出內容的第一行找到該網址。

建立代管執行個體群組

接下來,您需要建立代管執行個體群組 (MIG)。如要建立單一可用區 MIG,請按照這篇文章的說明操作。或者,如果您想使用區域 MIG 來防範區域故障,請按照操作說明建立在單一區域的多個可用區中含有 VM 的 MIG。

建立 MIG 時,請納入下列規格:

  • 將群組大小設為 0。您稍後會新增執行個體。
  • 如果您要建立區域 MIG,請將執行個體重新分配類型設為 NONE,以便 MIG 不會自動在各個區域重新分配執行個體。

下列 instance-groups managed create 指令會為先前所述的範例設定建立區域 MIG。如要建立區域性 MIG,請將 --zone=ZONE 替換成 --region=REGION

gcloud compute instance-groups managed create my-mig \
    --size=0 \
    --template=https://www.googleapis.com/compute/v1/projects/my-project/global/instanceTemplates/my-instance-template \
    --zone=europe-west1-c

輸出結果會與下列內容相似:

Created [https://www.googleapis.com/compute/v1/projects/my-project/zones/europe-west1-c/instanceGroupManagers/my-mig].
NAME    LOCATION        SCOPE  BASE_INSTANCE_NAME  SIZE  TARGET_SIZE  INSTANCE_TEMPLATE         AUTOSCALED
my-mig  europe-west1-c  zone   my-mig              0     0            my-instance-template      no

建立資源後,您可以使用該資源與 MIG 互動,例如設定群組的政策,以及在群組中新增或移除執行個體。

將現有 VM 轉換為受管理的執行個體

針對每個現有的非代管 VM,請按照下列程序將其轉換為 MIG 中的代管執行個體。這個程序會將現有磁碟遷移至新的受管理執行個體。或者,您也可以為現有磁碟建立快照,然後根據這些快照建立磁碟,供受管理的執行個體使用。

  1. 說明現有的 VM。

    gcloud compute instances describe my-instance-1
    

    請記下您要從現有 VM 保留的項目,包括:

    • 執行個體名稱
    • 開機磁碟
    • 次要磁碟
    • 執行個體中繼資料
  2. 停止現有 VM。

    gcloud compute instances stop my-instance-1
    
  3. 卸離所有有狀態磁碟,包括您打算重複使用的開機磁碟。

    gcloud compute instances detach-disk my-instance-1 --disk=my-data-disk-1
    
  4. 刪除現有的 VM,以便建立名稱相同的其他 VM。如果您不想保留執行個體名稱,可以稍後刪除現有的 VM,停止付費。

    gcloud compute instances delete my-instance-1
    
  5. 請按照這篇文章的步驟建立代管執行個體。

    • 如果您已刪除原始執行個體,可以重複使用該執行個體的名稱。或提供新名稱。
    • 指定這個受管理的執行個體所需的有狀態磁碟或中繼資料。MIG 會在每個執行個體的設定中儲存這些特定執行個體項目:

      • 指定一或多個磁碟,例如從原始 VM 執行個體卸離的磁碟。

      • 指定原始 VM 執行個體的中繼資料。

    舉例來說,下列指令會建立與原始 VM 同名的代管執行個體,並重複使用原始資料磁碟。系統會根據群組執行個體範本中指定的映像檔,建立 VM 的開機磁碟。

    gcloud compute instance-groups managed create-instance my-mig \
        --instance=my-instance-1    \
        --stateful-metadata=role=primary      \
        --stateful-disk=device-name=data-disk,source=https://www.googleapis.com/compute/v1/projects/my-project/zones/europe-west1-c/disks/my-data-disk-1 \
        --zone=europe-west1-c
    

    如果您需要重複使用舊 VM 的開機磁碟,請使用相同的指令搭配額外的 --stateful-disk 標記。請為引導磁碟使用與執行個體範本中指定的裝置名稱,例如:

    gcloud compute instance-groups managed create-instance my-mig \
        --instance=my-instance-1 \
        --stateful-metadata=role=secondary    \
        --stateful-disk=device-name=data-disk,source=https://www.googleapis.com/compute/v1/projects/my-project/zones/europe-west1-c/disks/my-data-disk-1 \
        --stateful-disk=device-name=boot-disk,source=https://www.googleapis.com/compute/v1/projects/my-project/zones/europe-west1-c/disks/my-instance-1-boot-disk \
        --zone=europe-west1-c
    
  6. 針對每個現有的非代管 VM 重複執行這些步驟。

如要查看個別例項的結果設定,請執行 instance-configs list 指令

gcloud compute instance-groups managed instance-configs list my-mig \
    --zone=europe-west1-c

如要查看執行個體的保留狀態,請執行 describe-instance 指令

gcloud compute instance-groups managed describe-instance my-mig \
  --instance=my-instance-1 \
  --zone=europe-west1-c

詳情請參閱「在 MIG 中套用、查看及移除有狀態設定」。

設定自動修復功能

MIG 會自動修復停止執行的代管執行個體。如要進一步提高應用程式的可用性,並且驗證應用程式是否有回應,請設定以應用程式為基礎的健康狀態檢查和自動修復功能。如需指令範例,請參閱健康狀態檢查設定範例

使用有狀態政策,而非個別執行個體設定

有狀態政策可讓您在 MIG 中宣告具有通用裝置名稱的磁碟為有狀態。相較於管理多個個別執行個體的設定,單一有狀態政策的管理工作量較少。舉例來說,您可以使用有狀態政策,將所有磁碟指定為有狀態,以便在 MIG 中的所有執行個體中使用。data-disk

如果 MIG 符合下列條件,您可以使用有狀態政策取代個別執行個體設定:

  • 所有 VM 都會使用相同的裝置名稱 (例如 data-disk),用於類似的有狀態磁碟。這個裝置名稱是在 MIG 的執行個體範本中定義。
  • 沒有任何 VM 在個別執行個體設定中指定專屬的有狀態中繼資料。如果在個別執行個體設定中定義有狀態中繼資料,您可以從個別執行個體設定中移除磁碟,但必須保留個別執行個體設定,才能維護該執行個體專屬的有狀態中繼資料。

請按照下列步驟,將多個個別執行個體設定取代為單一具狀態的政策。

  1. 在有狀態政策中設定有狀態磁碟。請按照「為現有 MIG 中的磁碟設定及更新有狀態設定」中的操作說明進行。

    在這個示例情境中,請使用下列指令。這會宣告 MIG 中所有具有特定裝置名稱的磁碟都會保留。

    gcloud compute instance-groups managed update my-mig \
      --stateful-disk=device-name=data-disk,auto-delete=never
    
  2. 如果您需要保留執行個體專屬的中繼資料,請更新個別執行個體設定。否則請刪除個別執行個體設定。使用 --update-instance 標記立即套用設定變更。舉例來說,如要刪除個別執行個體設定,請使用下列指令:

    gcloud compute instance-groups managed instance-configs delete my-mig \
      --instances=my-instance-1 \
      --update-instance
    
  3. (選用) 請確認有狀態項目現在已儲存在每個受管理的執行個體政策 (preservedStateFromPolicy) 的保留狀態中。詳情請參閱「查看已保留的受管理執行個體狀態」。

新增更多 VM

如果您需要新增 VM 來擴充應用程式,可以增加 MIG 的大小,或手動建立更多執行個體。MIG 會根據群組的執行個體範本建立所有 VM,包括其永久磁碟。如果群組有狀態政策,您在狀態政策中列出的任何項目都會保留在群組中所有新舊執行個體的重新啟動、重新建立、自動修復和更新作業中。如果您只需要針對群組中的特定 VM 設定有狀態磁碟或中繼資料,請使用個別執行個體設定

後續步驟