1 云计算和虚拟化的关系

1 什么是云计算?

简单点来说云计算是一种服务模式。是把各种资源池化以后提供给上层使用,能够按需付费,按量使用的一种服务模式。云计算面对的是用户,针对的是对各种资源的调度,来实现各种服务对外使用。

2 虚拟化

虚拟化最大的好处就是资源池化,方便管理各种各样的资源。虚拟化具有分区,封装,隔离,独立的特点

3 关系

云计算是一种服务模式,是各种技术的集合。而虚拟化是一种具体的技术,没有虚拟化也是可以做云计算的。

2 虚拟化的类型

1 全虚拟化

全虚拟化(FullVirtualization)也称为原始虚拟化技术,该模型使用虚拟机协调Guest操作系统和原始硬件,VMM在Guest操作系统和裸硬件之间用于工作协调,一些受保护指令必须由Hypervisor(虚拟机管理程序)来捕获处理。全虚拟化的运行速度要快于硬件模拟,但是性能方面不如裸机,因为Hypervisor需要占用一些资源。

2 半虚拟化

半虚拟化(ParaVirtualization)是另一种类似于全虚拟化的技术,它使用Hypervisor分享存取底层的硬件,但是它的Guest操作系统集成了虚拟化方面的代码。该方法无需重新编译或引起陷阱,因为操作系统自身能够与虚拟进程进行很好的协作。半虚拟化需要Guest操作系统做一些修改,使Guest操作系统意识到自己是处于虚拟化环境的,但是半虚拟化提供了与原操作系统相近的性能。

2 硬件辅助虚拟化

硬件辅助全虚拟化主要使用了支持虚拟化功能的CPU进行支撑,CPU可以明确的分辨出来自GuestOS的特权指令,并针对GuestOS进行特权操作,而不会影响到HostOS。比如英特尔的vt-x

3 常用的虚拟化解决方案

##业界常用的虚拟化解决方案

1 红帽的RHV

2 微软的Hyper-V

3 citrix的xen

4 vmware的esx server

5 华为的Fusion Computer

4 虚拟化常用技术

1 xen:Xen是第一类运行在裸机上的虚拟化管理程序(Hypervisor)。它支持全虚拟化和半虚拟化,Xen支持hypervisor和虚拟机互相通讯,而且提供在所有Linux版本上的免费产品,包括Red Hat Enterprise Linux和SUSE Linux Enterprise Server。Xen最重要的优势在于半虚拟化,此外未经修改的操作系统也可以直接在xen上运行(如Windows),能让虚拟机有效运行而不需要仿真,因此虚拟机能感知到hypervisor,而不需要模拟虚拟硬件,从而能实现高性能。Xen是另一套独立的虚拟化解决方案,最初的Xen只支持半虚拟化,Intel VT技术出现后,添加了全虚拟化功能,这个全虚拟化功能也是借助了qemu实现,但不是完全依赖qemu

2 kvm:KVM是集成到Linux内核的Hypervisor,是X86架构且硬件支持虚拟化技术(Intel VT或AMD-V)的Linux的全虚拟化解决方案。它是Linux的一个很小的模块,利用Linux做大量的事,如任务调度、内存管理与硬件设备交互等。基于内核的虚拟化,一个虚拟机就是一个进程。

##在历史上kvm和xen征战已久

3 qemu:Qemu是一套独立的虚拟化解决方案;KVM是另一套虚拟化解决方案,不过因为这个方案实际上只实现了内核中对处理器(Intel VT, AMD SVM)虚拟化特性的支持,

换言之,它缺乏设备虚拟化以及相应的用户空间管理虚拟机的工具,所以它借用了QEMU的代码并加以精简,连同KVM一起构成了另一个独立的虚拟化解决方案,不妨称之为:KVM+QEMU.。

4 kvm与xen与openstack和qemu的关系:KVM是Linux kernel的一个模块。可以用命令modprobe去加载KVM模块。加载了模块后,才能进一步通过其他工具创建虚拟机。但仅有KVM模块是 远远不够的,因为用户无法直接控制内核模块去作事情,你还必须有一个运行在用户空间的工具才行。这个用户空间的工具,kvm开发者选择了已经成型的开源虚拟化软件 QEMU。说起来QEMU也是一个虚拟化软件。它的特点是可虚拟不同的CPU。比如说在x86的CPU上可虚拟一个Power的CPU,并可利用它编译出可运行在Power上的程序。KVM使用了QEMU的一部分,并稍加改造,就成了可控制KVM的用户空间工具了。所以你会看到,官方提供的KVM下载有两大部分(qemu和kvm)三个文件(KVM模块、QEMU工具以及二者的合集)。也就是说,你可以只升级KVM模块,也可以只升级QEMU工具。这就是KVM和QEMU 的关系。

5 和openstack的关系

KVM是最底层的hypervisor,它是用来模拟CPU的运行,它缺少了对network和周边I/O的支持,所以我们是没法直接用它的。

QEMU-KVM就是一个完整的模拟器,它是构建基于KVM上面的,它提供了完整的网络和I/O支持。

Openstack不会直接控制qemu-kvm,它会用一个叫libvirt的库去间接控制qemu-kvm。libvirt提供了跨VM平台的功能,它可以控制除了QEMU之外的模拟器,包括vmware, virtualbox, xen等等。

所以为了openstack的跨VM性,所以openstack只会用libvirt而不直接用qemu-kvm。libvirt还提供了一些高级的功能,例如pool/vol管理。

5 案例

1 配置yum仓库

# mount /dev/cdrom /media

# cat /etc/yum.repos.d/dvd.repo

[dvd]

name=redhat rhel7

baseurl=file:///media

gpgcheck=0

# yum list all

# yum clean all

2 安装虚拟化组件

# yum -y groupinstall “Virtualization*”

3 网卡配置

# cd /etc/sysconfig/network-scripts

# cp ifcfg-eno16777736 ifcfg-br0

# cat ifcfg-br0

TYPE=Bridge

DELAY=0

BOOTPROTO=none

DEVICE=br0

ONBOOT=yes

HWADDR=00:0C:29:00:65:78

IPADDR0=192.168.10.8

PREFIX0=24

#cat ifcfg-eno16777736

TYPE=Ethernet

DEVICE=eno16777736

NAME=eno16777736

ONBOOT=yes

HWADDR=00:0C:29:00:65:78

BRIDGE=br0

# service network restart

# ifconfig

###命令行安装虚拟机

# virt-install -n server2 -r 1024 --vcpus=2 --location=/isos/rhel-server-7.0-x86_64-dvd.iso --disk path=/var/lib/libvirt/images/server2.qcow2,size=10,format=qcow2 --network bridge=br0

-n: 虚拟机名称

-r: 内存容量

--vcpus: vcpu数量

--location: 安装源位置

--disk path: 安装目标

size: 磁盘容量

format: 磁盘格式

--network 网络类型

##配置virsh console

# cat /etc/default/grub

GRUB_CMDLINE_LINUX="vconsole.font=latarcyrheb-sun16 vconsole.keymap=us rd.lvm.lvv=rhel_small/swap crashkernel=auto rd.lvm.lv=rhel_small/root console=ttyS0”

# grub2-mkconfig -o /boot/grub2/grub.cfg

# reboot

# virsh console server (server为虚拟机名字)

退出console

# ctrl + ]

##虚拟机的配置文件

# cat /etc/libvirt/qemu/server.xml

server

6f225aff-20f8-4681-8ee8-dc0c658adff7

1048576

1048576

2