KVM 虚拟化平台部署

一、KVM简介

KVMKernel Virtual Machine,是一个开源的系统虚拟化模块,最初是由以色列公司Qumranet开发。2007年2月被导入Linux 2.6.20核心中,成为内核源代码的一部分。2008年9月4日,Redhat收购了Qumranet,至此Redhat拥有了自己的虚拟化解决方案,之后便舍弃Xen开始全面扶持KVM,从RHEL6(Linux 2.6.20版本之后)开始KVM便被默认内置于内核中。集成在Linux的各个主要发行版本中,由于与Linux内核高度整合,因此在性能,安全性,兼容性,稳定性上都有很好的表现。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM目前已成为学术界的主流VMM之一。KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术)。是基于硬件的完全虚拟化。而Xen早期则是基于软件模拟的Para-Virtualization,新版本则是基于硬件支持的完全虚拟化。但Xen本身有自己到进程调度器,存储管理模块等,所以代码较为庞大。广为流传的商业系统虚拟化软件VMware ESX系列也是基于软件模拟的Para-Virtualization

KVM 特点

KVM必须在具备Intel VTAMD-V功能的x86平台上运行。KVM包含一个为处理器提供底层虚拟化,可加载的核心模块kvm.kokvm-intel.kokvm-AMD.ko)。使用一个经过修改的QEMUqemu-kvm),作为虚拟机上层控制和界面。

由于KVM仅是一个简单的虚拟化模块,所以它的内存管理没有自我实现,需借助于Linux内核实现内存管理。KVM能够使用Linux所支持的任何存储,在驱动程序的实现上,直接借助于Linux内核来驱动任何硬件。在性能上KVM继承了Linux很好的性能和伸缩性,在虚拟化性能方面,已经达到非虚拟化原生环境95%左右的性能(官方数据)。KVM拓展性也非常好,客户机和宿主机都可以支持非常多的CPU数量和非常大的内存,可以过载使用CPU和内存,还可借助KSM技术实现对内存的过量使用,且保证性能依旧非常不错。

KVM 架构

KVM依赖于x86硬件的虚拟化特性,提供全虚拟化的虚拟机,其基本思想是在Linux内核的基础上添加虚拟机管理模块,重用Linux内核中已完善和成熟的机制和模块,比如进程调度、内存管理、IO管理等,使之成为一个可以支持运行虚拟机的Hypervisor。整体架构如下图所示:

img

二、部署 KVM 虚拟化平台

这里使用的是 Centos 6.5 系统

2.1 准备环境,安装所需组件包

①开启CPU虚拟化功能(CPU,内存和硬盘都设置大一点)

image-20191118200311186

②安装KVM所需软件
安装图形界面

1
yum –y groupinstall "Desktop"

查看包需的软件包组

1
yum grouplist

image-20191118200339086

安装三个软件包组即可

1
2
3
yum -y groupinstall "Virtualization"
yum -y groupinstall "Virtualization Client"
yum -y groupinstall "Virtualization Platform"

或安装如下

1
2
3
4
5
6
7
8
yum -y install qemu-kvm.x86_64 \
qemu-kvm-tools.x86_64 \
python-virtinst.noarch \
qemu-img.x86_64 \
bridge-utils.x86_64 \
libvirt \
virt-manager \
libdevmapper.so.1.02

image-20191118200408976

查看服务,以及端口

image-20191118200424122

③验证

重启系统后,查看CPU是否支持虚拟化,对于Intel的服务器可以通过以下命令查看,只要有输出就说明CPU支持虚拟化;AMD服务器可用cat /proc/cpuinfo | grep smv查看

1
cat /proc/cpuinfo | grep vmx

image-20191118200448884

检查KVM模块是否安装

1
lsmod | grep kvm

image-20191118200507041

开启libvirtd相关服务

1
2
/etc/init.d/messagebus restart
/etc/init.d/libvirtd restart

如出现以下报错:

1
2
3
/etc/init.d/libvirtd start

Starting libvirtd daemon: libvirtd: relocation error: libvirtd: symbol dm_task_get_info_with_deferred_remove, version Base not defined in file libdevmapper.so.1.02 with link time reference [FAILED]

安装libdevmapper.so.1.02版本库即可

image-20191118200542437

设置开机自启动

1
2
3
service libvirtd start
chkconfig  messagebus on
chkconfig  libvirtd on

2.2 设置KVM网络(桥接模式)

桥接模式和NAT模式区别

bridged networking(桥接模式)
在这种模式下,VMWare虚拟出来的操作系统就像是局域网中的一台独立的主机,它可以访问网内任何一台机器。在桥接模式下,你需要手工为虚拟系统配置IP地址、子网掩码,而且还要和宿主机器处于同一网段,这样虚拟系统才能和宿主机器进行通信。同时,配置好网关和DNS的地址后,以实现通过局域网的网关或路由器访问互联网。

network address translation(NAT模式)
使用NAT模式,就是让虚拟系统借助NAT(网络地址转换)功能,通过宿主机器所在的网络来访问公网。也就是说,使用NAT模式可以实现在虚拟系统里访问互联网。NAT模式下的虚拟系统的TCP/IP配置信息是由VMnet8(NAT)虚拟网络的DHCP服务器提供的,无法进行手工修改,因此虚拟系统也就无法和本局域网中的其他真实主机进行通讯。采用NAT模式最大的优势是虚拟系统接入互联网非常简单,只需要宿主机器能访问互联网,你不需要配置IP地址,子网掩码,网关,但是DNS地址还是要根据实际情况填的。添加DNS地址除了在网卡属性中填写,还可以在虚拟机中的“虚拟网络编辑器”中的NAT选项卡中点击“编辑”按钮中来添加。
如果仅仅是让虚拟机能上网,两种模式都可以的,用桥接的话只要你在局域网内有合法的地址,比如你的ADSL猫是带路由功能的,如果是在单位,那就要网管给你合法IP才行(现在公司都是mac和ip绑定的)。
现在是主机和虚拟机互通,如果你的ADSL带路由功能,那关闭虚拟机的dhcp,选桥接,检查2机是否分配同网段的IP,关闭防火墙。

1
vim /etc/sysconfig/network-scripts/ifcfg-eth0

image-20191118200910020

1
vim /etc/sysconfig/network-scripts/ifcfg-br0

image-20191118200923623

1
2
service network restart
Ifconfig

image-20191118200935983

2.3 KVM(Virt-manager图形工具)部署虚拟化

创建存储池

img

选择“存储”项

image-20191118201030177

创建“存储池”目录名

image-20191118201048445

调整目录位置“/”下

image-20191118201101038

②创建一个镜像存储池(用于存放.iso镜像)

image-20191118201114474

填写镜像目录名

image-20191118201127955

调整目录位置到/bdqn 存储池下

image-20191118201139655

③创建存储卷
在bdqn存储池下创建

image-20191118201153704

添加存储卷名,设置最大容量

image-20191118201209320

④新建虚拟化并安装
上传系统镜像(winscp工具)

image-20191118201224439

image-20191118201232715

新建虚拟机

image-20191118201246029

设置:虚拟机名,安装类型

image-20191118201256235

设置:镜像位置,系统内核,版本

image-20191118201307731

设置:内存大小,CPU核心数

image-20191118201320294

设置:分配磁盘,存储卷

image-20191118201333464

调整:高级选项

image-20191118201349968

设置:时钟为本地

image-20191118201404399

设置:主机引导时启动虚拟机

image-20191118201418676

设置:远程管理VNC

image-20191118201436662

到此为此,就可以正式安装系统了,相信大家都早已轻车熟路,这里就不一一演示了……

image-20191118201456072

安装完后配置IP地址测试内网和外网的连通性,

三、使用KVM命令集管理虚拟机

3.1 KVM基本功能管理

①查看命令帮助

1
virsh –h

②查看KVM虚拟机系统实例配置文件目录

1
ls /etc/libvirt/qemu/

image-20191118201635419

③查看虚拟机状态

1
virsh list --all

image-20191118201645914

④虚拟机关机与开机

1
2
virsh shutdown chen
virsh start chen

⑤强制关闭虚拟机电源

1
virsh destroy chen

image-20191118201710580

⑥通过配置文件启动虚拟机系统实例

1
virsh create /etc/libvirt/qemu/chen.xml

image-20191118201743567

⑦扶起虚拟机

1
virsh suspend chen

image-20191118201809562

⑧恢复虚拟机

1
virsh resume chen

image-20191118201837051

⑨配置虚拟机实例伴随宿主机自动启动

1
virsh autostart chen

⑩导出虚拟机配置

1
virsh dumpxml chen > /etc/libvirt/qemu/chen02.xml

⑪虚拟机的删除与添加
删除虚拟机

image-20191118201907323

通过备份的配置文件重新定义虚拟机

1
mv chen02.xml chen.xml

image-20191118201927388

重新定义虚拟机

image-20191118201937355

⑫修改虚拟机配置信息(用来修改系统内存大小,磁盘文件等信息)
直接通过vim 命令修改

1
vim /etc/libvirt/qemu/chen.xml

或通过virsh命令修改

1
virsh edit chen

image-20191118202010568

3.2 KVM文件管理

通过文件管理可以直接查看,修改,复制虚拟机内部文件。例如:当系统因为配置问题无法启动时,可以直接修改虚拟机的文件。虚拟机磁盘文件有raw与qcow2格式,KVM虚拟机默认使用raw。以下是对这两个文件格式的对比……

raw : 性能最好,速度最快,其缺点是不支持一些新的功能,如镜像,Zlib磁盘压缩,AES加密等,针对两种格式的文件膛同的工具可供选择。这里介绍本地YUM安装libguestfs-tools后产生的命令行工具(这个工具可以直接读取qcow2格式的磁盘文件,因此需要将raw格式的磁盘文件换成qcow2的格式)
qcow2 : 可以在镜像上做N多个快照,更小的存储空间,支持多个snapshot,对历史snapshot进行管理,支持zlib的磁盘压缩

①转换raw格式磁盘至acow2格式
查看当前磁盘格式

1
qemu-img info /bdqn/chen.img

image-20191118202110777

关闭虚拟机

1
virsh shutdown chen

image-20191118202124895

转换磁盘文件格式

1
qemu-img convert -f raw -O qcow2 /bdqn/chen.img /bdqn/chen02.img

image-20191118202138098

修改chen02的xml配置文件

1
virsh edit chen

image-20191118202153818

②virt-cat 命令,类似于cat 命令(需要安装:libguestfs-tools)

1
virt-cat -a /bdqn/chen.qcow2 /etc/sysconfig/network

③virt-edit 命令,用于编辑文件,用法与vim基本一致

1
virt-edit -a /bdqn/chen.qcow2 /etc/resolv.conf

④virt-df命令用于查看虚拟机磁盘信息

1
virt-df -h chen

image-20191118202225178

3.3 虚拟机克隆(需要关闭虚拟机)

①查看虚拟机状态(确保为关闭状态)

1
virsh list --all

image-20191118202309361

②从chen克隆为chen02

1
virt-clone -o chen -n chen02 -f /bdqn/chen02.qcow2

image-20191118202319713

③查看虚拟机状态

1
virsh list --all

image-20191118202337393

④启动虚拟机

1
virsh start chen02

四、虚拟机快照

KVM虚拟机要使用镜像功能,磁盘格式必须为qcow2,之前已经将chen的磁盘格式转换成了qcow2,又对chen克隆了chen02

①对chen02创建快照

image-20191118202458130

1
virsh snapshot-create chen02

image-20191118202508305

②查看虚拟机快照版本信息

1
virsh snapshot-current chen02

image-20191118202524186

③查看快照信息

1
virsh snapshot-list chen02

image-20191118202541691

⑤删除一些文件

image-20191118202554694

⑥还原快照,看文件是否还存在

1
virsh snapshot-revert chen02 1474811434

image-20191118202614402

image-20191118202629344

⑦删除快照

1
virsh snapshot-list chen02

image-20191118202638628

五、命令快速创建虚拟机

5.1 创建虚拟机磁盘

可以为虚拟机单独创建一个磁盘分区,也可以使用现有的分区目录。

1
qemu-img create -f qcow2 /data/qemu_qcow2/dev_prometheus_server.qcow2 100G

5.2 创建虚拟机实例

1
virt-install --virt-type kvm --name dev_prometheus_server --ram 8192 --vcpus=4 --cdrom=/data/images/CentOS-7-x86_64-Minimal-1708_7.4.iso --disk /data/qemu_qcow2/dev_prometheus_server.qcow2,format=qcow2 --network bridge=br0 --graphics vnc,listen=0.0.0.0,port=6883 --noautoconsole --os-type=linux

br0 为虚拟网卡名称
port 为VNC管理端口

5.3 配置虚拟机开机启动

1
virsh autostart dev_prometheus_server

5.4 使用VNC连接、配置系统

VNC下载

这里没有设置VNC连接密码,连接的时候不需要输入密码。

图片59

连接上去后,按照常规方式配置系统(用户密码、IP等)。

-------------本文结束感谢您的阅读-------------