如何从 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 -nooutCan'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 在节点上访问虚拟机。
