如何从 VMWare 导入传统虚拟机到云原生虚拟机平台¶
本文将详细介绍如何通过命令行将外部平台 VMware 上的虚拟机导入到 DCE 5.0 的虚拟机中。
Info
本文档外部虚拟平台是 VMware vSphere Client,后续简写为 vSphere。 技术上是依靠 kubevirt cdi 来实现的。操作前,vSphere 上被导入的虚拟机需要关机。 以 Ubuntu 操作系统的虚拟机为例。
获取 vSphere 的虚拟机基础信息¶
-
vSphere URL:目标平台的 URL 地址信息
-
vSphere SSL 证书指纹 thumbprint:需要通过 openssl 获取
输出类似于:openssl s_client -connect 10.64.56.11:443 </dev/null | openssl x509 -in /dev/stdin -fingerprint -sha1 -noout
Can't use SSL_get_servername depth=0 CN = vcsa.daocloud.io verify error:num=20:unable to get local issuer certificate verify return:1 depth=0 CN = vcsa.daocloud.io verify error:num=21:unable to verify the first certificate verify return:1 depth=0 CN = vcsa.daocloud.io verify return:1 DONE sha1 Fingerprint=C3:9D:D7:55:6A:43:11:2B:DE:BA:27:EA:3B:C2:13:AF:E4:12:62:4D # 所需值
-
vSphere 账号:获取 vSphere 的账号信息,注意权限问题
-
vSphere 密码:获取 vSphere 的密码信息
-
需要导入虚拟机的 UUID(需要在 vSphere 的 web 页面获取)
-
进入 Vsphere 页面中,进入被导入虚拟机的详情页面,点击 编辑配置 ,此时打开浏览器的开发者控制台, 点击 网络 —> 标头 找到如下图所示的 URL。
-
点击 响应 ,定位到 vmConfigContext —> config ,最终找到目标值 uuid 。
-
-
需要导入虚拟机的 vmdk 文件 path
获取 vSphere 的虚拟机基础信息¶
-
准备 vddk 镜像
-
下载 vddk:需要在 vmware 网站 注册账号后下载
前往 SDKs,点击 Compute Virtualization ,选择并下载合适版本的 VMware Virtual Disk Development Kit (VDDK) 。
-
解压并构建成镜像:
-
解压
-
创建 Dockerfile 文件
-
推送镜像至仓库
-
-
获取 vSphere 的账号密码 secret¶
apiVersion: v1
kind: Secret
metadata:
name: vsphere # 可更改
labels:
app: containerized-data-importer # 请勿更改
type: Opaque
data:
accessKeyId: "username-base64"
secretKey: "password-base64"
配置 kubevirt cdi configmap(vddk)¶
-
在将 vSphere 虚拟机导入 KubeVirt 的 CDI 过程中,需要使用 vddk 组件。
-
请确保 configmap 的命名空间与 CDI 所在的命名空间保持一致 (Virtnest Agent 的默认命名空间是 virtnest-system,示例中为 cdi)。
编写 kubevirt vm yaml 创建 vm¶
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
name: export-ubuntu-vddk
namespace: default
spec:
dataVolumeTemplates:
- metadata:
name: systemdisk-export-ubuntu-vddk
namespace: default
spec:
pvc:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
storageClassName: local-path
source:
vddk:
backingFile: "[esxi-d02-08-SSD] kubevirt-export-ubuntu-1/kubevirt-export-ubuntu-1.vmdk" # vsphere 虚拟机基础信息中的磁盘
url: "https://10.64.56.11" # vsphere url
uuid: "4234ea54-9b4b-b8ba-3de0-8612d8600648" # vsphere 虚拟机基础信息中的 uuid
thumbprint: "C3:9D:D7:55:6A:43:11:2B:DE:BA:27:EA:3B:C2:13:AF:E4:12:62:4D" # vsphere SSL fingerprint
secretRef: "vsphere" # vsphere 账号密码 secret
runStrategy: Always
template:
metadata:
creationTimestamp: null
spec:
architecture: amd64
domain:
devices:
disks:
- disk:
bus: virtio
bootOrder: 1
name: systemdisk-export
interfaces:
- masquerade: {}
name: default
machine:
type: q35
resources:
limits:
cpu: "1"
memory: 2Gi
requests:
cpu: "1"
memory: 1Gi
networks:
- name: default
pod: {}
volumes:
- dataVolume:
name: systemdisk-export-ubuntu-vddk
name: systemdisk-export
进入 VNC 检查是否成功运行¶
-
修改虚拟机的网络配置
-
查看当前网络
在实际导入完成时,如下图所示的配置已经完成。然而,需要注意的是,enp1s0接口并没有包含inet字段,因此无法连接到外部网络。
-
配置 netplan
在上图所示的配置中,将 ethernets 中的对象更改为 enp1s0,并使用 DHCP 获得 IP 地址。
-
将 netplan 配置应用到系统网络配置中
-
对外部网络进行 ping 测试
-
通过 SSH 在节点上访问虚拟机。