使用 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 框架应用教程。