kvm备忘(1)

背景

KVM 是基于虚拟化扩展(Intel VT 或者 AMD-V)的 X86 硬件的开源的 Linux 原生的全虚拟化解决方案。KVM 中,虚拟机被实现为常规的 Linux 进程,由标准 Linux 调度程序进行调度。
kvm基于内核空间,相当于内核空间的一个模块,但由于是存在于内核空间的,所以用户无法调用它,所以需要qemu作为用户空间工具。

CPU 对虚拟化的支持以及性能

kvm基于X86的硬件,最基本的一个需求就是需要cpu 支持vmx,目前市面上的vmware 也好,xen 也好,都是通过不同的程序调用内核空间的kvm 模块,所以均需要cpu 对虚拟化的支持,查看cpu是否支持虚拟化可以用以下方法:

grep -E -o 'vmx|svm' /proc/cpuinfo #有些时候是机器没打开cpu虚拟化的开关导致的,可以在bios里改

虚拟化以及内存

内存对于kvm 来说主要还是要看cpu的架构是numa还是smp,cpu 架构可以参考之后的以及记录。
kvm本身其实就已经对内存进行过优化以及支持,虚拟机上的内存地址其实是物理地址经过映射后的地址空间,如何映射就是通过cpu 上的ept 进行的,可以看下cpu是否支持ept这项技术:

cat  /proc/cpuinfo | grep ept

虚拟硬盘

kvm 一般最大的瓶颈就在磁盘IO 上了。
目前常见的虚拟硬盘格式主要是qcow2 以及raw ,当然也有虚拟化厂家自己定义的一些文件格式,比如vmware的vmdk 这种。这里主要记录的还是qcow2 和raw 吧。毕竟用的多。

  • raw:
    raw的优势(能找到的相关资料太少,不知道是不是理解有误):
    1.简单,并能够导出为其他虚拟机的虚拟硬盘格式
    2.根据实际使用量来占用空间使用量,而非原先设定的最大值(比如设定最高20G,而实际只使用3G)。——需要宿主分区支持hole(比如ext2 ext3 ntfs等)#所以经常ll出来的比du-sh实际的要大
    3.以后能够改变空间最大值(把最高值20G提高到200G,qcow2也可以,不过要转为raw) ps: raw经常作为中间格式,其他虚拟化文件转格式可以通过先转到raw后再进行转换。
    4.能够直接被宿主机挂载,不用开虚拟机即可在宿主和虚拟机间进行数据传输(注意,此时虚拟机不要开)

  • qcow2:
    qcow2的优势:
    1.更小的虚拟硬盘空间(尤其是宿主分区不支持hole的情况下)
    2.支持快照机制。

性能上其实raw 是超过qcow2的,但是因为快照这个优势,导致了实际生产环境中,raw 很少使用。

虚拟化以及网络

网络对于kvm的支持也比较全面,基本上linux 都自带virtio半虚拟化驱动,所以性能上不会有啥差别。windows的话接触比较少,遇到的都是需要自己去装virtio驱动的。不然网络会很卡。

创建kvm

yum install qemu-kvm qemu-img #至少要有这2个包
yum install virt-manager libvirt libvirt-python python-virtinst libvirt-client bridge-utils #其他一些管理包,比如libvirt 之类的,以及网桥包
##debian或者ubuntu 下
apt-get install kvm qemu
apt-get install virtinst python-libvirt virt-viewer virt-manager
apt-get install bridge-utils
  • 创建vdisk
qemu-img create -f qcow2 vdisk 5G #创建5G且格式为qcow2的硬盘
root:~# qemu-img info vdisk #查看vdisk 信息
image: vdisk
file format: qcow2
virtual size: 5.0G (5368709120 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false
  • 创建kvm
    1.通过qemu创建:
qemu-system-x86_64 -m 2048 -enable-kvm fvdisk -cdrom ./Fedora-Live-Desktop-x86_64-20-1.iso #最简单的创建方式,比较适合用于制作镜像

2.libvirt创建
libvirt 可以通过xml 配置文件的方式进行创建,包括openstack 等比较出名的虚拟化解决方案也比较喜欢用这种方式创建虚拟机,关键在于好管理。


    centos  
    1024   
    1024  
    2   
    
        hvm
         
             
    
    
        
        
        
    
    
    destroy
    restart
    destroy
    
        /usr/bin/kvm
        
             
                    
            
        
        
                    
            
        
               
                  
        
        
        
        
    

写好配置文件后,使用以下命令创建:

virsh define instance_01.xml #根据配置文件创建虚拟机
virsh list --all #查看所有kvm ,无论是否关机
virsh start instance_01 #开机

网桥相关配置:
kvm在很多时候都需要使用网桥这种方式配置,在接口多的情况下对接口做个bonding 是个不错的选择:

auto br100
iface br100 inet static
address 10.1.1.215
netmask 255.255.255.0
gateway 10.1.1.254
dns-nameservers 10.1.1.2
bridge_ports bond0
bridge_hello 2
bridge_maxage 12
bridge_fd 0
bridge_stp off
######
auto bond0
iface bond0 inet static
address 10.1.1.215
netmask 255.255.255.0
gateway 10.1.1.254
post-up ifenslave bond0 eth0 eth1
pre-down ifenslave -d bond0 eth0 eth1

通过brctl show 可以看到网桥相关信息:

root# brctl show
bridge name bridge id       STP enabled interfaces
br100       8000.00221999a513   no      bond0
                            vnet0
                            vnet1
                            vnet2
                            vnet3
                            vnet4
virbr0      8000.000000000000   yes     

先后顺序就是bonding--》在接口上做bridage--》在bridge做vnet
基本上按照上述可以起好对应的kvm 虚拟机,之后会再对管理方面做一些备忘录。

你可能感兴趣的:(kvm备忘(1))