目录:
(2.1)半虚拟化驱动网卡
(2.2)半虚拟化网卡,全虚拟化网卡的理解
(2.3)网络的介绍:桥接、NAT、仅主机
(2.4)存储池管理及虚拟磁盘的管理


(2.1)半虚拟化驱动网卡
(2.1.1)我们使用的管理工具virsh、virt-manager是属于单机版本的,在企业版中的vmm产品主要有ovirt,红帽的rhev,新浪的stonevirt。接着我们来看一下网络的相关内容,在网卡NIC中选择virtio代表的是半虚拟化驱动,而e1000、rtl8139则代表的是全虚拟化驱动。
KVM虚拟化技术详解(二)--网络及磁盘管理_第1张图片


(2.2)半虚拟化网卡,全虚拟化网卡的理解
(2.2.1)我们网卡的拓扑图,首先是我们的一台虚拟机,虚拟机会有一个自身的网卡,虚拟机的网卡会连接到一个虚拟化层,再接着连接到一个我们自己做的网桥例如br0,通过我们自己做的网桥最后连接到物理机的网卡上。如果网卡驱动使用的是全虚拟化,那么网卡是不知道自己在虚拟机里的,所以vm虚拟机中的所有数据包传输都会进过全虚拟化层。
KVM虚拟化技术详解(二)--网络及磁盘管理_第2张图片
(2.2.2)如果网卡驱动使用的是virtio这样的半虚拟化驱动,那么此时虚拟机guestos知道自己是运行在虚拟机上的,是可以跳过虚拟化层,从虚拟机网卡直接到达虚拟机所创建的网桥的。所以使用半虚拟化的时候,网卡的IO会有明显的提升。
KVM虚拟化技术详解(二)--网络及磁盘管理_第3张图片
(2.2.3)所以当在使用Linux系统时,选择virtio的性能会比较高,在Linux系统中默认是能识别virtio这种类型的设备的。如果我们在Windows系统中插入某个硬件设备时,出现了无法识别的情况,此时我们需要安装半虚拟化驱动程序解决。因此使用半虚拟化驱动是能够有效的提供我们系统的性能的。
KVM虚拟化技术详解(二)--网络及磁盘管理_第4张图片


(2.3)网络的介绍:桥接、NAT、仅主机
(2.3.1)接下来我们来了解虚拟化环境里主要的三种网络的工作流程。第一种是桥接bridge,在我们的物理机中有两张网卡eth0、eth1。在我们的物理机中有两台虚拟机vm1、vm2,同时物理机中还会创建一个桥接br0。在没有创建br0之前,物理机的数据包是从eth0传输的,当我们创建了br0后,此时物理机的数据包也走br0进行传输了。此时所有数据包从br0传输了,此时我们定义br0的上行链路是eth0。在KVM中,我们称之为把eth0桥接到br0;而在vmware中VMnet0类似于我们定义的br0,“桥接到”类似于我们定义的eth0,因此在vmware里我们称之为将VMnet0桥接到物理机的具体网卡。
KVM虚拟化技术详解(二)--网络及磁盘管理_第5张图片
KVM虚拟化技术详解(二)--网络及磁盘管理_第6张图片
(2.3.2)现在我们对图2-5进行示意图转换,将创建的虚拟机和网桥br0都从物理机中提取出来,此时br0就是作为一个交换机管理着vm1、vm2、物理机OS,而这三个主机都是在同一个网段,br0为三个主机提供内部传输数据服务,同时外部链接eth0对外传输数据。这就是我们所说的桥接网络。
KVM虚拟化技术详解(二)--网络及磁盘管理_第7张图片
(2.3.3)现在我们用以下拓扑图在实验中配置桥接模式,我们将eth0桥接到br0上,这样eth0上就没有IP地址了,而在br0上有IP地址,并且将vmware workstation的DHCP自带的服务打开。
KVM虚拟化技术详解(二)--网络及磁盘管理_第8张图片
KVM虚拟化技术详解(二)--网络及磁盘管理_第9张图片
(2.3.4)我们先使用命令brctl show查看vms002主机上当前网桥的情况,我们在vms002主机上启动网络的图形化配置界面,并且将eno16777728网卡删除掉,添加一个桥接网络。我们可以启动网络配置的图形化界面操作“nm-connection-editor &”,以此来配置IP地址。
KVM虚拟化技术详解(二)--网络及磁盘管理_第10张图片
KVM虚拟化技术详解(二)--网络及磁盘管理_第11张图片
KVM虚拟化技术详解(二)--网络及磁盘管理_第12张图片
KVM虚拟化技术详解(二)--网络及磁盘管理_第13张图片
(2.3.5)接着我们连接名称和接口名称都是br0,并设置vms002主机的IP、子网掩码、网关、DNS的信息。
KVM虚拟化技术详解(二)--网络及磁盘管理_第14张图片
KVM虚拟化技术详解(二)--网络及磁盘管理_第15张图片
(2.3.6)接着我们在vms002主机上选择“桥接”--“添加”--“以太网”,然后将eno16777728和br0关联在一起了,最后点击保存即可。此时我们发现br0上便有了192.168.26.102的IP地址了。
KVM虚拟化技术详解(二)--网络及磁盘管理_第16张图片
KVM虚拟化技术详解(二)--网络及磁盘管理_第17张图片
KVM虚拟化技术详解(二)--网络及磁盘管理_第18张图片
(2.3.7)接着我们使用virt-manager导入一个创建好的KVM虚拟机,此时我们发现系统已经可以自动的识别出创建好的桥接网络br0
KVM虚拟化技术详解(二)--网络及磁盘管理_第19张图片
KVM虚拟化技术详解(二)--网络及磁盘管理_第20张图片
KVM虚拟化技术详解(二)--网络及磁盘管理_第21张图片
(2.3.8)在配置界面对网卡,硬盘设置好virtio类型,并设置好显示协议
KVM虚拟化技术详解(二)--网络及磁盘管理_第22张图片
(2.3.9)我们将创建的KVM虚拟机small的网卡ONBOOT设置为yes后,此时我们发现虚拟机small已经正常的获取了由vmware workstation的DHCP分配的192.168.26.0/24网段的IP地址了。
注意(使用经验总结):我们创建的small虚拟机硬盘可以只划分8G的总空间,使用最小化的安装方式,其中“/”根分区给6G,swap分区给2G即可,这样就可以使用最小化安装系统的方式安装出来一个系统,最小化安装的系统可以启动,不过系统是精简版的,很多软件包都需要自己后续配置安装。
KVM虚拟化技术详解(二)--网络及磁盘管理_第23张图片
同时我们如果希望配置KVM虚拟机的YUM源,则应该首先将光盘镜像连接到虚拟机中,然后在使用挂载的方式将/mnt目录下,此时系统便可以访问光盘中的内容了。
# mount -o remount,ro /dev/cdrom /mnt
KVM虚拟化技术详解(二)--网络及磁盘管理_第24张图片
KVM虚拟化技术详解(二)--网络及磁盘管理_第25张图片
(2.3.10)以上就是我们常见的桥接bridge网络。接下来我们介绍第二种网络NAT,在我们的物理机中有一个网卡eth0,其IP地址是192.168.26.102,同时有两个虚拟机vm1和vm2,还有一个网桥xx,所在的网段是192.168.101.0/24,同时在我们的物理机上也会自动的创建一个虚拟的网卡virbr1,且网卡的IP默认为192.168.101.1,此时KVM中的vm1虚拟机是需要和外部网络进行通信的,所以在我们的NAT网络环境里存在着一个虚拟机的路由器,这个路由器一头桥接到virbr1网卡,一头桥接到物理机上的eth0网卡。路由器中传输数据一般有两种方式:第一个是路由的方式,当vm1虚拟机的数据包要到达eth0时,会通过指定路由表的方式,传输数据时IP地址信息是不发生任何的变化的,因此一般有公网地址的时候可以使用路由转发的方式;第二个是NAT的方式,会隐藏vm1主机的源地址信息,以外部传输的地址进行数据通信。需要注意的是在KVM的环境中,vm1虚拟机指向的网关和DNS都应该设置为192.168.101.1,而在vmware环境中,virbr1的地址为192.168.101.1,虚拟路由器的内接口也有一个地址为192.168.101.2,所以如果环境中有虚拟机,那么虚拟机的网关和DNS应该设置为192.168.101.2
KVM虚拟化技术详解(二)--网络及磁盘管理_第26张图片
KVM虚拟化技术详解(二)--网络及磁盘管理_第27张图片
(2.3.11)我们在KVM中创建一个新的网络xx,设置网络为192.168.101.0/24,转发的物理网络选择br0,网络模式设置为NAT
KVM虚拟化技术详解(二)--网络及磁盘管理_第28张图片
KVM虚拟化技术详解(二)--网络及磁盘管理_第29张图片
KVM虚拟化技术详解(二)--网络及磁盘管理_第30张图片
KVM虚拟化技术详解(二)--网络及磁盘管理_第31张图片
KVM虚拟化技术详解(二)--网络及磁盘管理_第32张图片
(2.3.12)此时在我们的vms002主机上便产生了一个virbr1的网卡,且网卡的IP地址为192.168.101.1,同时我们在small虚拟机中将网卡的类型设置为NAT到br0
KVM虚拟化技术详解(二)--网络及磁盘管理_第33张图片
KVM虚拟化技术详解(二)--网络及磁盘管理_第34张图片
(2.3.13)我们在small虚拟机中将网络重启后,发现此时虚拟机已经获得了192.168.101.0/24网段中的IP地址,且在KVM环境中网关和DNS都已经设置为192.168.101.1地址了,NETMASK子网掩码设置的是255.255.255.0了
KVM虚拟化技术详解(二)--网络及磁盘管理_第35张图片
KVM虚拟化技术详解(二)--网络及磁盘管理_第36张图片
(2.3.14)这个就是我们所熟知的NAT网络。接下来我们介绍第三种网络仅主机模式,在仅主机模式中是不能够进行外部联网通信的,即vm1主机通过网桥到达virbr2后,并不再会和物理机的网卡eth0进行通信了,所以这种网络也是我们常说的隔离网络,而我们的物理机是可以使用创建的虚拟网卡virbr2和KVM虚拟机进行通信的
KVM虚拟化技术详解(二)--网络及磁盘管理_第37张图片
(2.3.15)我们创建一个yy网络,设置网段为172.25.0.0/24,选择隔离的虚拟网络,创建完成后发现在vms002主机上便多了一个虚拟网卡virbr2
KVM虚拟化技术详解(二)--网络及磁盘管理_第38张图片
KVM虚拟化技术详解(二)--网络及磁盘管理_第39张图片
KVM虚拟化技术详解(二)--网络及磁盘管理_第40张图片
KVM虚拟化技术详解(二)--网络及磁盘管理_第41张图片
(2.3.16)接着在small虚拟机上将网卡设置为yy网络,并将网络重启一下。发现此时虚拟机small已经获取了172.25.0.0/24网段中的IP地址了,在vms002主机上指定使用virbr2网卡去ping虚拟化环境中的small虚拟机是可以正常的ping通的,但是使用br0网卡就无法ping通了。
KVM虚拟化技术详解(二)--网络及磁盘管理_第42张图片
KVM虚拟化技术详解(二)--网络及磁盘管理_第43张图片
KVM虚拟化技术详解(二)--网络及磁盘管理_第44张图片
(2.3.17)我们也可以使用配置文件的方式,我们KVM环境网络设置的配置文件在
/etc/libvirt/qemu/networks目录下。
KVM虚拟化技术详解(二)--网络及磁盘管理_第45张图片
(2.3.18)接着我们自己创建一个zz.xml配置文件,并设置一个随机的UUID等信息。
KVM虚拟化技术详解(二)--网络及磁盘管理_第46张图片
KVM虚拟化技术详解(二)--网络及磁盘管理_第47张图片
KVM虚拟化技术详解(二)--网络及磁盘管理_第48张图片
(2.3.19)现在我们通过命令行创建一个zz网络,首先我们定义一个zz网络,然后再创建一个zz网络,并将网络启动起来。
注意:我们可以通过如下的命令查看KVM中所有网络设置的命令
# virsh --help |grep net
KVM虚拟化技术详解(二)--网络及磁盘管理_第49张图片
KVM虚拟化技术详解(二)--网络及磁盘管理_第50张图片
KVM虚拟化技术详解(二)--网络及磁盘管理_第51张图片
(2.3.20)我们在autostart目录下可以看到所有启动的网络都默认有产生一个软链接
# cd /etc/libvirt/qemu/networks/autostart/
# ln -s /etc/libvirt/qemu/networks/autostart/zz.xml zz.xml
KVM虚拟化技术详解(二)--网络及磁盘管理_第52张图片
(2.3.21)通过如下的命令我们可以查看虚拟机使用的是哪个网络
# virsh --help |grep if
# virsh domiflist small
KVM虚拟化技术详解(二)--网络及磁盘管理_第53张图片


(2.4)存储池管理及虚拟磁盘的管理
对于硬盘管理,我们主要是从四个方面来进行考虑:1.创建一块硬盘;2.把一块硬盘添加到虚拟机里;3.在不启动虚拟机的情况下,读取一块硬盘的内容;4.分析不同类型硬盘的功能(raw,qcow2)
(2.4.1)首先我们来创建一块硬盘,创建一个qcow2格式的硬盘文件,命名为test.qcow2,大小为2G
# qemu-img create -f qcow2 test.qcow2 2G
# qemu-img info test.qcow2
KVM虚拟化技术详解(二)--网络及磁盘管理_第54张图片
(2.4.2)注意我们所创建的虚拟机硬盘文件,是需要放在存储池中才能使用的,如果没有放在存储池里的话,是不能使用的。其中系统默认的存储池是在/var/lib/libvirt/images当中。
KVM虚拟化技术详解(二)--网络及磁盘管理_第55张图片
(2.4.3)然后我们把创建好的2G虚拟机硬盘文件test.qcow2添加到对应的虚拟机中,并命名为vdb磁盘
# virsh --help |grep disk---查看命令disk命令的选项帮助
# virsh help attach-disk---查看添加硬盘的所有命令帮助
# virsh domblklist small---查看对应的虚拟机所有硬盘的情况
# virsh attach-disk small /opt/test.qcow2 vdb --subdriver qcow2---在small虚拟机中添加vdb硬盘
# virsh detach-disk small vdb---在small虚拟机中删除vdb硬盘
# echo 3 > /proc/sys/vm/drop_caches---将缓存中的信息清除
# setterm -blank 0---关闭系统的屏幕保护
KVM虚拟化技术详解(二)--网络及磁盘管理_第56张图片
KVM虚拟化技术详解(二)--网络及磁盘管理_第57张图片
(2.4.4)但是我们将虚拟机small关机后,发现添加的硬盘vdb就消失了。这是由于命令行的设置是临时生效的,如果希望设置能够用永久生效,应该在命令行加上persistent选项
# virsh attach-disk small /opt/test.qcow2 vdb --subdriver qcow2 --persistent
KVM虚拟化技术详解(二)--网络及磁盘管理_第58张图片
KVM虚拟化技术详解(二)--网络及磁盘管理_第59张图片
KVM虚拟化技术详解(二)--网络及磁盘管理_第60张图片
(2.4.5)在small虚拟机上添加test.qcow2硬盘,命名为vdb,并且将硬盘持久化,此时将small虚拟机关闭后发现硬盘仍然是存在的。如果需要将硬盘删除,也是需要加上持久化的选项persistent的。
# virsh detach-disk small vdb --persistent
KVM虚拟化技术详解(二)--网络及磁盘管理_第61张图片
KVM虚拟化技术详解(二)--网络及磁盘管理_第62张图片
KVM虚拟化技术详解(二)--网络及磁盘管理_第63张图片
(2.4.6)除了通过命令行的方式添加硬盘外,也是可以通过配置文件的方式来添加硬盘的。我们进入到/etc/libvirt/qemu/目录下,编辑small.xml文件。我们将vda的6行内容复制一份并编辑为vdb的内容。执行完更新的命令后,此时在虚拟机small中通过编辑配置文件,我们的vdb硬盘已经正常的添加进来了。
# systemctl restart libvirtd
# virsh destroy small
# virsh start small
KVM虚拟化技术详解(二)--网络及磁盘管理_第64张图片
KVM虚拟化技术详解(二)--网络及磁盘管理_第65张图片
KVM虚拟化技术详解(二)--网络及磁盘管理_第66张图片
KVM虚拟化技术详解(二)--网络及磁盘管理_第67张图片
(2.4.7)如果我们在虚拟机不开机的情况下,怎样来读取或者修改硬盘的内容分呢,首先我们通过直接打开硬盘文件的方式来实现。我们在虚拟机small的用户家目录下创建一个测试文件aa.txt,并写入相关的文字信息,然后将small虚拟机关机。
KVM虚拟化技术详解(二)--网络及磁盘管理_第68张图片
KVM虚拟化技术详解(二)--网络及磁盘管理_第69张图片
(2.4.8)接着我们在vms002主机上可以使用guestfish命令,其中-i表示交互式,-w表示可以写入,-a表示自动运行,在我们的环境中SELinux是permissive状态,所以不用加--selinux选项。
KVM虚拟化技术详解(二)--网络及磁盘管理_第70张图片
KVM虚拟化技术详解(二)--网络及磁盘管理_第71张图片
(2.4.9)我们编辑small虚拟机的登录配置文件/etc/issue,此时在small虚拟机启动后,便可以看到在guestfish的文件中编辑的开机信息了。
KVM虚拟化技术详解(二)--网络及磁盘管理_第72张图片
KVM虚拟化技术详解(二)--网络及磁盘管理_第73张图片
KVM虚拟化技术详解(二)--网络及磁盘管理_第74张图片
(2.4.10)以上就是我们第一种直接打开KVM虚拟机硬盘文件的方式,这种方式适合用于在不开机的情况下编辑这个这个虚拟机中的一些文件的需求情况。同时我们还有第二种打开硬盘文件的方式即挂载硬盘文件,这种方式适合于虚拟机启动不起来了,我想把硬盘文件里的数据拷贝出来。我们先来看看raw格式的硬盘操作方式,其中convert表示类型转换,-f表示源格式,-O表示目标格式,small.raw为新的raw格式磁盘名。
# qemu-img convert -f qcow2 -O raw vm1.qcow2 small.raw
KVM虚拟化技术详解(二)--网络及磁盘管理_第75张图片
(2.4.11)我们发现在/dev/mapper目录中目前还没有相关的文件。我们使用kpartx命令将small.raw中的文件读取到/dev/mapper目录中。此时在/dev/mapper目录中已经有了small.raw文件的信息,我们将/dev/mapper/rhel-root挂载到/mnt目录下,查看etc/issue文件,便发现这个是我们之前在small虚拟机中编辑的文件信息了。
# kpartx -av small.raw---将small虚拟机中的文件读取到/dev/mapper目录中
# kpartx -d small.raw---将挂载到/dev/mapper目录的硬盘卸载掉
KVM虚拟化技术详解(二)--网络及磁盘管理_第76张图片
KVM虚拟化技术详解(二)--网络及磁盘管理_第77张图片
(2.4.12)将/dev/mapper/rhel-root挂载到/mnt目录后,将small虚拟机中创建的aa.txt文件拷贝到vms002主机的/opt目录中,便实现了挂载硬盘文件读取数据的要求。对于qcow2格式的文件,我们可以先将qcow2格式的文件转换成raw,然后在通过挂载硬盘文件方式读取相关数据。
KVM虚拟化技术详解(二)--网络及磁盘管理_第78张图片
(2.4.13)注意:一般我们的内核模块都是放在如下的目录中的,如果我们想要编译内核可以通过如下的路径(源码编译,编译安装)
# ls /lib/modules/3.10.0-229.el7.x86_64/kernel/drivers/block/
# yum install gcc -y---安装gcc编译器
# yum install kernel-devel -y---安装后可以看到内核源代码
# yum install ncurses-devel -y
# make menuconfig
# modprobe nbd
KVM虚拟化技术详解(二)--网络及磁盘管理_第79张图片
KVM虚拟化技术详解(二)--网络及磁盘管理_第80张图片
KVM虚拟化技术详解(二)--网络及磁盘管理_第81张图片
KVM虚拟化技术详解(二)--网络及磁盘管理_第82张图片
(2.4.14)接下来我们来分析不同类型硬盘的功能,在KVM环境中常见的硬盘格式主要是raw和qcow2。raw硬盘格式是KVM环境中默认的硬盘格式,其优点是硬盘的传输速度很快,缺点是很多功能不支持,比如无法做快照;而qcow2硬盘格式速度相较于raw会慢一些,但是它支持更多的功能,它是支持快照功能的。从分配硬盘空间的角度看raw是立即分配磁盘大小,如果创建了8G的raw磁盘,则马上从物理磁盘中消耗8G的硬盘空间;而qcow2则是实际用多少空间,就占用多少硬盘大小。
# virsh --help | grep snap---创建快照命令帮助
KVM虚拟化技术详解(二)--网络及磁盘管理_第83张图片

—————— 本文至此结束,感谢阅读 ——————