一、虚拟化技术kvm原理

kvm是基于内核的虚拟机,负责的是:
1、虚拟机的虚拟CPU也就是vCPU
2、对虚拟内存进行管理和调度
QEMU-KVM就是通过修改QEMU代码而得出的专门用来创建和管理虚拟机的管理工具,是为了KVM能更好的和内核打交道
使用虚拟化技术的QEMU,实现虚拟外设
结论:
1、KVM本身只关注虚拟机调度和内存管理这两个方面
2、外设的任务交给我们上面说的linux 内核或者是QEMU。 所以KVM就是一个轻量级的Hypervisor。


kvm架构:

由两个模块来组成:kvm模块和QEMU-KVM
原理图
虚拟化技术kvm
QEMU实现了虚拟外设
具体表现在:
[root@foundation90 dev]# ll /dev/kvm
crw-rw-rw-+ 1 root kvm 10, 232 Apr 24 11:26 /dev/kvm
/dev/kvm是kvm内核模块提供给用户空间的一个接口,这个接口被qemu-kvm调用,通过ioctl系统调用就可以给用户提供一个工具创建,删除,管理虚拟机。
(ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。)


二、安装kvm虚拟机

条件:centos redhat镜像,
安装过程:
1、virt-manager
虚拟化技术kvm
2、选择从镜像导入(此次实验是进行安装redhat7.3版本)
虚拟化技术kvm
3、选择镜像所在路径
虚拟化技术kvm
4、后几处不再截图,分别为选择内存与硬盘大小与创建虚拟机的名称
最终会进入这个界面
虚拟化技术kvm
5、进入安装界面
kdump:是在系统崩溃、死锁或者死机的时候用来转储内存运行参数的一个工具和服务,打个比方,如果系统一旦崩溃那么正常的内核就没有办法工作了,在这个时候将由kdump产生一个用于capture当前运行信息的内核,该内核会将此时的内存中的所有运行状态和数据信息收集到一个dump core文件中以便于Red Hat工程师分析崩溃原因,一旦内存信息收集完成,系统将自动重启。
可以使用ulimit -c查看此项是否开启,输出为0则表示没有开启
6、需要自己进行语言与键盘的设置,分区可以进行自己手动分区与自动分区与设置root密码。


三、使用脚本实现

#!/bin/bash
virt-install \
--cdrom /iso/rhel-server-7.0-x86_64-dvd.iso \ #光盘位置
--ram 1024 #设置内存
--cpus 1 #cpu个数
--disk /var/lib/libvirt/images/$1.qcow2,size=9,bus=virtio #硬盘位置,大小,与类型
--name $1 #名称
--network source=br0,model=virtio &#网卡类型
使用此脚本可以直接进行至安装虚拟机的界面
虚拟化技术kvm


四、创建快照

在有母镜像的情况下,对母镜像进行快照
虚拟机的快照类似与一个系统的还原点,也可以类似与虚拟机的一个备份。
使用脚本
#!/bin/bash
qemu-img create -f qcow2 -b \
/var/lib/libvirt/images/rhel7.0-base-2.qcow2 \
/var/lib/libvirt/images/$1.qcow2

virt-install \
--ram 1024 \
--cpus 1 \
--disk /var/lib/libvirt/images/$1.qcow2,size=9,bus=virtio \
--name $1 \
--network source=br0,model=virtio \
--import &
使用此脚本可以直接实现虚拟机的快照功能,而且快照相比于母镜像是非常小的。
快照的大小取决于对快照进行了多少修改
虚拟化技术kvm


五、重置虚拟机快照

#!/bin/bash
virsh list | grep test | awk '{print $NF}'
if [ $? -eq 0 ];then
virsh destroy $1
fi
rm -fr /etc/libvirt/qemu/$1.xml
rm -fr /var/lib/libvirt/images/$1.qcow2

qemu-img create -f qcow2 -b \
/var/lib/libvirt/images/rhel7.0-base-2.qcow2 \
/var/lib/libvirt/images/$1.qcow2

virt-install \
--ram 1024 \
--cpus 1 \
--disk /var/lib/libvirt/images/$1.qcow2,size=9,bus=virtio \
--name $1 \
--network source=br0,model=virtio \
--import &