如果您在獨立 (非代管) 的 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。
遷移作業總覽
- 瞭解有狀態 MIG 的組成元件。
- 查看現有設定,判斷常見的 VM 規格。
- (選用) 建立自訂映像檔,做為通用開機磁碟映像檔。
- 建立執行個體範本,為 MIG 指定常見的 VM 設定。
- 建立空白 MIG。
- 將現有 VM 轉換為 MIG 中的代管執行個體,包括每個執行個體的設定。
- 為 MIG 設定自動修復功能,提升應用程式的復原能力。
- 如要減少設定負擔,可以選擇以有狀態政策取代每個執行個體的設定。
元件
您可以透過多個元件,設定有狀態 MIG 的代管執行個體:
- 執行個體範本包含 MIG 中 VM 的常見設定,包括機型、開機磁碟映像檔、額外磁碟的選用規格,以及選用的開機指令碼。
- 選用的自訂映像檔包含您的應用程式,並做為一般開機磁碟映像檔。
- 依據執行個體設定包含執行個體專屬的有狀態項目。舉例來說,您可以將現有磁碟附加至群組中的特定執行個體。這個磁碟可能已從現有的獨立執行個體卸離、從快照還原,或是地區磁碟。您不需要在執行個體範本中定義磁碟的裝置名稱。
- 選用的有狀態政策包含常見的有狀態項目。舉例來說,它會將所有具有特定裝置名稱 (如執行個體範本所定義) 的磁碟,定義為群組中所有執行個體的有狀態磁碟。
您需要使用哪些元件?
您需要使用的元件取決於現有設定。下表提供應用程式在單一或多個執行個體上執行的部分可能設定,方便您瞭解大致情況。在本教學課程稍後的內容中,您將檢查現有設定,判斷需要使用哪些設定。
開機磁碟上是否有任何必須維護的有狀態資料或設定? | 您的應用程式如何啟動? | |
---|---|---|
應用程式已在現有開機磁碟上設定 | 應用程式已透過開機指令碼設定 | |
否:開機磁碟沒有狀態 |
|
|
是:至少有一個開機磁碟是有狀態 |
|
|
檢查現有設定
檢查現有的獨立執行個體,查看每個執行個體的機器類型、磁碟和中繼資料。
針對每個執行個體使用 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 為基礎建立自訂映像檔。
停止其中一個執行個體。
gcloud compute instances stop my-instance-1
說明執行個體,判斷磁碟的來源。
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
欄位,並記下該欄位中開機磁碟的完整網址。使用
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 中的代管執行個體。這項程序會將現有磁碟遷移至新的代管執行個體。或者,您也可以建立現有磁碟的快照,然後根據這些快照建立磁碟,供受管理執行個體使用。
說明現有 VM。
gcloud compute instances describe my-instance-1
記下要從現有 VM 保留的項目,包括:
- 執行個體名稱
- 開機磁碟
- 次要磁碟
- 執行個體中繼資料
停止現有 VM。
gcloud compute instances stop my-instance-1
卸離所有具狀態磁碟,包括您打算重複使用的開機磁碟。
gcloud compute instances detach-disk my-instance-1 --disk=my-data-disk-1
刪除現有 VM,以便建立名稱相同的新 VM。如不想保留執行個體名稱,可以稍後刪除現有 VM,停止支付相關費用。
gcloud compute instances delete my-instance-1
請按照步驟建立代管執行個體。
- 如果您已刪除原始執行個體,可以重複使用原始執行個體的名稱。或提供新名稱。
指定這個受管理執行個體需要的有狀態磁碟或中繼資料。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
針對每個現有的非受管理 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 在每個執行個體設定中指定專屬的有狀態中繼資料。如果您在個別執行個體設定中定義了有狀態中繼資料,可以從個別執行個體設定中移除磁碟,但必須保留個別執行個體設定,才能維持該執行個體專屬的有狀態中繼資料。
請按照下列步驟,以單一有狀態政策取代多個執行個體專屬設定。
在有狀態政策中設定有狀態磁碟。請按照「為現有 MIG 中的磁碟設定及更新有狀態設定」一文中的操作說明進行。
以範例情境來說,請使用下列指令。這項宣告表示系統會保留 MIG 中具有特定裝置名稱的所有磁碟。
gcloud compute instance-groups managed update my-mig \ --stateful-disk=device-name=data-disk,auto-delete=never
如需保留執行個體專屬的中繼資料,請更新每個執行個體的設定。否則請刪除每個執行個體的設定。 使用
--update-instance
標記立即套用設定變更。舉例來說,如要刪除每個執行個體的設定,請使用下列指令:gcloud compute instance-groups managed instance-configs delete my-mig \ --instances=my-instance-1 \ --update-instance
(選用) 確認有狀態項目現在已儲存在每個代管執行個體的政策 (
preservedStateFromPolicy
) 中保留的狀態。詳情請參閱「查看代管執行個體的保留狀態」。
新增更多 VM
如要新增 VM 來擴充應用程式,可以增加 MIG 的大小,或手動建立更多執行個體。MIG 會根據群組的執行個體範本,建立所有 VM (包括永久磁碟)。如果群組有狀態政策,您在狀態政策中列出的任何項目,都會在群組中所有新舊執行個體的重新啟動、重新建立、自動修復和更新作業中保留。如要只為群組中的特定 VM 設定有狀態的磁碟或中繼資料,請使用個別執行個體設定。
後續步驟
- 進一步瞭解如何使用代管型執行個體。
- 瞭解有狀態的 MIG 如何運作。