kvm 网络虚拟化技术_kvm虚拟化技术之使用qemu-kvm创建和管理虚拟机 - CSDN
  • 总的来说,就是让虚拟机访问物理网卡的层数更少,直至对物理...全虚拟化网卡是虚拟化层完全模拟出来的网卡,半虚拟化网卡通过驱动对操作系统做了改造; viritio简单的说,就是告诉虚拟机,hi 你就是在一个虚拟化

    总的来说,就是让虚拟机访问物理网卡的层数更少,直至对物理网卡的单独占领,和物理机一样的使用物理网卡,达到和物理机一样的网络性能。


    方案一 全虚拟化网卡和virtio

    clip_image004

    Virtio与全虚拟化网卡区别    
    全虚拟化网卡是虚拟化层完全模拟出来的网卡,半虚拟化网卡通过驱动对操作系统做了改造;    
    viritio简单的说,就是告诉虚拟机,hi 你就是在一个虚拟化平台上跑,咱们一起做一些改动,让你在虚拟化平台上获得更好的性能;    
    clip_image006  

      
    关于virtio的使用场景    
    因 为windows虚拟机使用viritio有网络闪断的情况发生,windows 虚拟机如果网络压力不高,建议使用e1000这样的全虚拟化网卡,如果网络压力比较高,建议使用SRIVO或者PCI Device Assignment这样的技术;viritio也在不断的演进,希望windows的闪断的问题越来越少。

    KVM天生就是为linux系统设计的,linux系统请放心大胆的使用viritio驱动;


    方案二 vhost_net macvtap技术

    clip_image008

    vhost_net使虚拟机的网络通讯直接绕过用户空间的虚拟化层,直接可以和内核通讯,从而提供虚拟机的网络性能;

    macvtap则是跳过内核的网桥;


    使用vhost_net,必须使用virtio半虚拟化网卡;

    vhost_net虚拟机xml文件配置,

    1
    2
    3
    4
    5
    6
    7
    <interface type='bridge'>
         <mac address=''/>
         <source bridge='br0'/>
         <model type='virtio'/>
    <driver name="vhost"/>
         <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
       </interface>

    如果不使用vhost_net,则为

    1
    <driver name="qemu"/>

    macvtap 虚拟机xml配置

    1
    2
    3
    4
    5
    6
    <interface type='direct'>
          <mac address='00:16:3e:d5:d6:77'/>
          <source dev='lo' mode='bridge'/>
          <model type='e1000'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
        </interface>

    注意:macvtap在windows虚拟机上性能很差,不建议使用

    vhost_net macvtap比较

    macvlan的功能是给同一个物理网卡配置多个MAC地址,这样可以在软件商配置多个以太网口,属于物理层的功能。  
    macvtap是用来替代TUN/TAP和Bridge内核模块,macvtap是基于macvlan这个模块,提供TUN/TAP中tap设备使用的接口,    
    使用macvtap以太网口的虚拟机能够通过tap设备接口,直接将数据传递到内核中对应的macvtap以太网口。    
    vhost-net是对于virtio的优化,virtio本来是设计用于进行客户系统的前端与VMM的后端通信,减少硬件虚拟化方式下根模式个非根模式的切换。    
    而是用vhost-net后,可以进一步进入CPU的根模式后,需要进入用户态将数据发送到tap设备后再次切入内核态的开销,而是进入内核态后不需要在进行内核态用户态的切换,进一步减少这种特权级的切换,说vhost-net属于哪个层不准确,而是属于进行二层网络数据传递的优化。


    方案三 虚拟机网卡独占

    clip_image010

    网卡passthrough在虚拟机的配置方法

    1 使用lcpci 设备查看pci设备信息

    1
    2
    04:00.0 Ethernet controller: Intel Corporation 82571EB Gigabit Ethernet Controller (rev 06)
    04:00.1 Ethernet controller: Intel Corporation 82571EB Gigabit Ethernet Controller (rev 06)

    也可以使用virsh nodedev-list –tree得到信息

    1
    2
    3
    4
    5
    6
    7
    8
    9
    +- pci_0000_00_07_0
    |   |
    |   +- pci_0000_04_00_0
    |   |   |
    |   |   +- net_p1p1_00_1b_21_88_69_dc
    |   |  
    |   +- pci_0000_04_00_1
    |       |
    |       +- net_p1p2_00_1b_21_88_69_dd

    2 使用virsh nodedev-dumxml pci_0000_04_00_0得到xml配置信息

    1
    [root@]# virsh nodedev-dumpxml pci_0000_04_00_0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <device>
    <name>pci_0000_04_00_0</name>
    <parent>pci_0000_00_07_0</parent>
    <driver>
       <name>e1000e</name>
    </driver>
    <capability type='pci'>
       <domain>0</domain>
       <bus>4</bus>
       <slot>0</slot>
       <function>0</function>
       <product id='0x105e'>82571EB Gigabit Ethernet Controller</product>
       <vendor id='0x8086'>Intel Corporation</vendor>
    </capability>
    </device>

    3 编辑虚拟机xml文件,加入pci设备信息

    1
    2
    3
    4
    5
    <hostdev mode='subsystem' type='pci' managed='yes'>
         <source>
           <address domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
         </source>
    </hostdev>

    Domain bus slot function信息从dumpxml出的xml文件获取,define虚拟机,然后开启虚拟机就可以,注意以为附件上去的是物理设备,需要在系统里面安装相应的驱动。


    方案四 SR-IVO技术


    SRIOV的原理    
    SR-IVO 是the single root I/O virtualization 的简写,是一个将PCIe共享给虚拟机使用的标准,目前用在网络设备上比较多,理论上也可以支持其他的PCI设备,SRIOV需要硬件的支持。

    clip_image012

    以下内容来自oracle网站,链接为   
    http://docs.oracle.com/cd/E38902_01/html/E38873/glbzi.html

    clip_image014

    物理功能 (Physical Function, PF)   
    用 于支持 SR-IOV 功能的 PCI 功能,如 SR-IOV 规范中定义。PF 包含 SR-IOV 功能结构,用于管理 SR-IOV 功能。PF 是全功能的 PCIe 功能,可以像其他任何 PCIe 设备一样进行发现、管理和处理。PF 拥有完全配置资源,可以用于配置或控制 PCIe 设备。    
    虚拟功能 (Virtual Function, VF)    
    与物理功能关联的一种功能。VF 是一种轻量级 PCIe 功能,可以与物理功能以及与同一物理功能关联的其他 VF 共享一个或多个物理资源。VF 仅允许拥有用于其自身行为的配置资源。    
    每 个 SR-IOV 设备都可有一个物理功能 (Physical Function, PF),并且每个 PF 最多可有 64,000 个与其关联的虚拟功能 (Virtual Function, VF)。PF 可以通过寄存器创建 VF,这些寄存器设计有专用于此目的的属性。    
    一 旦在 PF 中启用了 SR-IOV,就可以通过 PF 的总线、设备和功能编号(路由 ID)访问各个 VF 的 PCI 配置空间。每个 VF 都具有一个 PCI 内存空间,用于映射其寄存器集。VF 设备驱动程序对寄存器集进行操作以启用其功能,并且显示为实际存在的 PCI 设备。创建 VF 后,可以直接将其指定给 IO 来宾域或各个应用程序(如裸机平台上的 Oracle Solaris Zones)。此功能使得虚拟功能可以共享物理设备,并在没有 CPU 和虚拟机管理程序软件开销的情况下执行 I/O。    
    SR-IOV 的优点    
    SR-IOV 标准允许在 IO 来宾域之间高效共享 PCIe 设备。SR-IOV 设备可以具有数百个与某个物理功能 (Physical Function, PF) 关联的虚拟功能 (Virtual Function, VF)。VF 的创建可由 PF 通过设计用来开启 SR-IOV 功能的寄存器以动态方式进行控制。缺省情况下,SR-IOV 功能处于禁用状态,PF 充当传统 PCIe 设备。    
    具有 SR-IOV 功能的设备可以利用以下优点:    
    性能-从虚拟机环境直接访问硬件。    
    成本降低-节省的资本和运营开销包括:    
    节能    
    减少了适配器数量    
    简化了布线    
    减少了交换机端口    
    SRIOV的使用    
    启动SRIVO内核模块    
    modprobe igb    
    激活虚拟功能VF    
    modprobe igb max_vfs=7    
    千兆网卡最多支持8个vf0-7,千兆网卡目前支持比较好的是INTEL I350, 82576S虽然也支持SRIOV但是只支持虚拟机是linux的情况,windows系统不支持;    
    万兆网卡最多支持64个vg0-63,intel的新新一代万兆网卡都支持SRIOV x520 x540等;    
    如果需要重新设置vf 可以删除模块在重新加载    
    modprobe -r igb    
    将配置永久写入配置文件    
    echo "options igb max_vfs=7" >>/etc/modprobe.d/igb.conf    
    通过lspci命令可以看多主网卡和子网卡    

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    # lspci | grep 82576    
    0b:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)    
    0b:00.1 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)    
    0b:10.0 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)    
    0b:10.1 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)    
    0b:10.2 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)    
    0b:10.3 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)    
    0b:10.4 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)    
    0b:10.5 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)    
    0b:10.6 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)    
    0b:10.7 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)    
    0b:11.0 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)    
    0b:11.1 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)    
    0b:11.2 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)    
    0b:11.3 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)    
    0b:11.4 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)    
    0b:11.5 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)

     
    虚拟机可以听过pci网卡独占的方式使用子网卡;    

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    # virsh nodedev-list | grep 0b    
    pci_0000_0b_00_0    
    pci_0000_0b_00_1    
    pci_0000_0b_10_0    
    pci_0000_0b_10_1    
    pci_0000_0b_10_2    
    pci_0000_0b_10_3    
    pci_0000_0b_10_4    
    pci_0000_0b_10_5    
    pci_0000_0b_10_6    
    pci_0000_0b_11_7    
    pci_0000_0b_11_1    
    pci_0000_0b_11_2    
    pci_0000_0b_11_3    
    pci_0000_0b_11_4    
    pci_0000_0b_11_5

    虚拟机网卡xml文件    

    1
    2
    3
    4
    5
    <interface type='hostdev' managed='yes'>    
        <source>    
          <address type='pci' domain='0' bus='11' slot='16' function='0'/>    
        </source>    
      </interface>


    方案五 网卡多队列

    centos 7开始支持virtio网卡多队列,可以大大提高虚拟机网络性能,配置方法如下:

    虚拟机的xml网卡配置

    1
    2
    <interface type='network'>
         <source network='default'/>        <model type='virtio'/>         <driver name='vhost' queues='N'/>    </interface>

    N 1 - 8 最多支持8个队列

    在虚拟机上执行以下命令开启多队列网卡

    1
    #ethtool -L eth0 combined M


    M 1 - N M小于等于N


    KVM网络优化方案个人认为以硬件为主,硬件上万兆+SRIOV的方案会越来越普及,但是在线迁移的问题有待解决。

    展开全文
  • KVM_虚拟化技术

    2019-07-05 10:14:52
    一:什么是 KVM KVM 是指基于 Linux 内核的虚拟机(Kernel-based Virtual Machine)。 2006 年 10 月,由以色列的 Qumranet 组织开发的一种新的“虚拟机”实现方案。 2007 年 2 月发布的 Linux ...

    一:什么是 KVM

    KVM 是指基于 Linux 内核的虚拟机(Kernel-based Virtual Machine)。 2006 年 10 月,由以色列的 Qumranet 组织开发的一种新的“虚拟机”实现方案。 2007 年 2 月发布的 Linux 2.6.20 内核第一次包含了 KVM 。增加 KVM 到 Linux 内核是 Linux 发展的一个重要里程碑,这也是第一个整合到 Linux 主线内核的虚拟化技术。

    KVM 在标准的 Linux 内核中增加了虚拟技术,从而我们可以通过优化的内核来使用虚拟技术。在 KVM 模型中,每一个虚拟机都是一个由 Linux 调度程序管理的标准进程,你可以在用户空间启动客户机操作系统。一个普通的 Linux 进程有两种运行模式:内核和用户。 KVM 增加了第三种模式:客户模式(有自己的内核和用户模式)。

    一个典型的 KVM 安装包括以下部件:

    • 一个管理虚拟硬件的设备驱动,这个驱动通过一个字符设备 /dev/kvm 导出它的功能。通过 /dev/kvm 每一个客户机拥有其自身的地址空间,这个地址空间与内核的地址空间相分离或与任何一个正运行着的客户机相分离。
    • 一个模拟硬件的用户空间部件,它是一个稍微改动过的 QEMU 进程。从客户机操作系统执行 I/O 会拥有 QEMU。QEMU 是一个平台虚拟化方案,它允许整个 PC 环境(包括磁盘、显示卡(图形卡)、网络设备)的虚拟化。任何客户机操作系统所发出的 I/O 请求都被拦截,并被路由到用户模式用以被 QEMU 过程模拟仿真。

    二: 安装 KVM

    2.1 系统要求

    KVM 需要有 CPU 的支持 (Intel VT 或 AMD SVM),在安装 KVM 之前检查一下 CPU 是否提供了虚拟技术的支持

    • 基于Intel处理器的系统,运行grep vmx /proc/cpuinfo查找 CPU flags 是否包括vmx关键词
    • 基于AMD处理器的系统,运行grep svm /proc/cpuinfo查找 CPU flags 是否包括svm关键词
    • 检查 BIOS,确保 BIOS 里开启VT选项

    注:

    • 一些厂商禁止了机器 BIOS 中的 VT 选项 , 这种方式下 VT 不能被重新打开
    • /proc/cpuinfo 仅从 Linux 2.6.15(Intel) 和 Linux 2.6.16(AMD) 开始显示虚拟化方面的信息。请使用 uname -r 命令查询您的内核版本。如有疑问,请联系硬件厂商
    egrep "(vmx|svm)" /proc/cpuinfo
    flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm dts tpr_shadow vnmi flexpriority ept vpid
    flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm dts tpr_shadow vnmi flexpriority ept vpid
    flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm dts tpr_shadow vnmi flexpriority ept vpid
    flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm dts tpr_shadow vnmi flexpriority ept vpid
    flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm dts tpr_shadow vnmi flexpriority ept vpid
    flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm dts tpr_shadow vnmi flexpriority ept vpid
    flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm dts tpr_shadow vnmi flexpriority ept vpid
    flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm dts tpr_shadow vnmi flexpriority ept vpid

     

    2.2 安装 kvm 软件

    安装 KVM 模块、管理工具和 libvirt (一个创建虚拟机的工具)

    yum install -y qemu-kvm libvirt virt-install virt-manager bridge-utils
    /etc/init.d/libvirtd start
    chkconfig libvirtd on
    

    2.2.1 确保正确加载 KVM 模块

    lsmod  | grep kvm
    kvm_intel              54285  0 
    kvm                   333172  1 kvm_intel
    

    2.2.2 检查 kvm 是否正确安装

    virsh -c qemu:///system list
     Id    Name                           State
    ----------------------------------------------------
    
    

    如果这里是错误信息,说明安装出现问题

    2.3 配置网络-网桥模式

    kvm 上网有两种配置,一种是 default,它支持主机和虚拟机的互访,同时也支持虚拟机访问互联网,但不支持外界访问虚拟机,另外一种是 bridge 方式,可以使虚拟机成为网络中具有独立 IP 的主机。

    2.3.1 默认网络 virbro

    默认的网络连接是 virbr0,它的配置文件在 /var/lib/libvirt/network 目录下,默认配置为

    cat /var/lib/libvirt/network/default.xml 
    
      default
      77094b31-b7eb-46ca-930e-e0be9715a5ce
    
    

    2.3.2 桥接网络

    配置桥接网卡,配置如下

    more /etc/sysconfig/network-scripts/ifcfg-\*
    :::::::::::::: 新建文件
    /etc/sysconfig/network-scripts/ifcfg-br0
    ::::::::::::::
    DEVICE=br0
    ONBOOT=yes
    TYPE=Bridge
    BOOTPROTO=static
    IPADDR=192.168.39.20
    NETMASK=255.255.255.0
    GATEWAY=192.168.39.1
    DNS1=8.8.8.8
    :::::::::::::: 物理网卡
    /etc/sysconfig/network-scripts/ifcfg-em1
    ::::::::::::::
    DEVICE=em1
    TYPE=Ethernet
    ONBOOT=yes
    BOOTPROTO=static
    BRIDGE=br0
    ::::::::::::::

    2.4 配置网络-NAT模式

    NATM模式下不用配置为网卡

    2.5配置 VNC

    (1) 修改 VNC 服务端的配置文件

    [root@LINUX ~]# vim /etc/libvirt/qemu.conf  
    vnc_listen = "0.0.0.0"   第十二行,把 vnc_listen 前面的#号去掉。
    

    (2) 重启 libvirtd 和 messagebus 服务

    [root@LINUX ~]# /etc/init.d/libvirtd restart
    Stopping libvirtd daemon:                                  [  OK  ]
    Starting libvirtd daemon: libvirtd: initialization failed  [FAILED]
    解决办法:
    [root@LINUX ~]# echo "export LC_ALL=en_US.UTF-8"  >>  /etc/profile
    [root@LINUX ~]# source /etc/profile
    [root@LINUX ~]# /etc/init.d/libvirtd restart
    [root@LINUX ~]# /etc/init.d/messagebus restart
    

    三:创建虚拟机

    virt-manager 是基于 libvirt 的图像化虚拟机管理软件,操作类似 vmware,不做详细介绍。

    • (1)Virt-manager 图形化模式安装
    • (2)Virt-install 命令模式安装【本文使用此方式】
    • (3)Virsh XML 模板安装

    3.1 上传 ISO

    [root@LINUX ~]# mkdir -p /home/iso
    [root@LINUX ~]# mkdir -p /home/kvm
    将 iso 拷贝到 /home/iso 目录
    

    3.2 创建 kvm 虚拟机的磁盘文件

    本例创建的磁盘文件为 10G,实际使用中应注意下 /home 的空间,可以设置为 100G

    [root@LINUX ~]# cd /home/kvm/
    [root@LINUX ~]# qemu-img create -f qcow2 -o preallocation=metadata kvm_mode.img 10G        
    

    3.3 启动虚拟机

    3.3.1 启动虚拟机参数说明

    virt-install命令有许多选项,这些选项大体可分为下面几大类,同时对每类中的常用选项也做出简单说明。

    一般选项:指定虚拟机的名称、内存大小、VCPU个数及特性等;

    • -n NAME, --name=NAME:虚拟机名称,需全局惟一;
    • -r MEMORY, --ram=MEMORY:虚拟机内在大小,单位为MB;
    • --vcpus=VCPUS[,maxvcpus=MAX][,sockets=#][,cores=#][,threads=#]:VCPU个数及相关配置;
    • --cpu=CPU:CPU模式及特性,如coreduo等;可以使用qemu-kvm -cpu ?来获取支持的CPU模式;

    安装方法:指定安装方法、GuestOS类型等;

    • -c CDROM, --cdrom=CDROM:光盘安装介质;
    • -l LOCATION, --location=LOCATION:安装源URL,支持FTP、HTTP及NFS等,如ftp://172.16.0.1/pub;
    • --pxe:基于PXE完成安装;
    • --livecd: 把光盘当作LiveCD;
    • --os-type=DISTRO_TYPE:操作系统类型,如linux、unix或windows等;
    • --os-variant=DISTRO_VARIANT:某类型操作系统的变体,如rhel5、fedora8等;
    • -x EXTRA, --extra-args=EXTRA:根据--location指定的方式安装GuestOS时,用于传递给内核的额外选项,例如指定kickstart文件的位置,--extra-args "ks=http://172.16.0.1/class.cfg"
    • --boot=BOOTOPTS:指定安装过程完成后的配置选项,如指定引导设备次序、使用指定的而非安装的kernel/initrd来引导系统启动等 ;例如:
    • --boot cdrom,hd,network:指定引导次序;
    • --boot kernel=KERNEL,initrd=INITRD,kernel_args=”console=/dev/ttyS0”:指定启动系统的内核及initrd文件;

    存储配置:指定存储类型、位置及属性等;

    • --disk=DISKOPTS:指定存储设备及其属性;格式为--disk /some/storage/path,opt1=val1,opt2=val2等;常用的选项有:
      • device:设备类型,如cdrom、disk或floppy等,默认为disk;
      • bus:磁盘总结类型,其值可以为ide、scsi、usb、virtio或xen;
      • perms:访问权限,如rw、ro或sh(共享的可读写),默认为rw;
      • size:新建磁盘映像的大小,单位为GB;
      • cache:缓存模型,其值有none、writethrouth(缓存读)及writeback(缓存读写);
      • format:磁盘映像格式,如raw、qcow2、vmdk等;
      • sparse:磁盘映像使用稀疏格式,即不立即分配指定大小的空间;
    • --nodisks:不使用本地磁盘,在LiveCD模式中常用;

    网络配置:指定网络接口的网络类型及接口属性如MAC地址、驱动模式等;

    • -w NETWORK, --network=NETWORK,opt1=val1,opt2=val2:将虚拟机连入宿主机的网络中,其中NETWORK可以为:
    • bridge=BRIDGE:连接至名为“BRIDEG”的桥设备;
    • network=NAME:连接至名为“NAME”的网络;
    • 其它常用的选项还有:
      • model:GuestOS中看到的网络设备型号,如e1000、rtl8139或virtio等;
      • mac:固定的MAC地址;省略此选项时将使用随机地址,但无论何种方式,对于KVM来说,其前三段必须为52:54:00;
    • --nonetworks:虚拟机不使用网络功能;

    图形配置:定义虚拟机显示功能相关的配置,如VNC相关配置;

    • --graphics TYPE,opt1=val1,opt2=val2:指定图形显示相关的配置,此选项不会配置任何显示硬件(如显卡),而是仅指定虚拟机启动后对其进行访问的接口;
      • TYPE:指定显示类型,可以为vnc、sdl、spice或none等,默认为vnc;
      • port:TYPE为vnc或spice时其监听的端口;
      • listen:TYPE为vnc或spice时所监听的IP地址,默认为127.0.0.1,可以通过修改/etc/libvirt/qemu.conf定义新的默认值;
      • password:TYPE为vnc或spice时,为远程访问监听的服务进指定认证密码;
    • --noautoconsole:禁止自动连接至虚拟机的控制台;

    设备选项:指定文本控制台、声音设备、串行接口、并行接口、显示接口等;

    • --serial=CHAROPTS:附加一个串行设备至当前虚拟机,根据设备类型的不同,可以使用不同的选项,格式为“--serial type,opt1=val1,opt2=val2,...”,例如:
    • --serial pty:创建伪终端;
    • --serial dev,path=HOSTPATH:附加主机设备至此虚拟机;
    • --video=VIDEO:指定显卡设备模型,可用取值为cirrus、vga、qxl或vmvga;

    3.3.2 bridge 网络模式启动虚拟机

    有独立 IP 时使用这种方式

    [root@LINUX ~]# chmod -R 777 /etc/libvirt
    [root@LINUX ~]# chmod -R 777 /home/kvm
    [root@LINUX ~]#virt-install --name=kvm_test --ram 4096 --vcpus=4 \
           -f /home/kvm/kvm_mode.img --cdrom /home/iso/sucunOs_anydisk.iso \
           --graphics vnc,listen=0.0.0.0,port=7788, --network bridge=br0 \
           --force --autostart
    

    3.3.3 NAT 模式启动虚拟机

    没有独立 IP 时使用这种方式

    [root@LINUX ~]# chmod -R 777 /etc/libvirt
    [root@LINUX ~]# chmod -R 777 /home/kvm
    [root@LINUX ~]#virt-install --name=kvm_test --ram 4096 --vcpus=4 \
           -f /home/kvm/kvm_mode.img --cdrom /home/iso/sucunOs_anydisk.iso \
           --graphics vnc,listen=0.0.0.0,port=7788 \
           --force --autostart
    

    3.4 连接虚拟机

    • (1) 网上下载 VNC 客户端
    • (2) 用 VNC 客户端连接并安装虚拟机的操作系统(VNC 连上之后,跟安装 linux Centos 6.5 系统一样,重新装一次)
    点击 continue 是如果出现闪退的情况,请修改 Option->Expert->ColorLevel 的值为 full
    

    四:管理 KVM

    4.1 管理 kvm 上的虚拟机

    • virsh list #显示本地活动虚拟机
    • virsh list --all #显示本地所有的虚拟机(活动的 + 不活动的)
    • virsh start x #启动名字为 x 的非活动虚拟机
    • virsh shutdown x #正常关闭虚拟机
    • virsh dominfo x #显示虚拟机的基本信息
    • virsh autostart x #将 x 虚拟机设置为自动启动
    展开全文
  • KVM网络虚拟化(二)

    千次阅读 2017-03-03 14:33:47
    KVM网络虚拟化(二) KVM网卡虚拟化除了全虚拟化、Virtio外,还可以利用网卡PCI透传技术,SR-IOV技术,提供更高性能的虚拟化网卡。

    KVM网络虚拟化(二)

    KVM网卡虚拟化除了全虚拟化、Virtio外,还可以利用网卡PCI透传技术,SR-IOV技术,提供更高性能的虚拟化网卡。

    PCI透传

    前面介绍的虚拟化技术本质上都是共享设备,带来的代价就是性能的降低,在追求性能的场景中并不适用。设备透传技术提供了虚拟机独占设备的方法,这在网卡PCI Passthrough可以将物理网卡直接交给虚拟机使用。虚拟机独占网卡,使用性能接近物理网卡。
    PCI-Passthrough

    设备透传需要硬件支持,Intel 和 AMD 都在它们的新一代处理器架构中提供对设备透传的支持(以及辅助管理程序的新指令)。Intel 将这种支持称为 Virtualization Technology for Directed I/O (VT-d),而 AMD 称之为 I/O Memory Management Unit (IOMMU)。不管是哪种情况,新的 CPU 都提供将 PCI 物理地址映射到客户虚拟系统的方法。

    因为PCI透传虚机要独占网卡,所以对宿主的网卡数也是有要求的。同时设备透传在虚机热迁移时还会遇到问题。

    SR-IOV

    SR-IOV全称Single-Root I/O Virtualization,是一个将PCI-E设备共享给虚拟机的使用方案,多用在网络设备。SR-IOV从硬件上绕过系统和虚拟化层,使每个虚机能有单独的内存地址、中断、DMA流。

    通过 SR-IOV,一个 PCIe 设备不仅可以导出多个 PCI 物理功能,还可以导出共享该 I/O 设备上的资源的一组虚拟功能。。在这个模型中,不需要任何透传,因为虚拟化在终端设备上发生,从而允许管理程序简单地将虚拟功能映射到 VM 上以实现本机设备性能和隔离安全。

    SR-IOV
    SR-IOV有两个功能模型:

    Physical Functions(PFs):拥有权功能PCI-E功能,拥有配置管理SR-IOV
    Virtual Function (VFs):轻量PCI-E功能,包含数据传输必要的资源

    参考

    https://www.ibm.com/developerworks/cn/linux/l-pci-passthrough/
    《深度实践KVM》

    展开全文
  • KVM 是 Kernel-based Virtual Machine 的简称,KVM 要求 CPU 支持硬件虚拟化技术(如 intel VT 或 AMD-V),是 Linux 下的全虚拟化解决方案。KVM 由处于内核态的 KVM 模块和用户态的 QEMU 两部分构成。内核模块实现...

    KVM 是 Kernel-based Virtual Machine 的简称,KVM 要求 CPU 支持硬件虚拟化技术(如 intel VT 或 AMD-V),是 Linux 下的全虚拟化解决方案。KVM 由处于内核态的 KVM 模块和用户态的 QEMU 两部分构成。内核模块实现了 CPU 和内存虚拟化等决定关键性能和核心安全的功能并向用户空间提供了使用这些功能的接口,QEMU 利用 KVM 模块提供的接口来实现设备模拟、 IO 虚拟化和网络虚拟化等。单个虚拟机是宿主机上的一个普通 QEMU 进程,虚拟机中的 CPU 核(vCPU)是 QEMU 的一个线程,VM 的物理地址空间是 QEMU 的虚拟地址空间(图 1)。

    vCPU 线程经过 KVM 模块提供的系统调用进入到宿主机内核态,在内核态切换到 CPU 的非根模式,即 guest 模式,此时虚拟机内的 CPU 获得宿主机 CPU 资源,得以执行。在 guest 模式中,遇到敏感指令无法直接执行,或者有特定的内部异常和外部中断产生,vCPU 会退出到根模式由 KVM 内核或 QEMU 来模拟执行(图 2)。

    KVM 虚拟化技术是当前云计算中计算虚拟化的主流技术,是云计算的核心底层能力,使用 KVM 把多台物理机虚拟化后,组成一个大的虚拟资源池,方便用户从资源池中按需分配计算能力,提升资源的使用效率,同时保证多用户资源之间的隔离性、安全性。


    肖光荣,腾讯云开源团队负责人,操作系统专家。肖光荣在 Linux 内核、KVM 社区工作近十年,是 Ftrace, MM, Networking 等子系统的活跃贡献者。近几年主要工作在虚拟化领域,是 KVM 的核心开发者,Virtual NVDIMM 子系统的维护者。肖光荣向社区提交了大量 Patch,在华人内核贡献者中排名 Top 15,在内核和 KVM 社区拥有巨大影响力。

    展开全文
  • KVM虚拟化技术

    千次阅读 2019-05-21 21:45:05
    KVM虚拟化 什么是虚拟化虚拟化,通过模拟计算机的硬件,来实现在同一台计算机上同时运行多个不同的操作系统的技术。 为什么要用虚拟化? 充分利用资源,软件运行环境的隔离,只有虚拟化才行实现。 场景1:同一...
  • KVM虚拟化技术实践

    万次阅读 2017-02-01 16:06:45
    今天分享的文章是关于云计算中的kvm虚拟化技术),通过本文你可以知道的是kvm是干什么的,如何使用kvm,如何通过java操作xml从而生成生成虚拟机。KVM 全称是 基于内核的虚拟机(Kernel-based Virtual Machine),...
  • KVM 虚拟化架构和实现原理

    万次阅读 2016-08-15 08:42:30
    KVM虚拟化实现KVM虚拟化架构KVM是嵌入在Linux操作系统标准内核中的一个虚拟化模块,它能够将一个Linux标准内核转换成为一个VMM,嵌有KVM模块的Linux标准内核可以支持通过kvm tools来进行加载的GuestOS。...
  • KVM网络虚拟化(一)

    千次阅读 2017-03-01 16:39:20
    KVM与QEMU网络虚拟化属于IO虚拟化
  • KVM 网络虚拟化基础

    2017-05-05 09:41:47
    网络虚拟化虚拟化技术中最复杂的部分,学习难度最大。 但因为网络是虚拟化中非常重要的资源,所以再硬的骨头也必须要把它啃下来。 为了让大家对虚拟化网络的复杂程度有一个直观的认识,请看下图 ...
  • 网络虚拟化虚拟化技术中最复杂的部分,学习难度最大。 但因为网络是虚拟化中非常重要的资源,所以再硬的骨头也必须要把它啃下来。 为了让大家对虚拟化网络的复杂程度有一个直观的认识,请看下图 这...
  • KVM虚拟化

    万次阅读 多人点赞 2019-06-11 18:33:27
    kvm虚拟化1. 虚拟化介绍2. kvm介绍3. kvm部署3.1 kvm安装3.2 kvm web管理界面安装 1. 虚拟化介绍 虚拟化是云计算的基础。简单的说,虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共享物理机的 CPU、...
  • 虚拟化技术KVM

    2020-03-22 19:41:22
    虚拟化技术KVM
  • KVM 虚拟化技术(一)

    千次阅读 2018-06-22 13:36:52
    在计算机技术中,虚拟化技术)或虚拟技术(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分区、组合为一个或多个...
  • KVM虚拟化之四种网络模型

    千次阅读 2019-03-03 22:51:35
    KVM虚拟化之四种网络模型 文章目录KVM虚拟化之四种网络模型1. 四种网络模型简要说明:1.1 隔离模型1.2 路由模型1.3 NAT模型1.4 桥接模型2. 前期准备2.1 环境说明2.2 安装qemu-kvm及解决依赖关系3. 隔离模型3.1 隔离...
  • kvm虚拟化之IO虚拟化

    千次阅读 2019-12-02 10:50:14
    (文章来自作者维护的社区微信公众号【虚拟化云计算】) (目前有两个微信群《kvm虚拟化》和《openstack》,扫描二维码点击“云-交流”,进群交流提问) QEMU-KVM作为一个VMM提供了全虚拟化环境,guest不经过...
  • 虚拟化技术KVM实战

    千次阅读 2017-05-03 18:18:55
    虚拟化技术KVM实战 一、走进云计算 云计算:云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问, 进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件,服务),这些...
  • 使用虚拟化集群的目标是克服单机虚拟化的局限性,利用技术手段提高虚拟机可用性,最终达到业务不中断或者减少中断时间,确保业务数据更安全的目标。 1. 虚拟化集群介绍 1)什么是虚拟化集群 虚拟机集群最显著的特征...
  • Xen,VMware ESXi,Hyper-V和KVM虚拟化技术的原理解析 Xen,VMware ESXi,Hyper-V和KVM虚拟化技术的原理解析 2018年04月03日 13:51:55 阅读数:936 XEN 与 VMware ESXi,Hyper-V 以及 ...
  • 搭建单机KVM虚拟化

    2019-10-29 19:32:44
    在第二章中,您了解了KVM内部。现在,在本章中,您将...从技术上讲,KVM是用于具有虚拟化扩展功能的x86架构硬件的一组内核模块。加载后,它将Linux服务器转换为虚拟化服务器(管理程序)。可加载模块是kvm.ko,它提...
  • KVM完全虚拟化

    2019-05-02 12:42:14
    红帽企业版6.0 KVM虚拟机实战攻略 在2010年4月发布的RHEL 6.0 Beta版中 ,去掉了Xen,这也许是第一个不包含Xen Hypervisor的知名Linux发行版,之前有报道过Red Hat有可能会在RHEL 6.0中用KVM完全代替Xen,现在看来...
1 2 3 4 5 ... 20
收藏数 11,498
精华内容 4,599
关键字:

kvm 网络虚拟化技术