虚拟化简介
虚拟化是将计算机的各种实体资源(CPU、内存、存储、网络等)进行抽象后呈现出来,即是将一台物理计算机分割成多台计算机,实现在一台计算机上运行多台虚拟机,每台虚拟机可运行不同的操作系统,可包含不同的虚拟硬件,并且它们在相互独立的空间内运行而互不影响。
KVM
KVM是开源软件,全称是kernel-based virtual machine(基于内核的虚拟机)。是x86架构且硬件支持虚拟化技术(如 intel VT 或 AMD-V)的Linux全虚拟化解决方案。它包含一个为处理器提供底层虚拟化 可加载的核心模块kvm.ko(kvm-intel.ko或kvm-AMD.ko)。KVM还需要一个经过修改的QEMU软件(qemu-kvm),作为虚拟机上层控制和界面。KVM能在不改变linux或windows镜像的情况下同时运行多个虚拟机,(它的意思是多个虚拟机使用同一镜像)并为每一个虚拟机配置个性化硬件环境(网卡、磁盘、图形适配器等)同时KVM还能够使用ksm技术帮助宿主服务器节约内存。在主流的Linux内核,如2.6.20以上的内核均已包含了KVM核心
QEMU
Linux 内核加载了 KVM 模块后,就可以使用 KVM 模块实现虚拟机的内存分配、虚拟 CPU 的读写及管理虚拟 CPU 的运行。但是仅有 KVM 模块远远不够,因为用户无法直接控制内核模块,所以还需要一个用户空间的工具。这个用户空间的工具就是开源虚拟化软件 QEMU,使用它来模拟 PC 硬件的用户空间组件、I/O 设备及提供访问外设的途径
Qemu是一个模拟器,它向Guest OS模拟CPU和其他硬件,Guest OS认为自己和硬件直接打交道,其实是同Qemu模拟出来的硬件打交道,Qemu将这些指令转译给真正的硬件。
Qemu模拟其他的硬件,如Network, Disk,同样会影响这些设备的性能,于是又产生了pass through半虚拟化设备virtio_blk, virtio_net,提高设备性能
QEMU-KVM
KVM内核模块本身只能提供CPU和内存的虚拟化,所以它必须结合QEMU才能构成一个完成的虚拟化技术,这就是下面要说的qemu-kvm
Qemu将KVM整合进来,通过ioctl调用/dev/kvm接口,将有关CPU指令的部分交由内核模块来做。kvm负责cpu虚拟化 内存虚拟化,实现了cpu和内存的虚拟化,但kvm不能模拟其他设备。qemu模拟IO设备(网卡,磁盘等),kvm加上qemu之后就能实现真正意义上服务器虚拟化。因为用到了上面两个东西,所以称之为qemu-kvm。
Libvirt
为什么需要Libvirt?
1、Hypervisor 比如 qemu-kvm 的命令行虚拟机管理工具参数众多,难于使用。
2、Hypervisor 种类众多,没有统一的编程接口来管理它们,这对云环境来说非常重要。
3、没有统一的方式来方便地定义虚拟机相关的各种可管理对象。
RedHat 发布了一个开源项目 libvirt,它是为了更加方便的管理各种虚拟化引擎而设计的。libvirt 作为中间适配层,让底层虚拟化引擎对上层用户空间的管理工具做到完全透明,因为 libvirt 屏蔽了底层各种虚拟化的细节,为上层管理工具提供了一个统一的接口。libvirt提供统一、稳定、开放的源代码的应用程序接口(API)、守护进程 (libvirtd)和和一个默认命令行管理工具(virsh)。libvirt提供了对虚拟化客户机和它的虚拟化设备、网络和存储的管理.libvirt作为中间适配层,让底层 Hypervisor 对上层用户空间的管理工具是可以做到完全透明的,因为 libvirt 屏蔽了底层各种 Hypervisor 的细节,为上层管理工具提供了一个统一的、较稳定的接口(API)
libvirt 支持多种虚拟化引擎,即支持包括 KVM、QEMU、Xen、VMware、VirtualBox 等在内的平台虚拟化方案
libvirt 是目前使用最广泛的对 KVM 虚拟机进行管理的工具和应用程序接口,而且一些常用的虚拟机管理工具(如virsh、virt-install、virt-manager等)和云计算框架平台(如 OpenStack、CloudStack 等)都在底层使用了 libvirt 的应用程序接口
以上相关技术概念介绍整理并摘自互联网
接下来介绍如何在CentOS6.9Linux系统上部署KVM和创建虚拟机
1、请确保在服务器的 BIOS 中启用了虚拟化技术(VT)。可以运行以下命令测试 CPU 是否支持 Intel VT 和 AMD_V 虚拟化技术
[root@KVM_Lab ~]# lscpu | grep Virtualization
或者
[root@KVM_Lab ~]# cat /proc/cpuinfo | grep -E 'vmx|svm'
上图的命令输出可以看到CPU不支持虚拟化,我们需要BIOS里开启虚拟化技术(VT),由于是虚拟机,先将虚拟机halt关机,然后在虚拟机设置——处理器——里面开启虚拟化即可
顺带挂载一下CentOS6.9的ISO镜像
开机后再进行验证
[root@KVM_Lab ~]# lscpu | grep Virtualization
Virtualization: VT-x
Virtualization type: full
[root@KVM_Lab ~]# cat /proc/cpuinfo | grep -E 'vmx|svm'
说明CPU已经支持虚拟化
2、接下来配置yum本地进行镜像源
[root@KVM_Lab ~]# mkdir /mnt/cdrom
[root@KVM_Lab ~]# mount -t iso9660 /dev/cdrom /mnt/cdrom/
mount: block device /dev/sr0 is write-protected, mounting read-only
[root@KVM_Lab ~]# cp /dev/cdrom /CentOS-6.9-x86_64-bin-DVD1.iso
[root@KVM_Lab cdrom]# cd /etc/yum.repos.d/
[root@KVM_Lab yum.repos.d]# mv CentOS-Base.repo CentOS-Base.repo_defaultbackup
[root@KVM_Lab yum.repos.d]# vi CentOS-Media.repo
[localyum]
name=CentOS-$releasever - Media
baseurl=file:///mnt/cdrom
gpgcheck=0
enabled=1
gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-CentOS-6
测试本地yum镜像源是否可以正常使用
[root@KVM_Lab ~]# yum clean all
[root@KVM_Lab ~]# yum -y install tree
3、接下来正式开始KVM的安装与部署
yum安装qemu-kvm libvirt 等其它程序包
[root@KVM_Lab ~]# yum -y install qemu-kvm libvirt python-virtinst bridge-utils
4、查看kvm模块是否被加载
[root@KVM_Lab ~]# lsmod | grep kvm
kvm_intel 55432 0
kvm 346318 1 kvm_intel
[root@KVM_Lab ~]# service libvirtd start
[root@KVM_Lab ~]# chkconfig libvirtd on
5、创建桥接网络
[root@KVM_Lab ~]# cd /etc/sysconfig/network-scripts/
[root@KVM_Lab network-scripts]# mv ifcfg-eth0 ifcfg-br0
[root@KVM_Lab network-scripts]# vi ifcfg-br0
DEVICE=br0
BOOTPROTO=none
DNS1=114.114.114.114
GATEWAY=192.168.31.1
IPADDR=192.168.31.180
IPV6INIT=yes
MTU=1500
NETMASK=255.255.255.0
NM_CONTROLLED=yes
ONBOOT=yes
TYPE=Bridge
USERCTL=no
PEERDNS=yes
[root@KVM_Lab network-scripts]# vi ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BRIDGE=br0
创建完桥接网卡后重启网络服务
[root@KVM_Lab network-scripts]# service network restart
若出现网卡启动失败时:rm -rf /etc/udev/rules.d/70-persistent-net.rules然后重启
6、创建虚拟机
[root@KVM_Lab ~]# mkdir /kvm_images
[root@KVM_Lab ~]#virt-install --name=kvm_01 --ram 2048 --disk path=/kvm_images/kvm_01.img,size=20 --vcpus=2 --os-type linux --os-variant rhel6 --network bridge=br0 --graphics vnc,listen=0.0.0.0,port=7788 --cdrom=/CentOS-6.9-x86_64-bin-DVD1.iso
7、接下来使用VNC工具登录 宿主机的IP vnc监听端口7788
接下来在VNC远程工具中进行虚拟机的安装
安装步骤省略
8、virsh常用基本操作命令
KVM虚拟化的简单部署就先介绍到这里,目前刚接触KVM,后面再继续学习克隆虚拟机,冷迁移 热迁移等操作