kvm_explanation

https://wiki.debian.org/KVM

http://notes.maxwi.com/2016/11/29/kvm-create-and-manage/

install

  1. apt install -y qemu-kvm libvirt-clients libvirt-daemon-system
  2. apt install -y libvirt-bin virtinst bridge-utils libguestfs-tools
    • kvm: KVM的内核,通常linux系统自带
    • qemu-kvm: KVM的设备模拟器,实际上kvm只是负责加速,qemu才是虚拟机管理器
    • libvirt-bin: libvirt库,虚拟机命令行管理工具,包含很多实用工具,如后面需要大量使用的virsh。(安装之后会生成一个名为virbr0的网桥)
    • virtinst: 虚拟机创建(virt-install)和克隆工具(vrit-clone)等
    • birdge-utils: 用于桥接网卡的工具,如命令brctl)
    • 如果有图形化桌面,推荐安装virt-manager,这个工具可以非常方便地图形化管理虚拟机,就像常见的virtualbox/vmware界面那样,可以通过鼠标来完成虚拟机的管理。
    • virt-v2v:虚机格式迁移工具,该工具与virt-sysprep都包含在包libguestfs-tools中,后面布署中会用到
  3. 增加权限

    1
    2
    # adduser <youruser> libvirt
    # adduser <youruser> libvirt-qemu
  4. 桥接网卡

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    auto lo
    iface lo inet loopback

    # The primary network interface
    auto eth0

    #make sure we don't get addresses on our raw device
    iface eth0 inet manual
    iface eth0 inet6 manual

    #set up bridge and give it a static ip
    auto br0
    iface br0 inet static
    address 192.168.1.2
    netmask 255.255.255.0
    network 192.168.1.0
    broadcast 192.168.1.255
    gateway 192.168.1.1
    bridge_ports eth0
    bridge_stp off
    bridge_fd 0
    bridge_maxwait 0
    dns-nameservers 8.8.8.8

    #allow autoconf for ipv6
    iface br0 inet6 auto
    accept_ra 1
  5. 操作

  • Start a configured VM guest “VMGUEST”:

    1
    # virsh start VMGUEST
  • Notify the VM guest “VMGUEST” to graceful shutdown:

    1
    # virsh shutdown VMGUEST
  • Force the VM guest “VMGUEST” to shutdown in case it is hanged, i.e. graceful shutdown not work:

    1
    2
    3
    4
    # virsh destroy VMGUEST
    # virsh undefine VMGUEST
    # virsh autostart snale
    # virsh autostart --disable snale
  • Edit the VM guest configuration, assume the VM guest name is “VMGUEST” having 4 virtual CPU core

    1
    # virsh edit VMGUEST
  • libvirt defaults to qemu:///session for non-root. So from you’ll need to do:

    1
    $ virsh --connect qemu:///system list --all
  • Prepare VM guest

    1
    2
    3
    4
    5
    6
    # Clone
    $ virt-clone --connect qemu:///system --original vm --name vm_clone --file /var/lib/libvirt/images/vm_clone.img
    # Prepare
    $ # virt-sysprep --connect qemu:///system -d VMGUEST
    # Prepare ssh hostkey
    $ dpkg-reconfigure openssh-server
  • Creating a new guest

    1
    virt-install --connect qemu:///system -n win7 -r 2048 --vcpus=2 --disk path=/var/lib/libvirt/images/vm_win7.img,size=50 -c ~/cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso --vnc --vnclisten=0.0.0.0 --vncport=6060 --noautoconsole --os-type linux --os-variant win7 --accelerate --network=bridge:br0 --hvm
1
2
3
4
5
6
7
8
9
10
11
- –virt-type=kvm: 使用KVM作为虚拟机监视器
- –name=Centos7: 虚拟机实例的名字,每个虚拟机的名字都不能一样,不能有空格
- –ram=1024: 指定虚拟机内存大小,单位是Mb
- –vcpus=1: 为虚拟机指定分配的虚拟CPU核数
- –os-variant=rhel7: 指定虚拟机系统所属系列以优化虚拟机参数,可以通过命令osinfo-query os 来显示所有支持的系统列表,osinfo-query在包libosinfo-bin中 sudo apt-get install libosinfo-bin
- –hvm: 启用全虚拟化,KVM虚拟机支持全虚拟化,属于优化性参数
- –cdrom=/home/vhost/CentOS-7-x86_64-Minimal-1511.iso: 指定作为虚拟机光驱内容的设备或文件,可以是主机的CDROM或者iso文件。
- –network network=default,model=virtio: 将虚拟机连接到主机网络,此处连接到一个名为defalut的虚拟网络(即让虚拟机使用NAT模式上网),网卡模式设置为virtio。如果使用桥接模式,则只需要改参数为–network=bridge=br0,model=virtio即可。
- –graphics vnc: 设置虚拟机的console并将其输出到VNC,这样就可以通过VNC来连接虚拟机了。同时可以指定vnc的端口和监听范围以及密码: –vncport=5910 –vnclisten=0.0.0.0。默认情况下端口为从5900开始的第一个空闲端口,监听范围为本机127.0.0.1,修改为0.0.0.0以使外网主机可以连接。后面会讲对于只支持SSH协议的情况下,如何通过SSH隧道连接,所以是否设置为0.0.0.0没有影响,但能设置为0.0.0.0的话,还是设置为0.0.0.0,毕竟直接通过VNC连接更加方便。这些参数也可以在/etc/libvirt/qemu.conf中修改,以使其对所有虚拟机生效,VNC默认连接没有密码。VNC可以理解为linux下的远程桌面
- –disk path=/home/vhost/centos7.img,size=20,bus=virtio,format=raw: 指定虚拟机所使用的存储路径,大小为20G,disk bus类型为virtio,磁盘格式为raw,如果不指定fortmat,则默认格式即为raw。
- `osinfo-query os`
1
2
3
4
5
6
7
8
9
10
11
centos6.8            | CentOS 6.8                                         | 6.8      | http://centos.org/centos/6.8            
centos6.9 | CentOS 6.9 | 6.9 | http://centos.org/centos/6.9
centos7.0 | CentOS 7.0 | 7.0 | http://centos.org/centos/7.0
debian8 | Debian Jessie | 8 | http://debian.org/debian/8
debian9 | Debian Stretch | 9 | http://debian.org/debian/9
win10 | Microsoft Windows 10 | 10.0 | http://microsoft.com/win/10
win7 | Microsoft Windows 7 | 6.1 | http://microsoft.com/win/7
win8 | Microsoft Windows 8 | 6.2 | http://microsoft.com/win/8
win8.1 | Microsoft Windows 8.1 | 6.3 | http://microsoft.com/win/8.1
winvista | Microsoft Windows Vista | 6.0 | http://microsoft.com/win/vista
winxp | Microsoft Windows XP | 5.1 | http://microsoft.com/win/xp