使用 Migrate to Containers CLI 遷移 Linux VM

在本快速入門導覽課程中,您將建立 Compute Engine 虛擬機器 (VM) 執行個體,然後使用 Migrate to Containers CLI 將 VM 遷移至 Google Kubernetes Engine (GKE)。

事前準備

  1. 在 Google Cloud 控制台的專案選擇器頁面中,選取或建立 Google Cloud 專案

    前往專案選取器

  2. 請確認您已為 Google Cloud 專案啟用計費功能。瞭解如何檢查專案是否已啟用計費功能

  3. 啟用 Compute Engine API。

    啟用 Compute Engine API

  4. 啟用 GKE API。

    啟用 GKE API

建立搭載網路伺服器的 Compute Engine VM,做為來源 VM

本節說明如何建立 Compute Engine VM,提供「Hello World!」網頁,供您在遷移完成後進行測試。

  1. 在 Google Cloud 控制台中,按一下「啟用 Cloud Shell」「Activate Shell」(啟用 Shell) 按鈕

    前往 Google Cloud 控制台

  2. 建立 VM:

    gcloud compute instances create quickstart-source-vm \
      --zone=us-central1-a --machine-type=e2-medium  \
      --subnet=default --scopes="cloud-platform" \
      --tags=http-server,https-server --image=ubuntu-2204-jammy-v20240208 \
      --image-project=ubuntu-os-cloud --boot-disk-size=10GB --boot-disk-type=pd-standard \
      --boot-disk-device-name=quickstart-source-vm
    

    請稍候幾分鐘,讓 VM 建立完畢。

  3. 建立防火牆規則,允許透過 HTTP 將要求傳送至執行個體:

    gcloud compute firewall-rules create default-allow-http \
      --direction=INGRESS --priority=1000 --network=default --action=ALLOW \
      --rules=tcp:80 --source-ranges=0.0.0.0/0 --target-tags=http-server
    
  4. 前往「VM instances」(VM 執行個體) 頁面。

    前往 VM 執行個體

  5. 如要連線至 VM quickstart-source-vm,請找到 VM 所在列,然後按一下「SSH」SSH

    系統會在新的分頁中建立連線。

  6. quickstart-source-vm 指令分頁中,安裝 apache2 套件:

    sudo apt-get update && sudo apt-get install apache2 -y
    

    安裝 Apache 之後,作業系統會自動啟動 Apache 伺服器。

  7. 在同一個分頁中,使用新網頁覆寫 Apache 網路伺服器預設網頁:

    echo '<!doctype html><html><body><h1>Hello World!</h1></body></html>' | sudo tee /var/www/html/index.html
    
  8. 返回「VM instances」(VM 執行個體) 頁面,然後複製 quickstart-source-vm 顯示的「External IP」(外部 IP) 位址。

  9. 在瀏覽器的網址列中貼上 VM 的 IP 位址。並加上 http:// 前置字元。

    「Hello World!」頁面隨即顯示。

建立 Compute Engine VM 做為本機

在本節中,您將建立 Linux VM,做為執行各種 Migrate to Containers 作業的本機,以遷移來源 VM。

  1. 在 Google Cloud 控制台中,按一下「啟用 Cloud Shell」「Activate Shell」(啟用 Shell) 按鈕

    前往 Google Cloud 控制台

  2. 建立 VM:

    gcloud compute instances create quickstart-local-vm \
      --zone=us-central1-a --machine-type=e2-medium  \
      --subnet=default --scopes="cloud-platform" \
      --tags=http-server,https-server --image=ubuntu-2204-jammy-v20240208 \
      --image-project=ubuntu-os-cloud --boot-disk-size=50GB --boot-disk-type=pd-standard \
      --boot-disk-device-name=quickstart-local-vm
    

    請稍候幾分鐘,讓 VM 建立完畢。

建立 GKE 叢集

在本節中,您會在 Google Cloud中建立 GKE 叢集,並在本快速入門導覽課程稍後部署容器化工作負載。

  • 在 Cloud Shell 中,建立新的 Kubernetes 叢集:

    gcloud container clusters create quickstart-cluster \
      --zone=us-central1-a --machine-type=e2-medium \
      --image-type=ubuntu_containerd --num-nodes=1 \
      --logging=SYSTEM,WORKLOAD,API_SERVER,SCHEDULER,CONTROLLER_MANAGER
    

    叢集會在幾分鐘內建立完成。

準備本機 VM 以執行遷移作業

  1. 前往「VM instances」(VM 執行個體) 頁面。

    前往 VM 執行個體

  2. 如要連線至 VM quickstart-local-vm,請找到 VM 所在列,然後按一下「SSH」SSH

    系統會在新的分頁中建立連線。

  3. quickstart-local-vm 指令分頁中,安裝 Google Cloud CLI:

    # Import the Google Cloud public key.
    curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/cloud.google.gpg
    
    # Add the gcloud CLI distribution URI as a package source
    echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
    
    # Update and install gcloud
    sudo apt-get update && sudo apt-get install google-cloud-cli
    
    # Get started
    gcloud init
    

    如要完成 gcloud CLI 設定,請按照 quickstart-local-vm 指令分頁中顯示的指示操作:

    1. 如要選取用於執行各項作業的帳戶,請輸入 1
    2. 如要選取建立 VM 的專案,請輸入 1
    3. 如要略過設定預設地區和區域,請輸入 n
  4. 安裝 Docker,並允許非 root 使用者執行容器:

    # Download the convenience script
    curl -fsSL https://get.docker.com -o install-docker.sh
    
    # Install Docker
    sudo sh install-docker.sh
    
    # Allow the non-root user to access Docker
    sudo usermod -aG docker $USER
    
    # Activate the group changes
    newgrp docker
    
  5. 安裝 Skaffold:

    curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/latest/skaffold-linux-amd64 && \
    sudo install skaffold /usr/local/bin/
    
  6. 下載 Migrate to Containers CLI:

    curl -O "https://m2c-cli-release.storage.googleapis.com/$(curl -s https://m2c-cli-release.storage.googleapis.com/latest)/linux/amd64/m2c"
    chmod +x ./m2c
    

遷移來源 VM

遷移作業通常包含三個步驟:複製來源 VM 檔案系統、分析檔案系統以建立遷移計畫,以及產生遷移構件。

下列各節說明如何使用 Migrate to Containers CLI,透過本機 Linux VM 遷移來源 VM。

複製來源 VM 檔案系統

複製來源 VM 檔案系統時,Migrate to Containers CLI 會使用預設篩選器縮減複製的檔案系統大小。不過,如要讓 Apache 伺服器啟動,伺服器需要 /var/log 目錄,而預設篩選器會移除這個目錄。

本節說明如何編輯預設篩選器,確保 /var/log/* 會連同來源 VM 檔案系統一起複製。

  1. quickstart-local-vm 指令分頁中,取得名為 filters.txt 的檔案,其中列出預設的「遷移至容器」篩選器:

    ./m2c copy default-filters > filters.txt
    
  2. 如要編輯預設篩選器,請按照下列步驟操作:

    1. 在文字編輯器中開啟 filters.txt 檔案:

      vi filters.txt
      
    2. 如要變更檔案,請按 i 鍵。

    3. 移除下列陳述式:

      - /var/log/*
      
    4. 如要儲存檔案並退出文字編輯器,請依序按下 Esc 鍵和 :wq 鍵。

  3. 複製來源機器的檔案系統:

    ./m2c copy gcloud \
      --project PROJECT_ID --zone us-central1-a \
      --vm-name quickstart-source-vm --output quickstart-vm-filesystem \
      --filters filters.txt
    

    PROJECT_ID 替換為專案 ID。

    來源機器的檔案系統副本位於 quickstart-vm-filesystem 目錄中。

建立遷移計畫

  • quickstart-local-vm 指令分頁中,建立遷移計畫:

    ./m2c analyze \
      --source quickstart-vm-filesystem --plugin linux-vm-container \
      --output analysis-output
    

    分析完成後,系統會建立名為 analysis-output 的新目錄,其中包含遷移計畫 config.yaml

產生遷移構件

  • 在「quickstart-local-vm」指令分頁中,產生遷移構件:

    ./m2c generate --input analysis-output --output migration-artifacts
    

    產生的遷移構件會新增至 migration-artifacts 目錄。

部署遷移的工作負載

在本節中,您會將從本機 VM quickstart-local-vm 遷移的工作負載,部署至Google Cloud上執行的 GKE 叢集。

  1. quickstart-local-vm 指令分頁中,安裝 gke-gcloud-auth-plugin 外掛程式

    sudo apt-get install google-cloud-sdk-gke-gcloud-auth-plugin
    
  2. 安裝 kubectl

    sudo apt-get install kubectl
    
  3. 連線至叢集 quickstart-cluster

    gcloud container clusters get-credentials quickstart-cluster \
      --zone us-central1-a --project PROJECT_ID
    
  4. 開啟 migration-artifacts 資料夾:

    cd migration-artifacts
    
  5. 如要將工作負載公開至網際網路,請在 deployment_spec.yaml 檔案中新增 LoadBalancer 服務。如要編輯 deployment_spec.yaml 檔案,請按照下列步驟操作:

    1. 在文字編輯器中開啟 deployment_spec.yaml 檔案:

      vi deployment_spec.yaml
      
    2. 如要變更檔案,請按 i 鍵。

    3. 找出名為 linux-systemService 物件。如下所示:

      apiVersion: v1
      kind: Service
      metadata:
        labels:
          anthos-migrate.cloud.google.com/type: linux-container
          migrate-for-anthos-optimization: "true"
          migrate-for-anthos-version: m2c-cli-1.2.2
        name: linux-system
      spec:
        clusterIP: None
        selector:
          app: linux-system
        type: ClusterIP
      
    4. linux-system 之後新增另一個名為 hello-serviceService 物件:

      apiVersion: v1
      kind: Service
      metadata:
        labels:
          anthos-migrate.cloud.google.com/type: linux-container
          migrate-for-anthos-optimization: "true"
          migrate-for-anthos-version: m2c-cli-1.2.2
        name: linux-system
      spec:
        clusterIP: None
        selector:
          app: linux-system
        type: ClusterIP
      ---
      # Add the hello-service object
      apiVersion: v1
      kind: Service
      metadata:
        name: hello-service
      spec:
        selector:
          app: linux-system
        ports:
        - protocol: TCP
          port: 80
          targetPort: 80
        type: LoadBalancer
      
    5. 如要儲存檔案並退出文字編輯器,請依序按下 Esc 鍵和 :wq 鍵。

  6. 部署遷移的 VM:

    skaffold run -d eu.gcr.io/PROJECT_ID
    
  7. 取得遷移的 VM 外部 IP 位址:

    kubectl get service hello-service
    
  8. 網路伺服器準備就緒後,您會看到所新增 hello-service 的外部 IP 位址。

    NAME            TYPE           CLUSTER-IP      EXTERNAL-IP    PORT(S)        AGE
    hello-service   LoadBalancer   10.23.241.124   EXTERNAL_IP   80:32611/TCP   5m4s
    
  9. 如要確認遷移作業是否成功,請開啟新的瀏覽器分頁,然後前往外部 IP 位址的網頁。

    http://EXTERNAL_IP
    

    請務必使用 HTTP,而非 HTTPS

  10. 如果畫面上顯示「Hello World!」文字,表示 VM 遷移作業已成功。

    如果無法存取已遷移的工作負載,請參閱如何排解已知問題

清除所用資源

為了避免系統向您的 Google Cloud 帳戶收取本頁面所用資源的費用,請按照下列步驟操作。

刪除 GKE 叢集

  1. 前往 Google Cloud 控制台的「GKE」GKE頁面。

    前往 GKE

  2. 選取「quickstart-cluster」,然後按一下「刪除」圖示
  3. 系統提示您進行確認時,再按一下 [Delete] (刪除)

刪除 VM

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

    前往 VM 執行個體

  2. 按一下名稱 quickstart-source-vm
  3. 在執行個體詳細資料頁面的頂端,按一下「刪除」
  4. 按一下名稱 quickstart-local-vm
  5. 在執行個體詳細資料頁面的頂端,按一下「刪除」

後續步驟