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

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

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

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

限制

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

費用

本教學課程使用 Trusted 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 中使用自動滾動式更新,請參閱保留執行個體名稱的說明文件。
有狀態的項目
您是否需要保留每個執行個體的執行個體專屬中繼資料? 使用每個執行個體設定,指定執行個體專屬的中繼資料。
開機磁碟是否為有狀態?換句話說,您是否必須保留任何開機磁碟上的資料狀態? 如需保留開機磁碟的狀態,就無法透過推出開機磁碟映像檔更新,更新作業系統或軟體。
所有執行個體是否都有相同類型的磁碟?舉例來說,這些 VM 是否都有一個資料磁碟?還是他們有獨特的磁碟設定,且需要這些設定? 如果所有執行個體都有共同的磁碟設定,請在執行個體範本中定義這些共同的裝置名稱,例如 `data-disk`。這樣一來,您就能使用具狀態政策,在 MIG 中將這些磁碟宣告為具狀態,與每個執行個體的設定相比,這項做法的額外負擔較少。
如果群組要擴大,目前磁碟的大小是否足夠? 在執行個體範本中指定所需磁碟大小。新執行個體會取得您指定的磁碟,前提是這些磁碟未在有狀態政策或每個執行個體設定中重新定義。

本指南會先為現有的有狀態磁碟建立每個執行個體的設定,但只要磁碟具有您在群組執行個體範本中宣告的通用裝置名稱,您稍後就能將這些設定轉換為具狀態政策。

設定範例

本指南會使用下列基本範例來說明遷移步驟。假設您在三部獨立的 Compute Engine VM 上執行有狀態應用程式。假設 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].
    

建立執行個體範本

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

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

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

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

  • 開機磁碟

    • 映像檔:為 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」一文的說明操作。或者,如要使用區域 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 的有狀態磁碟。相較於管理多個執行個體專屬設定,單一有狀態政策的管理工作較少。舉例來說,透過有狀態政策,您可以將裝置名稱為 data-disk 的所有磁碟指定為 MIG 中所有執行個體的有狀態磁碟。

如果 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 設定有狀態的磁碟或中繼資料,請使用個別執行個體設定

後續步驟