kvm备忘(1)

2017-02-23  本文已影响0人  钟大發

背景

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 是超过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
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
qemu-system-x86_64 -m 2048 -enable-kvm fvdisk -cdrom ./Fedora-Live-Desktop-x86_64-20-1.iso #最简单的创建方式,比较适合用于制作镜像

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

<domain type="kvm">
    <name>centos</name>  <!--虚拟机名称-->
    <memory unit="MiB">1024</memory>   <!--最大内存,单位k-->
    <currentMemory unit="MiB">1024</currentMemory>  <!--可用内存,单位k-->
    <vcpu>2</vcpu>   <!--//虚拟cpu个数-->
    <os>
        <type arch="x86_64" machine="pc">hvm</type>
        <boot dev="hd" /> <!-- 硬盘启动 -->
        <boot dev="cdrom" />     <!--//光盘启动-->
    </os>
    <features>
        <acpi />
        <apic />
        <pae />
    </features>
    <clock offset="localtime" />
    <on_poweroff>destroy</on_poweroff>
    <on_reboot>restart</on_reboot>
    <on_crash>destroy</on_crash>
    <devices>
        <emulator>/usr/bin/kvm</emulator>
        <disk type="file" device="disk">
            <driver name="qemu" type="qcow2" cache="none" /> <!--cache中的none表示直接从硬盘写到disk镜像文件,性能差但是不会丢数据,write-back 模式正好相反-->
            <source file="/var/lib/libvirt/images/test.qcow2" />        <!--目的镜像路径-->
            <target dev="hda" bus="virtio" />
        </disk>
        <disk type="file" device="cdrom">
            <source file="/var/lib/libvirt/images/ubuntu.iso" />        <!--光盘镜像路径 -->
            <target dev="hdb" bus="virtio" />
        </disk>
        <interface type="bridge">       <!--虚拟机网络连接方式-->
            <source bridge="br0" />      <!--当前主机网桥的名称-->
        </interface>
        <input type="mouse" bus="ps2" />
        <!--vnc方式登录,端口号自动分配,自动加1,可以通过virsh vncdisplay来查询-->
        <graphics type="vnc" port="-1" autoport="yes" listen="0.0.0.0" keymap="en-us" />
    </devices>
</domain>

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

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 虚拟机,之后会再对管理方面做一些备忘录。

上一篇 下一篇

猜你喜欢

热点阅读