在網路之間遷移 VM


本頁說明如何將 VM 執行個體從一個網路遷移至另一個網路。如果 VM 使用多個網路介面連線至多個網路,這個程序會更新其中一個介面,並保留其餘介面。

系統支援下列遷移作業:

  • 從舊版網路遷移至同一專案中的虛擬私有雲網路
  • 從一個虛擬私有雲網路連線至同一專案中的另一個虛擬私有雲網路
  • 從虛擬私有雲網路的一個子網路連線至同一網路的另一個子網路
  • 從服務專案網路到共用虛擬私有雲主專案的共用網路

無論如何,VM 都會留在原本的區域和可用區。只有附加的網路會變更。

事前準備

  • 參閱虛擬私有雲說明文件。
  • 如果尚未設定驗證,請先完成設定。 「驗證」是指驗證身分的程序,確認您有權存取 Google Cloud 服務和 API。如要從本機開發環境執行程式碼或範例,請選取下列其中一個選項,向 Compute Engine 進行驗證:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

      1. After installing the Google Cloud CLI, initialize it by running the following command:

        gcloud init

        If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      2. Set a default region and zone.
      3. REST

        如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。

          After installing the Google Cloud CLI, initialize it by running the following command:

          gcloud init

          If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

        詳情請參閱 Google Cloud 驗證說明文件中的「Authenticate for using REST」。

需求條件

遷移 VM 前,請確認 VM 符合下列條件:

  • VM 必須停止運作。為確保 VM 中的客體 OS 能在停止作業完成前正常關機,您可以選擇在 VM 中啟用正常關機
  • VM 不得屬於執行個體群組或網路端點群組 (NEG)。申請條件如下:
    • 如果 VM 屬於非代管執行個體群組或 NEG,您必須先從群組中移除 VM,才能遷移 VM。
    • 如果 VM 屬於代管執行個體群組 (MIG),則無法遷移。請改為使用具有不同 VM 屬性的執行個體範本,建立新的 MIG。
    • 您可以移動目標集區中的執行個體,不必先移除。目標集區會擴大,涵蓋這兩個聯播網。

限制

  • 您無法將 VM 介面遷移至舊版網路。
  • 遷移期間,系統會變更分配給網路介面的 MAC 位址。這可能會影響與 MAC 位址緊密相關的服務,例如第三方授權協議。
  • 如果將 VM 遷移至 IP 範圍不同的網路或子網路,執行個體的內部 IP 位址就必須變更。如果遷移至 IP 範圍相同的子網路,只要舊 IP 位址在目的地未使用,您就可以在遷移時指定該位址,藉此保留舊 IP 位址。
  • 如果目標子網路的 IP 範圍與來源不同,介面的 IP 位址會變更,以符合新的子網路範圍。
  • 您可以在新位置保留 VM 現有的外部 IP 位址。如要執行這項操作,您必須具備目標網路的 compute.subnetworks.useExternalIp 權限,且目標網路不得透過constraints/compute.vmExternalIpAccess 限制停用外部 IP 位址。

遷移 VM

遷移 VM 前,請先詳閱需求限制

Google 建議您先在新網路中建立必要的防火牆規則、路徑、負載平衡器和其他網路基礎架構資源,再遷移 VM。這麼做可以縮短 VM 離線時間。

如要遷移 VM,請選取下列任一選項:

主控台

  1. 前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面

    前往 VM 執行個體

  2. 按一下 VM 執行個體名稱,開啟詳細資料頁面。

  3. 如果 VM 正在執行,請按一下「停止」停止 VM。如果沒有「停止」選項,請依序點選 「更多動作」> 「停止」

  4. VM 停止後,請按一下「編輯」

  5. 在「Network interfaces」(網路介面) 下方,按一下要移動的介面。

  6. 在介面的「Network」(網路) 欄位中,選取介面的新網路。

  7. 在介面的「Subnetwork」(子網路) 欄位中,選取介面的新子網路。

  8. 在「內部 IP 位址」欄位中,如要讓系統從子網路範圍分配 IP 位址,請指定「自動」;如要自行指定未使用的 IP 位址,請指定「自訂」

  9. 按一下「Done」(完成),關閉網路介面編輯面板。

  10. 按一下 [儲存]

  11. VM 儲存完畢後,按一下「Start」(啟動)

  12. 如果出現確認對話方塊,請按一下「開始」

gcloud

  1. 停止 VM

    gcloud compute instances stop INSTANCE_NAME \
        --zone=ZONE_NAME

    其中

    • INSTANCE_NAME 是 VM 執行個體名稱。
    • ZONE_NAME 是包含執行個體的區域名稱。
  2. 遷移 VM

    gcloud compute instances network-interfaces update INSTANCE_NAME \
        --zone=ZONE_NAME \
        --network-interface=NIC \
        --network=NETWORK_NAME \
        --subnetwork=SUBNET_NAME

    其中

    • INSTANCE_NAME 是 VM 執行個體名稱。
    • ZONE_NAME 是包含執行個體的區域名稱。
    • NIC 是您要更新的介面名稱。在單一介面 VM 中,NICnic0
    • NETWORK_NAME 是目標網路名稱。如果您要將 VM 從服務專案網路遷移至主專案網路,必須使用目標網路的完整名稱:projects/HOST_PROJECT_ID/global/networks/NETWORK_NAME
    • SUBNET_NAME 是目標子網路名稱。這個子網路必須與 VM 位於同一區域。如果您要將 VM 從服務專案網路遷移至主專案網路,必須使用子網路的完整名稱:projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME
  3. 啟動 VM

    遷移作業可能需要幾分鐘,請稍候再嘗試在新位置啟動 VM。

    gcloud compute instances start INSTANCE_NAME \
        --zone=ZONE_NAME

    其中

    • INSTANCE_NAME 是 VM 執行個體名稱。
    • ZONE_NAME 是包含執行個體的區域名稱。

REST

  1. 停止 VM

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE_NAME/instances/INSTANCE_NAME/stop
    

    其中

    • PROJECT_ID 是您的專案 ID。
    • INSTANCE_NAME 是 VM 執行個體名稱。
    • ZONE_NAME 是包含執行個體的區域名稱。
  2. 查看執行個體的詳細資料。

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE_NAME/instances/INSTANCE_NAME
    

    其中

    • PROJECT_ID 是您的專案 ID。
    • ZONE_NAME 是包含執行個體的區域名稱。
    • INSTANCE_NAME 是 VM 執行個體名稱。
  3. 找出介面的指紋。

    您需要指紋才能更新網路介面。

    檢查指令輸出內容,找出 networkInterfaces 欄位內容。找到要更新的介面名稱項目 (在單一介面 VM 中,名稱為 nic0)。複製這個項目中 fingerprint 欄位的字串,以供下一個步驟使用。

  4. 遷移 VM

    PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE_NAME/instances/INSTANCE_NAME/updateNetworkInterface?networkInterface=NIC
    {
      "network": NETWORK_NAME,
      "subnetwork": SUBNET_NAME,
      "networkIP": IP_ADDRESS,
      "name": NIC,
      "fingerprint": FINGERPRINT
    }
    • PROJECT_ID 是您的專案 ID。
    • ZONE_NAME 是包含執行個體的區域名稱。
    • INSTANCE_NAME 是 VM 執行個體名稱。
    • NIC 是您要更新的介面名稱。在單一介面 VM 中,NICnic0
    • NETWORK_NAME 是目標網路名稱。如果您要將 VM 從服務專案網路遷移至主專案網路,必須使用目標網路的完整名稱:projects/HOST_PROJECT_ID/global/networks/NETWORK_NAME
    • SUBNET_NAME 是目標子網路名稱。這個子網路必須與 VM 位於同一區域。如果您要將 VM 從服務專案網路遷移至主專案網路,必須使用子網路的完整名稱:projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME
    • IP_ADDRESS 是您希望執行個體在新位置擁有的內部 IP 位址。如果省略這個欄位,系統會自動指派介面。
    • FINGERPRINT 是您在上一個步驟中取得的指紋。
  5. 啟動 VM

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE_NAME/instances/INSTANCE_NAME/start
    

    其中

    • PROJECT_ID 是您的專案 ID。
    • INSTANCE_NAME 是 VM 執行個體名稱。
    • ZONE_NAME 是包含執行個體的區域名稱。

後續步驟