使用 Migrate to Containers CLI 来迁移 Linux 虚拟机

在本快速入门中,您将创建一个 Compute Engine 虚拟机实例,然后使用 Migrate to Containers CLI 将此虚拟机迁移到 Google Kubernetes Engine (GKE)。

准备工作

  1. 在 Google Cloud 控制台的“项目选择器”页面上,选择或创建 Google Cloud 项目

    转到“项目选择器”

  2. 确保您的 Google Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能

  3. 启用 Compute Engine API。

    启用 Compute Engine API

  4. 启用 GKE API。

    启用 GKE API

创建具有 Web 服务器的 Compute Engine 虚拟机以用作源虚拟机

本部分介绍如何创建一个提供 Hello World! 网页的简单 Compute Engine 虚拟机,该网页可在迁移完成后用于测试。

  1. 在 Google Cloud 控制台中,点击 激活 Shell 按钮激活 Cloud Shell

    前往 Google Cloud 控制台

  2. 创建一个虚拟机:

    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
    

    等待几分钟,让创建虚拟机的过程完成。

  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. 转到虚拟机实例页面。

    转到“虚拟机实例”

  5. 如需连接到虚拟机 quickstart-source-vm,请找到虚拟机所在的行,然后点击 SSH

    系统会在新标签页中打开连接。

  6. quickstart-source-vm 命令标签页上,安装 apache2 软件包:

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

    安装 Apache 后,操作系统会自动启动 Apache 服务器。

  7. 在同一标签页上,使用新网页覆盖 Apache Web 服务器的默认网页:

    echo '<!doctype html><html><body><h1>Hello World!</h1></body></html>' | sudo tee /var/www/html/index.html
    
  8. 返回虚拟机实例页面,然后复制针对 quickstart-source-vm 显示的外部 IP 地址。

  9. 将该虚拟机的 IP 地址粘贴到浏览器地址栏中。为该地址加上 http:// 前缀。

    系统会显示 Hello World! 页面。

创建 Compute Engine 虚拟机以用作本地机器

在本部分中,您将创建一个用作本地机器的 Linux 虚拟机来执行用于迁移来源虚拟机的不同 Migrate to Containers 操作。

  1. 在 Google Cloud 控制台中,点击 激活 Shell 按钮激活 Cloud Shell

    前往 Google Cloud 控制台

  2. 创建一个虚拟机:

    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
    

    等待几分钟,让创建虚拟机的过程完成。

创建 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
    

    等待几分钟,让创建集群的过程完成。

准备本地虚拟机以执行迁移

  1. 转到虚拟机实例页面。

    转到“虚拟机实例”

  2. 如需连接到虚拟机 quickstart-local-vm,请找到虚拟机所在的行,然后点击 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. 如需选择您在其中创建了虚拟机的项目,请输入 1
    3. 如需跳过默认区域和可用区配置操作,请输入 n
  4. 安装 Docker 并允许非根用户运行容器:

    # 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
    

迁移来源虚拟机

迁移通常涉及三个步骤:复制来源虚拟机文件系统、分析文件系统以创建迁移计划,以及生成迁移制品。

以下部分介绍如何使用 Migrate to Containers CLI 来迁移使用本地 Linux 虚拟机的来源虚拟机。

复制来源虚拟机文件系统

复制来源虚拟机文件系统时,Migrate to Containers CLI 会使用默认过滤条件来减小复制的文件系统的大小。但是,为了保证 Apache 服务器可以启动,服务器需要 /var/log 目录(默认情况下,该目录会被移除)。

本部分介绍如何修改默认过滤条件,以确保 /var/log/* 与来源虚拟机文件系统一起复制。

  1. quickstart-local-vm 命令标签页上,在名为 filters.txt 的文件中获取默认 Migrate to Containers 过滤条件的列表:

    ./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 目录中。

部署迁移后的工作负载

在本部分中,您需要将迁移后的工作负载从本地虚拟机 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:
      creationTimestamp: null
      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:
      creationTimestamp: null
      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. 部署迁移后的虚拟机:

    skaffold run -d eu.gcr.io/PROJECT_ID
    
  7. 获取迁移后虚拟机的外部 IP 地址:

    kubectl get service hello-service
    
  8. 当 Web 服务器准备就绪后,您会看到所添加 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!,则表示虚拟机迁移成功。

    如果无法访问迁移后的工作负载,请参阅如何排查已知问题

清理

为避免因本页中使用的资源导致您的 Google Cloud 账号产生费用,请按照以下步骤操作。

删除 GKE 集群

  1. 在 Google Cloud 控制台中,转到 GKE 页面。

    转到 GKE

  2. 选择 quickstart-cluster,然后点击 删除
  3. 当系统提示您确认时,再次点击删除

删除虚拟机

  1. 在 Google Cloud 控制台中,前往虚拟机实例页面。

    转到“虚拟机实例”

  2. 点击名称 quickstart-source-vm
  3. 在实例详细信息页面顶部,点击 删除
  4. 点击名称 quickstart-local-vm
  5. 在实例详细信息页面顶部,点击 删除

后续步骤