openstack、kvm、qemu-kvm、libvirt、xen的关系

虚拟化技术—基础(1) 


本文围绕下面3个问题进行对虚拟化技术展开讨论:html

一、虚拟化技术实现方式有哪些?虚拟化技术分哪些?python

二、请分别经过kvm、xen工具来实现虚拟化系统的部署?linux

三、请描述openstack、kvmqemu-kv、libvirt及xen之间的关系。vim

虚拟化诞生和发展


    1961年 IBM709机实现了分时系统,将CPU占用切分为多个极短(1/100sec)时间片,每个时间片都执行着不一样的任务。经过对这些时间片的轮询,这样就能够将一个CPU虚拟化或者假装成为多个CPU,而且让每一颗虚拟CPU看起来都是在同时运行,这就是虚拟机的雏形。后来的system360机都支持分时系统。 
    1972年 IBM正式将system370机的分时系统命名为虚拟机。 
    1990年 IBM推出的system390机支持逻辑分区,即将一个cpu分为若干份(最多10份),并且每份cpu都是独立的,也就是一个物理cpu能够逻辑的分为10个cpu。windows

    直到IBM将分时系统开源后,我的PC终于临来了虚拟化的开端,后来才有了上述的虚拟机软件的发展。因此至今为止仍然有一部分虚拟机软件应用来了分时系统做为虚拟化的基础实现。centos

    虚拟化是将计算机的各类实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户能够比本来的组态更好的方式来应用这些资源。这些资源的新虚拟部份是不受现有资源的架设方式,地域或物理组态所限制。bash

虚拟化技术的目的


    虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能太低的重组重用,透明化底层物理硬件,从而最大化的利用物理硬件,简单来讲就是将底层资源进行分区,并向上层提供特定的和多样化的执行环境。服务器

虚拟化的原理


     在OS中加入一个虚拟化层(VMM),虚拟化层能够对下层(HostOS)硬件资源(物理CPU、内存、磁盘、网卡、显卡等)进行封装、隔离,抽象为另外一种形式的逻辑资源,再提供给上层(GuestOS)使用。因此你能够理解VMM其实就是联系HostOS和GuestOS的一个中间件,固然虚拟化能够将一份资源抽象为多份,也能够将多份资源抽象为一份。网络

    经过虚拟化技术实现的虚拟机通常被称之为GuestOS(客户),而做为GuestOS载体的物理主机称之为HostOS(宿主)。dom

虚拟机 Virtual Machine


 知足下面几个条件的OS就是虚拟机:

  • 由VMM提供的高效(>80%)、独立的计算机系统

  • 拥有本身的虚拟硬件(CPU、内存、网络设备、存储设备)

  • 对于上层软件,虚拟机就是真实的机器

  • Virtual Machine Monitor

虚拟化技术实现方式有哪些?


    如今市场上最多见的虚拟化软件有VMWare workstation(VMWare)、VirtualBox(Oracle)、Hyper-V(Microsoft)、KVM(Redhat)、Xen等,这些软件统称之为VMM(Virtual Machine Monitor),使用不一样的虚拟化实现。而这些虚拟化实现的方式能够分为: 

  • 全虚拟化也成为原始虚拟化技术,该模型使用虚拟机协调guest操做系统和原始硬件,VMM在guest操做系统和裸硬件之间用于工做协调,一些受保护指令必须由Hypervisor(VMM 虚拟机管理程序)来捕获处理。既VMM会为GuestOS抽象模拟出它所须要的包括CPU、磁盘、内存、网卡、显卡等抽象硬件资源,因此全虚拟化的GuestOS并不会知道本身实际上是一台虚拟机。全虚拟化的运行速度要快于硬件模拟,可是性能方面不如裸机,由于Hypervisor须要占用一些资源。典型的全虚拟化软件有:VMWare、Hyper-V、KVM-x86(复杂指令集)。

虚拟化技术概览

    全虚拟化的两种实现方式:  一、基于二进制翻译的全虚拟化;

                            二、基于扫描和修补的全虚拟化。

  • 半虚拟化:是另外一种相似于全虚拟化的技术,它使用Hypervisor分享存取底层的硬件,可是它的guest操做系统集成了虚拟化方面的代码。该方法无需从新编译或引发陷阱,由于操做系统自身可以与虚拟进程进行很好的协做。典型的半虚拟化软件有:Xen、KVM-PowerPC(简易指令集)半虚拟化除了修改内核外还有另一种实现方法–在每个GuestOS中安装半虚拟化软件:VMTools、RHEVTools。

虚拟化技术概览

    半虚拟化须要guest操做系统作一些修改,使guest操做系统意识到本身是处于虚拟化环境的,可是半虚拟化提供了与原操做系统相近的性能。

虚拟化技术分哪些类?


  • 主机虚拟化:

        彻底虚拟化:vmare workstation,kvm,xen(hvm)

        半虚拟化:xen,uml

        模拟:qemu

  • 用户空间虚拟化(容器):

        lxc,openvz,Solaris Containers,FreeBSD jails

  • 库虚拟化:

     WINE Cywin

  • 应用程序虚拟化:

        jvm,pvm,……

 

kvm工具来实现虚拟化系统的部署(2)


kvm部署环境准备:

操做系统

CentOS Linux release 7.2.1511 (Core) 

ip 地址 192.168.2.231 
软件包:yum安装 yum install -y
关闭防火墙和selinux

systemctl stop iptables.service 

vim /etc/sysconfig/selinux 文件里改为SELINUX=disabled

1、前期准备


    一、检查CPU虚拟化支持,若是有vmx 或者svm就说明支持VT;若是没有任何的输出,说明你的cpu不支持,将没法使用KVM虚拟机。

检查CPU虚拟化支持.gif

 

    二、确保BIOS里开启VT:  Intel(R) Virtualization Tech [Enabled]  使用以下命令: 

1
2
3
4
[root@localhost ~] # lsmod |grep kvm
kvm_intel             162153  0
kvm                   525259  1 kvm_intel
[root@localhost ~] # modprobe  kvm-intel

  

    三、启动libvirtd:

1
2
3
4
5
[root@localhost ~] # systemctl start libvirtd;systemctl enable libvirtd
[root@localhost ~] # systemctl list-unit-files|grep libvirtd
libvirtd.service                            enabled
libvirtd.socket                             static 
[root@localhost ~] #

2、桥接网络


    使用桥接网络,虚拟机便可与其余机器互相访问。  1.复制ifcfg-em1 为 ifcfg-br0,并将ifcfg-br0改成以下配置

GIF.gif

而后咱们重启网络:

1
2
3
[root@localhost network-scripts] # service network restart
Restarting network (via systemctl):                        [  OK  ]
[root@localhost network-scripts] #

  

3、安装软件包:

一、安装kvm


1
2
3
4
5
6
7
8
9
10
11
[root@localhost ~] #  yum install qemu-kvm libvirt libguestfs-tools virt-install virt-manager libvirt-python  bridge-utils  -y
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
  * base: mirrors.cn99.com
  * extras: mirrors.cn99.com
  * updates: mirrors.aliyun.com
Package 10:qemu-kvm-1.5.3-105.el7_2.7.x86_64 already installed and latest version
Package libvirt-1.2.17-13.el7_2.5.x86_64 already installed and latest version
Package virt- install -1.2.1-8.el7.noarch already installed and latest version
Package virt-manager-1.2.1-8.el7.noarch already installed and latest version
Nothing to  do

qemu-kvm 主要的KVM程序包kvm相关安装包及其做用

python-virtinst 建立虚拟机所须要的命令行工具和程序库

virt-manager GUI虚拟机管理工具

virt-top 虚拟机统计命令

virt-viewer GUI链接程序,链接到已配置好的虚拟机

libvirt C语言工具包,提供libvirt服务

libvirt-client 为虚拟客户机提供的C语言工具包

virt-install 基于libvirt服务的虚拟机建立命令

bridge-utils 建立和管理桥接设备的工具

二、安装x-windows,使用图形化界面管理虚拟机

[root@localhost ~]# yum groupinstall "X Window System" -y

4、建立vm

[root@localhost ~]# mkdir -pv /var/kvm/images 
mkdir: created directory ‘/var/kvm’
mkdir: created directory ‘/var/kvm/images’
[root@localhost ~]# mkdir -pv /var/kvm/images 
mkdir: created directory ‘/var/kvm’
mkdir: created directory ‘/var/kvm/images’
复制代码
virt-install \
--network bridge:br0 \
--name vm1 \
--ram=1024 \
--vcpus=1 \
--disk path=/var/kvm/images/vm1.img,size=10 \
--graphics none \
--location 'http://ftp.iij.ad.jp/pub/linux/centos/7/os/x86_64/' \
--extra-args="console=tty0 console=ttyS0,115200"
#详细每一个参数的意义能够查看扩展资料
#安装过程会让你选择textmode 仍是vnc,选择textmode继续安装吧
#若是网络会有问题的话,尽可能选择用--cdrom /path/to/centos7.iso
复制代码


xen工具来实现虚拟化系统的部署(3)


环境准备同kvm

开始安装:

复制代码
yum -y install centos-release-xen
sed -i -e "s/enabled=1/enabled=0/g" /etc/yum.repos.d/CentOS-Xen.repo
yum --enablerepo=centos-virt-xen -y update kernel
yum --enablerepo=centos-virt-xen -y install xen
vi /etc/default/grub
# change memory amount for Domain0 (specify proper value on your system)
GRUB_CMDLINE_XEN_DEFAULT="dom0_mem=4096M,max:4096M cpuinfo com1=115200,8n1 .....
/bin/grub-bootxen.sh
reboot
复制代码

后面参考kvm过程,xen过程略;

openstack、kvm、qemu-kvm、libvirt、xen的关系


    KVM是最底层的hypervisor,它是用来模拟CPU的运行,它缺乏了对network和周边I/O的支持,因此咱们是无法直接用它的。QEMU-KVM就是一个完整的模拟器,它是建基于KVM上面的,它提供了完整的网络和I/O支持. Openstack不会直接控制qemu-kvm,它会用一个叫libvit的库去间接控制qemu-lvm, libvirt提供了夸VM平台的功能,它能够控制除了QEMU的模拟器,包括vmware, virtualbox xen等等。因此为了openstack的夸VM性,因此openstack只会用libvirt而不直接用qemu-kvm。libvirt还提供了一些高级的功能,例如pool/vol管理。

转自:https://www.cnblogs.com/zuoyang/articles/5970405.html

相关文章
相关标签/搜索