跳转至

如何从 VMWare 导入传统虚拟机到云原生虚拟机平台

本文将详细介绍如何通过命令行将外部平台 VMware 上的虚拟机导入到 DCE 5.0 的虚拟机中。

Info

本文档外部虚拟平台是 VMware vSphere Client,后续简写为 vSphere。 技术上是依靠 kubevirt cdi 来实现的。操作前,vSphere 上被导入的虚拟机需要关机。 以 Ubuntu 操作系统的虚拟机为例。

获取 vSphere 的虚拟机基础信息

  1. vSphere URL:目标平台的 URL 地址信息

  2. 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  # 所需值
    

  3. vSphere 账号:获取 vSphere 的账号信息,注意权限问题

  4. vSphere 密码:获取 vSphere 的密码信息

  5. 需要导入虚拟机的 UUID(需要在 vSphere 的 web 页面获取)

    • 进入 Vsphere 页面中,进入被导入虚拟机的详情页面,点击 编辑配置 ,此时打开浏览器的开发者控制台, 点击 网络 —> 标头 找到如下图所示的 URL。

      找到 URL

    • 点击 响应 ,定位到 vmConfigContext —> config ,最终找到目标值 uuid

      找到 uuid

  6. 需要导入虚拟机的 vmdk 文件 path

获取 vSphere 的虚拟机基础信息

  1. 准备 vddk 镜像

    • 下载 vddk:需要在 vmware 网站 注册账号后下载

      前往 SDKs,点击 Compute Virtualization ,选择并下载合适版本的 VMware Virtual Disk Development Kit (VDDK)

      点击 Compute Virtualization

      选择版本

      下载

    • 解压并构建成镜像:

      • 解压

        tar -xzf VMware-vix-disklib-<version>.x86_64.tar.gz
        
      • 创建 Dockerfile 文件

        FROM busybox:latest
        COPY vmware-vix-disklib-distrib /vmware-vix-disklib-distrib
        RUN mkdir -p /opt
        ENTRYPOINT ["cp", "-r", "/vmware-vix-disklib-distrib", "/opt"]
        EOF
        
      • 推送镜像至仓库

获取 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)

  1. 在将 vSphere 虚拟机导入 KubeVirt 的 CDI 过程中,需要使用 vddk 组件。

  2. 请确保 configmap 的命名空间与 CDI 所在的命名空间保持一致 (Virtnest Agent 的默认命名空间是 virtnest-system,示例中为 cdi)。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: v2v-vmware
      namespace: cdi
      data:
        vddk-init-image: release-ci.daocloud.io/virtnest/vddk:v1
    

编写 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 检查是否成功运行

  1. 修改虚拟机的网络配置

  2. 查看当前网络

    在实际导入完成时,如下图所示的配置已经完成。然而,需要注意的是,enp1s0接口并没有包含inet字段,因此无法连接到外部网络。

    查看网络配置

  3. 配置 netplan

    在上图所示的配置中,将 ethernets 中的对象更改为 enp1s0,并使用 DHCP 获得 IP 地址。

    配置 netplan

  4. 将 netplan 配置应用到系统网络配置中

    sudo netplan apply
    
  5. 对外部网络进行 ping 测试

    ping网络

  6. 通过 SSH 在节点上访问虚拟机。

    访问虚拟机

评论