一、KVM 虚拟化服务的构成

KVM 虚拟化主要由三大组件构成,即:KVM、QEMU、LIBVIRTD

1、KVM:KVM 是 Linux 内核的模块,他需要 CPU 的支持,采用硬件辅助虚拟化技术 Intel-VT,AMD-V,内存的相关如 Intel 的EPT 和 AMD 的 RVI 技术。

2、QEMU:QEMU是一个虚拟化的仿真工具,通过 ioctl 与内核 kvm 交互完成对硬件虚拟化的支持。

3、LIBVIRTD:Libvirtd 是一个对虚拟化管理的接口和工具,提供用户端程序 virsh,virt-install,virt-manager,virt-view 与用户交互。

二、虚拟化服务的必备软件

qemu-kvm:为 KVM 提供底层仿真支持

libvirt-daemon:守护进程,管理虚拟机

libvirt-client:用户端软件,提供客户端管理命令

libvirt-daemon-driver-qemu:libvirt 连接 qemu 的驱动

可选软件

virt-install :系统安装工具

virt-manager :图形管理工具

virt-v2v :虚拟机迁移工具

virt-p2v :物理机迁移工具

三、虚拟机的组成

1、内核虚拟化模块(KVM)

2、系统设备仿真(QEMU)

3、虚拟机管理程序(LIBVIRT)

4、XML 文件(虚拟机配置声明文件,位置 /etc/libvirt/qemu/ )

5、磁盘镜像文件(虚拟机的硬盘,位置 /var/lib/libvirt/iamges/ )

四、虚拟机管理

使用 virsh 命令对 kvm 虚拟机进行常规管理。

a、查看虚拟机信息

1、查看 KVM 节点(服务器)信息

virsh nodeinfo

2、列出虚拟机

virsh list [--all]

3、列出虚拟网络

virsh net-list [--all]

4、查看指定虚拟机的信息

virsh nodeinfo 虚拟机名称

b、开关机操作

1、运行|重启|关闭 指定的虚拟机

virsh start|reboot|shutdown 虚拟机名称

2、强制关闭指定虚拟机

virsh destory 虚拟机名称

3、将指定虚拟机设置为开机自动运行

virsh autostart [--disable] 虚拟机名称

五、常用镜像盘类型对比

KVM 虚拟化的实现_kvm

经过以上表格的镜像盘格式对比,我们可以很肯定的知道,KVM 使用 QCOW2 格式的镜像盘时,对服务器资源的利用率最高的,当然系统默认的镜像盘格式。

六、虚拟机磁盘管理

使用命令 qemu-img

a、使用 qemu-img 命令对虚拟机的磁盘进行管理。

b、qemu-img 支持非常多的磁盘格式,例如 raw、qcow2、vdi、vmdk 等等。

c、qemu-img 命令格式


qemu-img 命令 参数 块文件名称 大小
常用命令有:
create           创建一个磁盘
convert          转换磁盘格式
info             查看磁盘信息
snapshot         管理磁盘快照
1、创建镜相盘文件
qemu-img create -f 格式 磁盘路径 大小
例如:
qemu-img create -f qcow2 disk.img 50G
表示创建一个名为 disk.img,大小为 50G,格式为 qcow2 的镜像盘文件
2、查看镜像盘文件的信息
qemu-img info 磁盘路径
例如:
qemu-img info disk.img
3、加 -b 参数使用后端模板文件
例如:
qemu-img create -b disk.img -f qcow2 disk1.img
表示以后端镜像盘 disk.img 为模板,创建一个名为 disk1.img 格式为 qcow2 的镜像盘,这里没有指定大小,表示与后端镜像盘 disk.img 相同大小。

七、COW 技术原理

COW,即:Copy On Write 写时复制,该技术主要实现以下功能

a、直接映射原始盘的数据内容

b、当原始的旧数据有修改时,再修改之前自动将旧数据存入前端盘

c、对前端盘的修改不回写到原始盘

如下图所示:

KVM 虚拟化的实现_虚拟化_02

在 KVM 虚拟化中,对于 COW 技术的运用可谓是无处不在,最明显的莫过于虚拟机的克隆。

八、KVM 虚拟机的远程管理

a、使用 virsh 客户端工具

1、连接本地

[root@localhost ~]# virsh -c qemu:///system (默认选项)

2、连接远程

[root@localhost ~]# virsh -c qemu+ssh://user@ip.xx.xx.xx:port/system

b、使用 virt-manager 客户端工具

1、virt-manager 也可以通过 add connection 管理其它机器上的虚拟机,一般通过 “ remote tunnel over ssh ” 就可以了。

2、需要注意的是 virt-manager 需要使用 ssh 免密登陆,如果没有免密登陆,需要单独安装 python 的 ssh 相关模块,这里我们可以使用部署 key 的方法解决。

九、创建虚拟交换机

a、原理:调用 dnsmasp 提供 DNS、DHCP 等功能

b、创建配置文件 /etc/libvirt/qemu/networks/default.xml,并粘贴以下内容:

<network>
   <name>default</name>
   <bridge name="virbr0"/>
   <forward mode="nat"/>
   <ip address="192.168.20.254" netmask="255.255.255.0">
      <dhcp>
         <range start="192.168.20.1" end="192.168.1.200"/>
      </dhcp>
   </ip>
</network>
[root@localhost ~]# cd /etc/libvirt/qemu/networks/
[root@localhost networks]# vim default.xml

KVM 虚拟化的实现_云计算_03

注意:bridge name="virbr0",这里时网卡名称,一定要与服务器的网卡名称相同,不然会报错。

c、使用 virsh 管理虚拟网络

net-list                          查看虚拟网络
net-define default.xml                  创建虚拟网络
net-undefine default                   删除虚拟网络
net-start default                     启动虚拟网络
net-destroy default                    停止虚拟网络
net-edit default                     修改 default 的网络配置
net-autostart default                   设置 default 虚拟网络开机启动

创建虚拟网络

[root@localhost networks]# virsh net-define eth1.xml

十、XML 管理

a、XML 配置文件说明

1、定义了一个虚拟机的名称、CPU、内存、虚拟磁盘、网卡等各种参数。

2、默认位于 /etc/libvirt/qemu/虚拟机名称.xml。

b、导出 XML 配置文件

1、查看:virsh dumpxml 虚拟机名称。

2、备份:virsh dumpxml 虚拟机名称 > 虚拟机名称.xml。

c、编辑虚拟机设置

1、对虚拟机的配置进行调整

①、编辑:virsh edit 虚拟机名称。

②、若修改 name、memory、disk、network,可自动保存为新虚拟机配置。

2、定义虚拟机

根据修改后的独立的 xml 文件定义新虚拟机。

virsh define XML描述文件

3、删除虚拟机

必要时可以删除多余的 XML 配置

①、比如虚拟机改名的情况

②、避免出现多个虚拟机的磁盘或者 MAC 地址冲突

③、virsh undefine 虚拟机名称

十一、创建模板虚拟机

a、使用 virt-manager 命令调出虚拟系统管理器,新建虚拟机

[root@localhost ~]# virt-manager

KVM 虚拟化的实现_kvm虚拟机_04

b、选择网络安装,并前进

KVM 虚拟化的实现_kvm虚拟机_05

c、在 URL 框中输入我们自己的内部 yum 源地址(centos 目录为挂载的光盘目录,对于光盘的挂载,这里省略)

KVM 虚拟化的实现_kvm_06

d、设置内存、CPU

KVM 虚拟化的实现_kvm虚拟化_07

注意:这里内存最好时大于 2048M,CPU 最小为 2 ,否则后面的虚拟机系统无法安装。

e、设置磁盘镜像,选择创建自定义存储,创建存储卷,如下图所示的过程。

KVM 虚拟化的实现_虚拟化_08KVM 虚拟化的实现_kvm虚拟机_09KVM 虚拟化的实现_虚拟化_10KVM 虚拟化的实现_云计算_11KVM 虚拟化的实现_kvm_12

f、设置虚拟机名称并指定网络,完成之后,就会进入 Centos 的系统安装界面,至于系统的安装,我们就不再一步步演示了。

KVM 虚拟化的实现_云计算_13

经过上面的 6 步,我们已经创建了一个 kvm 虚拟机的模板,这个模板时最小化安装,完全纯净的。如果要使用云,则这个模板将会是关键性的存在,因为 KVM 使用了 COW 写时复制技术。

十二、总结

经过一系列的阐述与演示,我们是否有对 KVM 虚拟化有个大致的了解?其实 KVM 虚拟化,除了命令多之外,其他的跟 vsphere、xen 虚拟化没多少区别。而且,现在很多企业中都在使用 KVM ,而很多云环境的搭建也会有 KVM 的身影存在,因此,关于 KVM ,各位老铁们还得不断的了解啊。