虛擬化技術—基礎(1)
本文圍繞下面3個問題進行對虛擬化技術展開討論:
1、虛擬化技術實現方式有哪些?虛擬化技術分哪些?
2、請分別通過kvm、xen工具來實現虛擬化系統的部署?
3、請描述openstack、kvmqemu-kv、libvirt及xen之間的關系。
虛擬化誕生和發展
1961年 IBM709機實現了分時系統,將CPU占用切分為多個極短(1/100sec)時間片,每一個時間片都執行着不同的任務。通過對這些時間片的輪詢,這樣就可以將一個CPU虛擬化或者偽裝成為多個CPU,並且讓每一顆虛擬CPU看起來都是在同時運行,這就是虛擬機的雛形。后來的system360機都支持分時系統。
1972年 IBM正式將system370機的分時系統命名為虛擬機。
1990年 IBM推出的system390機支持邏輯分區,即將一個cpu分為若干份(最多10份),而且每份cpu都是獨立的,也就是一個物理cpu可以邏輯的分為10個cpu。
直到IBM將分時系統開源后,個人PC終於臨來了虛擬化的開端,后來才有了上述的虛擬機軟件的發展。所以至今為止仍然有一部分虛擬機軟件應用來了分時系統作為虛擬化的基礎實現。
虛擬化是將計算機的各種實體資源,如服務器、網絡、內存及存儲等,予以抽象、轉換后呈現出來,打破實體結構間的不可切割的障礙,使用戶可以比原本的組態更好的方式來應用這些資源。這些資源的新虛擬部份是不受現有資源的架設方式,地域或物理組態所限制。
虛擬化技術的目的
虛擬化技術主要用來解決高性能的物理硬件產能過剩和老的舊的硬件產能過低的重組重用,透明化底層物理硬件,從而最大化的利用物理硬件,簡單來說就是將底層資源進行分區,並向上層提供特定的和多樣化的執行環境。
虛擬化的原理
在OS中加入一個虛擬化層(VMM),虛擬化層可以對下層(HostOS)硬件資源(物理CPU、內存、磁盤、網卡、顯卡等)進行封裝、隔離,抽象為另一種形式的邏輯資源,再提供給上層(GuestOS)使用。所以你可以理解VMM其實就是聯系HostOS和GuestOS的一個中間件,當然虛擬化可以將一份資源抽象為多份,也可以將多份資源抽象為一份。
通過虛擬化技術實現的虛擬機一般被稱之為GuestOS(客戶),而作為GuestOS載體的物理主機稱之為HostOS(宿主)。
虛擬機 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(復雜指令集)。
全虛擬化的兩種實現方式: 1、基於二進制翻譯的全虛擬化;
2、基於掃描和修補的全虛擬化。
-
半虛擬化:是另一種類似於全虛擬化的技術,它使用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虛擬機。
2、確保BIOS里開啟VT: Intel(R) Virtualization Tech [Enabled] 使用如下命令:
[root@localhost ~]# lsmod |grep kvm kvm_intel 162153 0 kvm 525259 1 kvm_intel [root@localhost ~]# modprobe kvm-intel
3、啟動libvirtd:
[root@localhost ~]# systemctl start libvirtd;systemctl enable libvirtd [root@localhost ~]# systemctl list-unit-files|grep libvirtd libvirtd.service enabled libvirtd.socket static [root@localhost ~]#
二、橋接網絡
使用橋接網絡,虛擬機即可與其他機器互相訪問。 1.復制ifcfg-em1 為 ifcfg-br0,並將ifcfg-br0改為如下配置
然后我們重啟網絡:
[root@localhost network-scripts]# service network restart Restarting network (via systemctl): [ OK ] [root@localhost network-scripts]#
三、安裝軟件包:
1、安裝kvm
[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 創建和管理橋接設備的工具
2、安裝x-windows,使用圖形化界面管理虛擬機
[root@localhost ~]# yum groupinstall "X Window System" -y
四、創建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管理。