彻底虚拟化软件kvm的应用

1、KVM虚拟机简介
linux

    Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux2.6.20以后继承Linux的主要发行版本中。它使用Linux自身的调度器进行管理,因此相对于Xen,其核心源码不多。KVM目前已成为学术界的VMM之一。ubuntu

    Kvm仅仅是一个linux内核的模块,当在linux中安装了kvm后,linux会变成了hypervisor,即VMM,进行CPU和内存的虚拟管理,而qemu工具,实现虚拟机的建立管理,monitor管理各个IO设备,redhat在购买掉kvm后,专门定制了适合于redhat系统的qemu-kvm管理工具。vim

   

    Kvm只能运行在支持硬件虚拟化的CPU上,而且只支持64bits系统。kvm属于彻底虚拟化的实现软件。api


2、KVM架构缓存


   wKioL1OBfCSTxjmyAAFkCAzsuSc543.jpg

   

  如上kvm架构图
  安装了kvm后的内核变得很诡异,其模式分为了三部分:内核模式,用户模式,来宾模式
  
  VCPU:用线程模拟实现的CPU
  
  KVM的主要两类组件:
  一、/dev/kvm:管理虚拟机的设备文件,用户空间的程序可经过调用其ioctl()来完成虚拟机的建立启动等管理工做,它是一个字符设备;其主要完成的操做包括:
    建立虚拟机;
    为虚拟机分配内存;
    读、写VCPU的寄存器;
    向VCPU注入中断请求;
    运行VCPU;
  二、qemu进程:工做于用户空间的组件,用于方针PC机的I/0类硬件设备。


3、KVM内存管理bash

  KVM继承了Linux系统管理内存的诸多特性,好比分配给虚拟使用的内存能够被交换至交换空间、可以使用大内存页以实现更好的性能,以及对NUMA的 的支持可以让虚拟机高效访问更大的内存空间等。服务器

  KVM基于Intel的EPT(Extended Page Table)或AMD的RVI(Rapid Virtualization Indexing)技术能够支持更新的内存虚拟功能,这能够下降CPU的占用率,并提升较好的吞吐量。网络

  此外,KVM还借助于KSM(Kernel Same-page Merging)这个内核特性实现了内存页面恭喜那个。KSM 经过扫描每一个虚拟机的内存查找各虚拟机间相同的内存页,并将这些内存合并为一个被各类相关虚拟机共享的单独页面。在某虚拟机试图修改此页面中的数据时,KSM会从新为其提供一个新的页面副本。实践中,运行于同一台物理主机上的具备相同GuestOS的虚拟机之间出现相同内存页面的几率是很大的,好比共享库,内核或其余内存对象等都有可能表现为相同的内存页,所以KSM技术能够下降内存占用而提升总体性能。架构


4、KVM的管理工具socket

    wKiom1OBi3yhaw18AAETKNqXG8U886.jpg

      下面咱们重点讲解qemu-kvm工具


5、使用qemu-kvm管理KVM虚拟机

  Qemu是一个普遍使用的开源计算机仿真器和虚拟机。看成为仿真器时,能够在一种架构(如PC机)下运行另外一种架构如(ARM)的操做系统和程序。而经过动态转换,其能够得到很高的运行效率,看成为一个虚拟机时,qemu能够经过直接使用真机的系统资源,让虚拟系统可以得到接近于物理机的性能表现。qemu支持xen或者kvm模式下的虚拟化。当用kvm时,qemu能够虚拟x8六、服务器和嵌入式powerpc,以及s390的系统


  Qemu当运行与主机架构相同的目标架构时可使用KVM。例如当在一个x86兼容处理器上运行qemu-system-x86时,能够利用kvm加速——为宿主机和客户机提供更好的性能


  Qemu的组成部分:

    处理器模拟器(x8六、PowerPC和Sparc)

    仿真设备(显卡、网卡、硬盘、鼠标等)

    用于将仿真设备链接至主机设备(真实设备)的通用设备;

    模拟机的描述信息;

    调试器;

    与模拟器交互的用户接口;


     

6、使用qemu-kvm安装Guest虚拟机

    qemu-kvm相似于基于libvirt的工具如virt-manager和virt-install。直接使用qemu-kvm命令一样能够完成虚拟机的建立于管理


    qemu-kvm命令

    在RHEL6中,qemu-kvm位于/usr/libexec目录中。因为此目录不属于PATH环境变量,故没法直接使用,这样也组织了能够直接使用qemu做为建立并管理虚拟机。若是想使用qemu虚拟机,能够经过将?usr/libexe/qemu-kvm连接为/usr/bin/qemu实现 

    #ln -sv /usr/lib/exec/qemu-kvm /usr/bin/qemu-kvm


    qemu-kvm命令格式

    qemu-kvm [options] [disk_p_w_picpath] ,其选项很是多,不过大体能够分为以下几类


    标准选项;

    USB选项;

    显示选项;

    i386平台专用选项;

    网络选项;

    字符设备选项;

    蓝牙相关选项;

    Linux系统引导专用选项;

    调试/专家模式选项;

    PowerPC专用选项;

    Sparc32专用选项;


   一、qemu-kvm的标准选项

      

   qemu-kvm的标准选项主要涉及指定主机类型、CPU模式、NUMA、软驱设备、光驱设备及硬件设备等。
 -name name:设定虚拟机名称;
 -M machine:指定要模拟的主机类型,如Standard PC、ISA-only PC或Intel-Mac等,可使用“qemu-kvm -M ?”获取所支持的全部类型;
 -m megs:设定虚拟机的RAM大小;
 -cpu model:设定CPU模型,如coreduo、qemu64等,可使用“qemu-kvm -cpu ?”获取所支持的全部模型;
 -smp n[,cores=cores][,threads=threads][,sockets=sockets][,maxcpus=maxcpus]:设定模拟的SMP架构中CPU的个数等、每一个CPU的核心数及CPU的socket数目等;PC机上最多能够模拟255颗CPU;maxcpus用于指定热插入的CPU个数上限;
   -numa opts:指定模拟多节点的numa设备;
   -fda file
   -fdb file:使用指定文件(file)做为软盘镜像,file为/dev/fd0表示使用物理软驱;
   -hda file
   -hdb file
   -hdc file
   -hdd file:使用指定file做为硬盘镜像;
   -cdrom file:使用指定file做为CD-ROM镜像,须要注意的是-cdrom和-hdc不能同时使用;将file指定为/dev/cdrom能够直接使用物理光驱;
 -drive option[,option[,option[,...]]]:定义一个硬盘设备;可用子选项有不少。
    file=/path/to/somefile:硬件映像文件路径;
    if=interface:指定硬盘设备所链接的接口类型,即控制器类型,如ide、scsi、sd、mtd、floppy、pflash及virtio等;
    index=index:设定同一种控制器类型中不一样设备的索引号,即标识号;
    media=media:定义介质类型为硬盘(disk)仍是光盘(cdrom);
    snapshot=snapshot:指定当前硬盘设备是否支持快照功能:on或off;
    cache=cache:定义如何使用物理机缓存来访问块数据,其可用值有none、writeback、unsafe和writethrough四个;
    format=format:指定映像文件的格式,具体格式可参见qemu-img命令;
 -boot [order=drives][,once=drives][,menu=on|off]:定义启动设备的引导次序,每种设备使用一个字符表示;不一样的架构所支持的设备及其表示字符不尽相同,在x86 PC架构上,a、b表示软驱、c表示第一块硬盘,d表示第一个光驱设备,n-p表示网络适配器;默认为硬盘设备;
       例如:-boot order=dc,once=d

    二、qemu-kvm的显示选项

    

     显示选项用于定义虚拟机启动后的显示接口相关类型及属性等。
 
 -nographic:默认状况下,qemu使用SDL来显示VGA输出;而此选项用于禁止图形接口,此时,qemu相似一个简单的命令行程序,其仿真串口设备将被重定向到控制台;
 -curses:禁止图形接口,并使用curses/ncurses做为交互接口;
 -alt-grab:使用Ctrl+Alt+Shift组合键释放鼠标;
 -ctrl-grab:使用右Ctrl键释放鼠标;
 -sdl:启用SDL;
 -spice option[,option[,...]]:启用spice远程桌面协议;其有许多子选项,具体请参照qemu-kvm的手册;
 -vga type:指定要仿真的VGA接口类型,常见类型有:
    cirrus:Cirrus Logic GD5446显示卡;
    std:带有Bochs VBI扩展的标准VGA显示卡;
    vmware:VMWare SVGA-II兼容的显示适配器;
    qxl:QXL半虚拟化显示卡;与VGA兼容;在Guest中安装qxl驱动后能以很好的方式工做,在使用spice协议时推荐使用此类型;
    none:禁用VGA卡;
 -vnc display[,option[,option[,...]]]:默认状况下,qemu使用SDL显示VGA输出;使用-vnc选项,可让qemu监听在VNC上,并将VGA输出重定向至VNC会话;使用此选项时,必须使用-k选项指定键盘布局类型;其有许多子选项,具体请参照qemu-kvm的手册;

   

    三、i386平台专用选项

     

 -no-acpi:禁用ACPI功能,GuestOS与ACPI出现兼容问题时使用此选项;
 -balloon none:禁用balloon设备;
 -balloon virtio[,addr=addr]:启用virtio balloon设备;

    四、网络属性相关选项

        

   网络属性相关选项用于定义网络设备接口类型及其相关的各属性等信息。这里只介绍nic、tap和user三种类型网络接口的属性,其它类型请参照qemu-kvm手册。
 
  -net nic[,vlan=n][,macaddr=mac][,model=type][,name=name][,addr=addr][,vectors=v]:建立一个新的网卡设备并链接至vlan n中;PC架构上默认的NIC为e1000,macaddr用于为其指定MAC地址,name用于指定一个在监控时显示的网上设备名称;emu能够模拟多个类型的网卡设备,如virtio、i8255一、i82557b、i82559er、ne2k_isa、pcnet、rtl813九、e1000、smc91c1十一、lance及mcf_fec等;不过,不一样平台架构上,其支持的类型可能只包含前述列表的一部分,可使用“qemu-kvm -net nic,model=?”来获取当前平台支持的类型;
  -net tap[,vlan=n][,name=name][,fd=h][,ifname=name][,script=file][,downscript=dfile]:经过物理机的TAP网络接口链接至vlan n中,使用script=file指定的脚本(默认为/etc/qemu-ifup)来配置当前网络接口,并使用downscript=file指定的脚本(默认为/etc/qemu-ifdown)来撤消接口配置;使用script=no和downscript=no可分别用来禁止执行脚本;
  -net user[,option][,option][,...]:在用户模式配置网络栈,其不依赖于管理权限;有效选项有:
    vlan=n:链接至vlan n,默认n=0;
    name=name:指定接口的显示名称,经常使用于监控模式中;
    net=addr[/mask]:设定GuestOS可见的IP网络,掩码可选,默认为10.0.2.0/8;
    host=addr:指定GuestOS中看到的物理机的IP地址,默认为指定网络中的第二个,即x.x.x.2;
    dhcpstart=addr:指定DHCP服务地址池中16个地址的起始IP,默认为第16个至第31个,即x.x.x.16-x.x.x.31;
    dns=addr:指定GuestOS可见的dns服务器地址;默认为GuestOS网络中的第三个地址,即x.x.x.3;
    tftp=dir:激活内置的tftp服务器,并使用指定的dir做为tftp服务器的默认根目录;
    bootfile=file:BOOTP文件名称,用于实现网络引导GuestOS;如:qemu -hda linux.img -boot n -net user,tftp=/tftpserver/pub,bootfile=/pxelinux.0

  

 7、使用qemu-kvm安装ubuntu虚拟机  


   1. 使用vmware虚拟机,须要确保硬件辅助实现CPU彻底虚拟化

    wKioL1OBkAajgLZxAAHwQgKRJIc681.jpg

    

    二、查看hypervisor是否支持虚拟化

     

    # grep -Ei  "vmx|svm" /proc/cpuinfo --color=auto
    其中vmx表明intel的cpu支持虚拟化,svm表明AMD的cpu支持虚拟化

    

    三、查看当前系统中关于kvm模块

     

     # grep -i "kvm" /boot/config-2.6.32-431.el6.x86_64 
         CONFIG_KVM_CLOCK=y
         CONFIG_KVM_GUEST=y
         CONFIG_HAVE_KVM=y
         CONFIG_HAVE_KVM_IRQCHIP=y
         CONFIG_HAVE_KVM_EVENTFD=y
         CONFIG_KVM_APIC_ARCHITECTURE=y
         CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT=y
         CONFIG_KVM=m
         CONFIG_KVM_INTEL=m
         CONFIG_KVM_AMD=m

    四、装载kvm和kvm_intal模块 

      

    # modprobe kvm
    # modprobe kvm_intel  
    # lsmod | grep kvm
      kvm_intel              54285  0 
      kvm                   333172  1 kvm_intel

   五、安装qemu-kvm qemu-kvm-tools虚拟机管理工具

     

    # yum -y isntall qemu-kvm qemu-kvm-tools

   六、配置qemu-kvm程序的环境变量

    

   # ln -sv /usr/libexec/qemu-kvm /usr/sbin

   七、建立磁盘镜像文件 

    

   # mkdir /p_w_picpaths/vm1 -pv
   # qemu-img create -f qcow2 -o size=100G /p_w_picpaths/vm1/ubuntu.qcow2
     
   qemu-img命令解析
   
   qemu-img是qemu用来实现磁盘映像管理的工具组件,其有不少子命令,分别用于实现不一样的管理功能,而每个子命令也都有一系列不一样的选项。语法格式为“qemu-img subcommand [options]”,其支持的子命令以下
        create:建立一个新的磁盘映像文件
        check:检查磁盘映像文件中的错误
        convert:转换磁盘映像的格式
        info:显示指定磁盘映像的信息
        snapshot:管理磁盘映像的快照
        commit:提交磁盘映像的全部改变
        rbase:基于某磁盘映像建立新的映像文件
        resize:增大或缩减磁盘映像文件的大小

   八、得到ubuntu镜像文件存放于/root目录

    

   # ls /root
   
    ubuntu-12.04.1-desktop-i386.iso

   九、安装vnc服务器端与客户端

    

   # yum -y install tigervnc-server tigervnc

   十、建立桥设备

     

   # brctl  addbr br0
   # ifconfig  eth0 0 up 
   # brctl   addif  br0 eth0
   # ifconfig br0 172.16.13.2/16 up 
   # route add default gw 172.16.0.1 
   # brctl stp br0 on

   十一、建立/etc/qemu-ifup脚本

    

   #vim /etc/qemu-ifup 内容以下
    #!/bin/bash
    #
    switch=br0
     if [ -n "$1" ];then
        ifconfig $1 up
        sleep 0.5s
        brctl  addif $switch $1
        exit 0
     else
        echo "Error: no specifed interface"
        exit1
     fi

   十二、建立虚拟机

    

  # qemu-kvm -name "ubuntu" -m 768 -smp 4 -drive file=/p_w_picpaths/vm1/ubuntu.qcow2,if=ide,index=0,media=disk,format=qcow2 -drive file=/root/ubuntu-12.04.1-desktop-i386.iso,media=cdrom,index=1 -boot order=dc -net nic -net tap,name=vnet0,downscript=no
  
  VNC server running on `::1:5900'

   1三、经过vnc客户端链接至虚拟机安装

   

   # vncviewer :5900

    wKioL1OBlUqwWZFPAABWXTM6p04839.jpg

    wKioL1OBlfTxxQRLAAHYbQS8CjA010.jpg 接下来就是系统安装的过程


 经过使用qemu-kvm工具建立虚拟机实例成功!

相关文章
相关标签/搜索