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

相關文章
相關標籤/搜索