KVM的介绍:

KVM是Kernel-based Virtual Machine的缩写,及基于Linux内核的虚拟机,是一种完全虚拟化的解决方案,也就是说普通的操作系统不需要经过修改就可以在KVM上面进行运行。它使用Linux自身的调度器进行管理,因此相比较xen而言,其核心源码很少。但是KVM虚拟化需要硬件的支持,是硬件的虚拟化的一种。

  当然准确点的说,KVM是Linux的一个模块。可以用modprobe去加载KVM模块,之后就可以使用KVM模块创建虚拟机,实现虚拟内存的分配,虚拟CPU寄存器的读写以及管理虚拟CPU的运行。但仅仅有KVM模块是不够的,因为用户无法直接控制内核模块去做事情,所以还需要一个用户空间的工具---QEMU,用来模拟PC硬件的用户空间组件,模拟I/O设备模型以及提供访问外设的途径。

  KVM的基本架构

kvm cpu类型 kvm cpu mode_centos

 

KVM的安装

前提:

centos一台,网卡一块,虚拟化功能已经开启

kvm cpu类型 kvm cpu mode_ci_02

1、yum源配置

[root@localhost ~]# df -TH
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs        20G  5.9G   14G   31% /
devtmpfs                devtmpfs  2.7G     0  2.7G    0% /dev
tmpfs                   tmpfs     2.7G     0  2.7G    0% /dev/shm
tmpfs                   tmpfs     2.7G   11M  2.7G    1% /run
tmpfs                   tmpfs     2.7G     0  2.7G    0% /sys/fs/cgroup
/dev/sda1               xfs       1.1G  179M  885M   17% /boot
tmpfs                   tmpfs     533M   29k  533M    1% /run/user/0
/dev/sr0                iso9660   4.5G  4.5G     0  100% /mnt
[root@localhost ~]# cat /etc/yum.repos.d/Cent7.repo 
[Myb]
name=Cent7
baseurl=file:///mnt
enable=1
gpgcheck=0
[root@localhost ~]#

2、查看当前宿主机有没有开启虚拟化

[root@localhost ~]# grep -E '(vmx|svm)' /proc/cpuinfo
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch epb tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid rdseed adx smap xsaveopt dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch epb tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid rdseed adx smap xsaveopt dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp

当有提示的话则表明已经开启虚拟化

3、开始安装kvm依赖包

yum install libvirt* virt-* qemu-kvm* -y
libvirt    ###虚拟机管理
virt          ###虚拟机安装克隆
qemu-kvm      ###管理虚拟机磁盘
 
modprobe kvm    开启虚拟机kvm模块
lsmod | grep kvm    查看是否开启
[root@localhost ~]# lsmod | grep kvm
kvm_intel             174841  0 
kvm                   578518  1 kvm_intel
irqbypass              13503  1 kvm
[root@localhost ~]# systemctl enable libvirtd.service
systemctl start libvirtd.server

4、 创建虚拟机磁盘并上传镜像

磁盘创建有两种模式:

raw和qcow2
此处是使用qcow2,具体区别:
[root@localhost opt]#
Formatting '/opt/centos7-x86_64.qcow2', fmt=qcow2 size=10737418240 encryption=off cluster_size=65536 lazy_refcounts=off

注意:此提示是正确的

查看创建的硬盘和上传的镜像

kvm cpu类型 kvm cpu mode_centos_03

5、创建网桥br0

[root@localhost ~]#brctl addbr br0
[root@localhost ~]#virsh iface-bridge ens33 br0
查看桥接网卡信息:
[root@localhost ~]# brctl show
bridge name	bridge id		STP enabled	interfaces
br0		8000.000c2944096a	yes		ens33
virbr0		8000.525400ae971b	yes		virbr0-nic
							vnet0
[root@localhost ~]#

查看网卡信息变为:

 

kvm cpu类型 kvm cpu mode_ci_04

重启网卡:

[root@localhost ~]# systemctl restart network

查看宿主机网桥

kvm cpu类型 kvm cpu mode_ci_05

删除宿主网桥:

brctl delbr 名字

查看当前IP地址:

kvm cpu类型 kvm cpu mode_ci_06

6、创建虚拟机:

[root@localhost ~]# virt-install --name centos7-1 --virt-type kvm --ram 1024 --cdrom=/opt/CentOS-7.2
-x86_64-DVD-1511.iso --disk path=/opt/centos7-x86_64.qcow2 --network bridge=br0 --graphics vnc,listen=0.0.0.0,port=5910 --noautoconsole

kvm cpu类型 kvm cpu mode_kvm cpu类型_07

kvm cpu类型 kvm cpu mode_虚拟化_08

7、基本操作命令:

 

virt-install  #建立kvm虚拟机
virsh list  #查看正在运行的KVM虚拟机
virsh list --all  #查看所有KVM虚拟机
virsh start name   #启动KVM虚拟机
virsh shutdown name #正常关闭KVM虚拟机
virsh destroy name  #强制关闭KVM虚拟机(类似于直接断电)
virsh suspend name  #挂起KVM虚拟机
virsh resume name  #恢复挂起的KVM虚拟机
virsh dumpxml name  #备份虚拟机的xml文件
virsh edit name  #编辑KVM虚拟机的xml配置文件
virsh autostart name  #随着宿机的开启启动虚拟机
virsh undefine name  #彻底删除KVM虚拟机,不可逆,如果想找回来,需要备份/etc/libvirt/qemu的xml文件)

 

8、其他操作

磁盘管理
添加磁盘
创建一个qcow2的虚拟磁盘
qemu-img create -f qcow2 /opt/centos7_bak.qcow2  10G
查看创建的硬盘信息
qemu-img info 硬盘名字
为虚拟机添加硬盘
virsh attach-disk centos7-1 /opt/centos7_bak.qcow2 vdb --live --cache=none --subdriver=qcow2
参数说明
vdb        第二块硬盘
--live        热添加
--subdriver        驱动类型
 
查看现有磁盘:
virsh domblklist centos7-1
 
卸载磁盘
virsh detach-disk centos7-1  vdb
qemu-img resize centos7_bak.qcow2 +1G
虚拟机里格式磁盘mkfs.xfs /dev/vdb
 
 
 
快照
创建快照
virsh snapshot-create centos7-1
查看主机的快照列表
virsh snapshot-list  centos7-1
#对虚拟机搞个破坏
还原快照
virsh snapshot-revert centos7-1 --snapshotname 1516607756
删除快照
virsh snapshot-delete  centos7-1 --snapshotname 1516607756
快照路径
/var/lib/libvirt/qemu/snapshot