在kvm中部署嵌套esxi6.7

最近测试esxi6.7的vmotion功能,为了熟悉kvm决定在kvm上实现, 系统是ubuntu16.04, 启动一个kvm,发现esxi在迁移时会崩溃,没法进行迁移,查找相关次料,解决方案以下:shell

KVM的安装和使用

  1. 首先安装kvm
    # apt install qemu-system-x86 qemu-kvm qemu libvirt-bin virt-manager virtinst bridge-utils cpu-checker virt-viewer
  2. 校验kvm是否安装,并检测cpu的VT-x虚拟化有没有开,出现如下信息说明正常
    # kvm-ok
    INFO: /dev/kvm exists
    KVM acceleration can be used
  3. 运行virt-host-validate查看你的环境对kvm的技持,若是所有为pass,说明能够
    # virt-host-validate 
    QEMU: Checking for hardware virtualization                                 : PASS
    QEMU: Checking if device /dev/kvm exists                                   : PASS
  4. 若是你想使普通用户可以使用kvm,能够添加当前用户到libvirt组中
cat /etc/group | grep libvirt | awk -F':' {'print $1'} | xargs -n1 sudo adduser $USER  

# add user to kvm group also
sudo adduser $USER kvm

# relogin, then show group membership
exec su -l $USER
id | grep libvirt
  1. 缺省的,kvm会创建一个虚拟的交换机名字为virbr0, 使用192.168.122.0/24
    # ip addr show virbr0
    17: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:d2:52:b5 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
  2. virbr0其实是一个nat模式,咱们能够经过iptables看到实际的状况
    # iptable -t nat -vnL
    Chain POSTROUTING (policy ACCEPT 146 packets, 11359 bytes)
    pkts bytes target     prot opt in     out     source               destination         
    0     0 RETURN     all  --  *      *       192.168.122.0/24     224.0.0.0/24        
    0     0 RETURN     all  --  *      *       192.168.122.0/24     255.255.255.255     
    0     0 MASQUERADE  tcp  --  *      *       192.168.122.0/24    !192.168.122.0/24     masq ports: 1024-65535
    0     0 MASQUERADE  udp  --  *      *       192.168.122.0/24    !192.168.122.0/24     masq ports: 1024-65535
    0     0 MASQUERADE  all  --  *      *       192.168.122.0/24    !192.168.122.0/24
  3. 定义存储池,缺省的存储池是/var/lib/libvirt/images, 但你能够另外mount你想要的os磁盘
# virsh pool-list --all
 Name                 State      Autostart 
-------------------------------------------
 default              active     yes 

$ virsh pool-define-as kvmpool --type dir --target /data/kvm/pool
Pool kvmpool defined
$ virsh pool-list --all
$ virsh pool-start kvmpool
$ virsh pool-autostart kvmpool

$ virsh pool-list --all
 Name                 State      Autostart 
-------------------------------------------
 default              active     yes       
 kvmpool              active     yes
  1. 布署一个vm在你的kvm上,创建一个1vcpu/1G RAM使用缺省的virbr0 NAT网络和缺省的pool storage
virt-install --virt-type=kvm --name=ukvm1404 --ram 1024 --vcpus=1 --virt-type=kvm --hvm --cdrom ~/Downloads/mini.iso --network network=default --graphics vnc --disk pool=default,size=20,bus=virtio,format=qcow2 --noautoconsole

# open console to VM
virt-viewer ukvm1404
  1. 若是你想删除这个vm,能够使用以下命令:
    virsh destroy ukvm1404
    virsh undefine ukvm1404
  2. 如你想要一个所有图形化的软件管理kvm,能够使用virt-manager,当你没安装图形介面时你能够使用x协议的ssh客户端,如xshell, 或xming+ssh客户端软件

布署esxi在KVM中

  1. 配置VT-x,你一样须要在ubuntu中配置VT
# vi /etc/modprobe.d/qemu-system-x86.conf 

options kvm_intel nested=1 enable_apicv=n
options kvm ignore_msrs=1
  1. 重启系统,执行下列命令,必须返回以下值
# want Y to be returned
$ cat /sys/module/kvm/parameters/ignore_msrs

# want N to be returned
$ cat /sys/module/kvm_intel/parameters/enable_apicv

# want Y to be returned
$ cat /sys/module/kvm_intel/parameters/nested
  1. 创建kvm虚拟机
    # virt-install --virt-type=kvm --name=esxi4 \
    --ram 4096 --vcpus=4 \
    --virt-type=kvm --hvm \
    --cdrom /data/iso/VMware-VMvisor-Installer-6.7.0.update03-14320388.x86_64.iso \
    --network network:default,model=e1000 \
    --graphics vnc --video qxl \
    --disk pool=default,size=80,sparse=true,bus=ide,format=qcow2 \
    --boot cdrom,hd --noautoconsole --force \
    --cpu host-model-only
    固然你也能够使用virt-manager来创建虚拟机。

    在kvm中部署嵌套esxi6.7

  2. 重复创建两个虚拟机,创建两个esxi实现动态vmotion迁移,测试和创建步骤省略,经测试vmotion能够正常工做,不会出现崩溃现象。