虚拟化技术比较

1、VPS openvz 平台和kvm、xen、vmware的区别

openvz:

是Paralles公司的虚拟化商业产品Virtuozzo的开源版本,该公司前身为SWsoft

缺点:

1、不能安装windows操作系统

2、不是完全的虚拟化、每个vps账户共用母机内核,不能单独修改内核,

优点:

不能修改内核,共用内核的特性使得openvz的效率最高,超过kvm、xen、vmware等平台,在不超售的情况下,openvz是最快速效率最高的vps平台

kvm、xen、vmware:

kvm 为Red Hat 所采用的主要技术

xen 为citrix 公司的的主要虚拟化技术

这几个vps可以归为一类,他们在虚级化母机时,是完全的虚级化,每个vps之间不共用母机内核,各自都是独立的,几乎所有的操作系统都可以安装到这些被虚拟化出来的vps上,

完全的虚级化使得这些平台的vps效率要低于openvz,但由于完全虚拟化,各vps之间没有干扰,而openvz取决于是否超售。

2、虚拟化之kvm

rhel 6.0 版本中,已经去掉了xen

在kvm模型中,每一个虚拟机都是由一个linux调度程序管理的标准进程,你可以在用户空间启动客户机操作系统,一个普通的linux进程有两种运行模式:内核和用户,kvm增加了第三种模式:客户模式(有自己的内核和用户模式)

准确来说,kvm仅仅是linux内核的一个模块,qemu是一个强大的虚拟化软件,kvm使用了qemu的基于x86的部分,并稍加改造,形成可控制kvm内核模块的用户空间工具QEMU-KVM,

尽管QEMU-KVM工具可以创造和管理kvm虚拟机,但由于QEMU工具效率不高,不易于使用,所以redhat为kvm开发了更多地工具:比如libvirt,virsh,virt-manager

libvirt不仅提供了api还自带一套基于文本的管理虚拟机的命令-virsh,可以通过使用virsh命令来使用libvirt的全部功能,但最终用户更渴望的是图形界面,这就是virt-manager,virt-manager就是利用libvirt的api实现的

2.1 install kvm

2.1.1 确认cpu是否支持虚级化技术

egrep '(vmx|svm)' --color=always /proc/cpuinfo

2.1.2 安装

yum install kvm virt-viewer virt-manager libvirt libvirt-python python-virtinst

2.1.3 确认正确加载kvm模块

modinfo kvm

2.1.4 加载kvm内核

modprobe kvm

2.1.5 查看内核是否开启

modprobe -ls |grep kvm

2.1.6 Important Configuration File

/etc/libvirt/ - Main configuration directory.

/etc/libvirt/qemu/ - Virtual machine configuration directory. All xml files regarding VMs are stored here. You can edit them manually or via virt-manager.

/etc/libvirt/qemu/networks/ - Networking for your KVM including default NAT. NAT is only recommended for small setup or desktops. I strongly suggest you use bridged based networking for performance.

/etc/libvirt/qemu/networks/default.xml - The default NAT configuration used by NAT device virbr0.

/var/log/libvirt/ - The default log file directory. All VM specific logs files are stored here.

/etc/libvirt/libvirtd.conf - Master libvirtd configuration file.

/etc/libvirt/qemu.conf - Master configuration file for the QEMU driver.

2.2 使用libvirt的xml配置文件创建虚拟机

kvm支持的镜像很多,常用的是原始镜像(*.img),还有支持动态大小扩张的qocw2格式(首选)

更优的选择是系统盘如C盘用img格式,数据盘用qcow2格式以减少服务器磁盘闲置空间

2.2.1 生成centos.xml文件(可用以下方式生成该文件,也可去网上拷贝范例模板)

先用centos_6.5_x86_64-minimal.iso生成xml文件(使用vnc连接5905端口进行系统安装),xml文件存放位置:/etc/libvirt/qemu/

#!/bin/sh

read -p "please inter your message:" pw

virt-install --name centos_$pw --ram 512 --disk /home/centos_$pw,size=20 --network bridge=br0 \

--vcpus=1 --os-type=linux --cdrom=/data0/xcloud/iso/CentOS_6.5_x86_64-minimal.iso --graphics vnc,listen=0.0.0.0,port=5905

修改centos.xml

<domain type='kvm'>

  <name>centos_6.5</name>                    <--- 虚拟机名称

  <memory unit='KiB'>524288</memory>

  <currentMemory unit='KiB'>524288</currentMemory>

  <vcpu placement='static'>1</vcpu>

  <os>

    <type arch='x86_64' machine='rhel6.5.0'>hvm</type>

    <boot dev='cdrom'/>             <--- 光盘启动

  </os>

  <features>

    <acpi/>

    <apic/>

    <pae/>

  </features>

  <clock offset='utc'/>

  <on_poweroff>destroy</on_poweroff>

  <on_reboot>restart</on_reboot>

  <on_crash>restart</on_crash>

  <devices>

    <emulator>/usr/libexec/qemu-kvm</emulator>

    <disk type='file' device='disk'>

      <driver name='qemu' type='qcow2'/>

      <source file='/home/centos_6.5.qcow2'/>    <--- 目的镜像位置

      <target dev='hda' bus='ide'/>

    </disk>

    <disk type='file' device='cdrom'>

      <source file='/data0/xcloud/iso/CentOS_6.5_x86_64-minimal.iso'/> <--- 光盘镜像位置

      <target dev='hdc' bus='ide'/>

  </disk>

      <controller type='usb' index='0'>

        <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>

      </controller>

      <controller type='ide' index='0'>

        <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>

      </controller>

      <interface type='bridge'>

        <mac address='52:54:00:a7:40:f7'/>

        <source bridge='br0'/>

        <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>

      </interface>

      <serial type='pty'>

        <target port='0'/>

      </serial>

      <console type='pty'>

        <target type='serial' port='0'/>

      </console>

      <input type='mouse' bus='ps2'/>

      <graphics type='vnc' port='5905' autoport='no' listen='0.0.0.0'>

        <listen type='address' address='0.0.0.0'/>

      </graphics>

      <video>

        <model type='cirrus' vram='9216' heads='1'/>

        <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>

      </video>

      <memballoon model='virtio'>

        <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>

      </memballoon>

    </devices>

  </domain>

2.2.2 制作虚拟机镜像

创建qcow2镜像,但是其实际占有磁盘大小仅为193K左右,而虚拟机内部显示磁盘大小为10G,也就是磁盘空间使用时才分配,即所谓动态扩张。

qemu-img create -f qcow2 centos_6.5.qcow2 10G  

2.2.3 创建虚拟机

virsh define centos.xml

2.2.4 启动虚拟机

virsh start centos_6.5

2.2.5 使用vnc登陆虚拟机完成系统的安装

2.2.6 修改从硬盘启动

<os>

    <type arch='x86_64' machine='rhel6.5.0'>hvm</type>

    <boot dev='hd'/>             <--- 硬盘启动

</os>

2.2.7 删除原虚拟机,使用制作好的镜像和centos.xml启动虚拟机

virsh destroy cenots_6.5

virsh undefine centos_6.5

virsh define centos.xml

virsh start centos_6.5

3、虚拟化之openvz

pass

4、虚拟化产品

openstack

cloudstack

proxmox

基于kvm和openVZ虚拟化技术的管理平台,是基于x86_64的版本,所以运行在i386上,如果使用kvm的话,那么系统的cpu就必须支持intel vt或amd-v的硬件虚拟化技术,如果使用openvz就不需要cpu的支持了

5、libvirt

Libvirt是一个软件集合,便于使用者管理虚拟机和其他虚拟化功能,比如存储和网络接口管理等等。Libvirt概括

起来包括一个API库、一个 daemon(libvirtd)和一个命令行工具(virsh)。

Libvirt的主要目标是:提供一种单一的方式管理多种不同的虚拟化提供方式和 hypervisor。

Libvirt的主要功能如下:

(1) 虚拟机管理

包括不同的领域生命周期操作,比如:启动、停止、暂停、保存、恢复和迁移。

支持多种设备类型的热插拔操作,包括:磁盘、网卡、内存和CPU。

(2) 远程机器支持

    只要机器上运行了libvirt daemon,包括远程机器,所有的libvirt功能就都可以访问和使用。

    支持多种网络远程传输,使用最简单的SSH,不需要额外配置工作。比如:example.com运行了libvirt,

    而且允许SSH访问,下面的命令行就可以在远程的主机上使用virsh命令行。

virsh --connect qemu+ssh://root@example.com/system

(3) 存储管理

任何运行了libvirt daemon的主机都可以用来管理不同类型的存储:创建不同格式的文件映像(qcow2、vmdk、raw等)、挂接NFS共享、列出现有的LVM卷组、创建新的LVM卷组和逻辑卷、对未处理过的磁盘设备分区、挂接iSCSI共享,等等等等。因为libvirt可以远程工作,所有这些都可以通过远程主机使用。(4) 网络接口管理

任何运行了libvirt daemon的主机都可以用来管理物理和逻辑的网络接口。可以列出现有的接口卡,配置、创建接口,以及桥接、vlan和关联设备等,通过netcf都可以支持。

(5) 虚拟NAT和基于路由的网络

任何运行了libvirt daemon的主机都可以用来管理和创建虚拟网络。Libvirt虚拟网络使用防火墙规则作为路由器,让虚拟机可以透明访问主机的网络

5.1 安装libvirt

yum -y install libvirt

之后virsh/virt-host-validate/virt-pki-validate/virt-xml-validate工具可用

5.2 安装libvirt tools

5.2.1 安装python-virtinst

yum -y install python-virtinst

or

yum -y install virt-install

安装该包时会自动安装libvirt-python依赖包,从而在python中可以导入libvirt,但貌似yum支持的是python2.6的版本,所以如果更新到python2.7,会导致无法导入libvirt。

之后virt-clone/virt-convert/virt-install/virt-p_w_picpath可用

5.2.2 安装virt-manager,基于libvirt的图像化虚拟机管理软件

yum -y install virt-manager

安装后virt-manager可用

5.2.3 安装virt-top

yum -y install virt-top

5.3 安装libvirt for python

yum -y install libvirt-python

遇到的问题:

python2.7版本无法导入libvirt