使用 Migrate to Containers CLI 来迁移 Linux 虚拟机
在本快速入门中,您将创建一个 Compute Engine 虚拟机实例,然后使用 Migrate to Containers CLI 将此虚拟机迁移到 Google Kubernetes Engine (GKE)。
准备工作
在 Google Cloud 控制台的“项目选择器”页面上,选择或创建 Google Cloud 项目。
确保您的 Google Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能。
启用 Compute Engine API。
启用 GKE API。
创建具有 Web 服务器的 Compute Engine 虚拟机以用作源虚拟机
本部分介绍如何创建一个提供 Hello World! 网页的简单 Compute Engine 虚拟机,该网页可在迁移完成后用于测试。
在 Google Cloud 控制台中,点击 激活 Cloud Shell。
创建一个虚拟机:
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
等待几分钟,让创建虚拟机的过程完成。
创建一条允许通过 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
转到虚拟机实例页面。
如需连接到虚拟机
quickstart-source-vm
,请找到虚拟机所在的行,然后点击 SSH。系统会在新标签页中打开连接。
在
quickstart-source-vm
命令标签页上,安装apache2
软件包:sudo apt-get update && sudo apt-get install apache2 -y
安装 Apache 后,操作系统会自动启动 Apache 服务器。
在同一标签页上,使用新网页覆盖 Apache Web 服务器的默认网页:
echo '<!doctype html><html><body><h1>Hello World!</h1></body></html>' | sudo tee /var/www/html/index.html
返回虚拟机实例页面,然后复制针对
quickstart-source-vm
显示的外部 IP 地址。将该虚拟机的 IP 地址粘贴到浏览器地址栏中。为该地址加上
http://
前缀。系统会显示 Hello World! 页面。
创建 Compute Engine 虚拟机以用作本地机器
在本部分中,您将创建一个用作本地机器的 Linux 虚拟机来执行用于迁移来源虚拟机的不同 Migrate to Containers 操作。
在 Google Cloud 控制台中,点击 激活 Cloud Shell。
创建一个虚拟机:
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
等待几分钟,让创建集群的过程完成。
准备本地虚拟机以执行迁移
转到虚拟机实例页面。
如需连接到虚拟机
quickstart-local-vm
,请找到虚拟机所在的行,然后点击 SSH。系统会在新标签页中打开连接。
在
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
。 - 如需跳过默认区域和可用区配置操作,请输入
n
。
- 如需选择用于执行各种操作的账号,请输入
安装 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
安装 Skaffold:
curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/latest/skaffold-linux-amd64 && \ sudo install skaffold /usr/local/bin/
下载 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/*
与来源虚拟机文件系统一起复制。
在
quickstart-local-vm
命令标签页上,在名为filters.txt
的文件中获取默认 Migrate to Containers 过滤条件的列表:./m2c copy default-filters > filters.txt
如需修改默认过滤条件,请执行以下操作:
在文本编辑器中打开
filters.txt
文件。vi filters.txt
如需在文件中进行更改,请按
i
。移除以下语句:
- /var/log/*
如需保存文件并退出文本编辑器,请按
Esc
,然后输入:wq
。
复制来源机器的文件系统:
./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 集群。
在
quickstart-local-vm
命令标签页上,安装gke-gcloud-auth-plugin
插件:sudo apt-get install google-cloud-sdk-gke-gcloud-auth-plugin
安装
kubectl
:sudo apt-get install kubectl
连接到集群
quickstart-cluster
:gcloud container clusters get-credentials quickstart-cluster \ --zone us-central1-a --project PROJECT_ID
打开
migration-artifacts
文件夹:cd migration-artifacts
如需将工作负载公开给互联网,请在
deployment_spec.yaml
文件中添加新的LoadBalancer
服务。如需修改deployment_spec.yaml
文件,请执行以下操作:在文本编辑器中打开
deployment_spec.yaml
文件。vi deployment_spec.yaml
如需在文件中进行更改,请按
i
。找到名为
linux-system
的Service
对象。它看起来类似于以下内容: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
在
linux-system
之后立即添加另一个名为hello-service
的Service
对象: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
如需保存文件并退出文本编辑器,请按
Esc
,然后输入:wq
。
部署迁移后的虚拟机:
skaffold run -d eu.gcr.io/PROJECT_ID
获取迁移后虚拟机的外部 IP 地址:
kubectl get service hello-service
当 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
如需检查迁移是否成功,请打开新的浏览器标签页,然后访问使用该外部 IP 地址的网页。
http://EXTERNAL_IP
请务必使用
HTTP
,而不是HTTPS
。如果您看到屏幕显示文本 Hello World!,则表示虚拟机迁移成功。
如果无法访问迁移后的工作负载,请参阅如何排查已知问题。
清理
为避免因本页中使用的资源导致您的 Google Cloud 账号产生费用,请按照以下步骤操作。
删除 GKE 集群
- 在 Google Cloud 控制台中,转到 GKE 页面。
- 选择
quickstart-cluster
,然后点击 删除。 - 当系统提示您确认时,再次点击删除。
删除虚拟机
- 在 Google Cloud 控制台中,前往虚拟机实例页面。
- 点击名称
quickstart-source-vm
。 - 在实例详细信息页面顶部,点击 删除。
- 点击名称
quickstart-local-vm
。 - 在实例详细信息页面顶部,点击 删除。
后续步骤
- 了解如何批量处理客机发现和数据收集。
- 如需了解如何迁移更复杂的应用,请参阅 Migrate to Containers GitHub 代码库中提供的迁移 Spring 框架应用教程。