一、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 使用 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 虚拟化中,对于 COW 技术的运用可谓是无处不在,最明显的莫过于虚拟机的克隆。
八、KVM 虚拟机的远程管理
a、使用 virsh 客户端工具
1、连接本地
[root@localhost ~]# virsh -c qemu:///system (默认选项)
2、连接远程
[root@localhost ~]# virsh -c qemu+ssh://[email protected]: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,并粘贴以下内容:
default
[root@localhost ~]# cd /etc/libvirt/qemu/networks/ [root@localhost networks]# vim default.xml
注意: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
b、选择网络安装,并前进
c、在 URL 框中输入我们自己的内部 yum 源地址(centos 目录为挂载的光盘目录,对于光盘的挂载,这里省略)
d、设置内存、CPU
注意:这里内存最好时大于 2048M,CPU 最小为 2 ,否则后面的虚拟机系统无法安装。
e、设置磁盘镜像,选择创建自定义存储,创建存储卷,如下图所示的过程。
f、设置虚拟机名称并指定网络,完成之后,就会进入 Centos 的系统安装界面,至于系统的安装,我们就不再一步步演示了。
经过上面的 6 步,我们已经创建了一个 kvm 虚拟机的模板,这个模板时最小化安装,完全纯净的。如果要使用云,则这个模板将会是关键性的存在,因为 KVM 使用了 COW 写时复制技术。
十二、总结
经过一系列的阐述与演示,我们是否有对 KVM 虚拟化有个大致的了解?其实 KVM 虚拟化,除了命令多之外,其他的跟 vsphere、xen 虚拟化没多少区别。而且,现在很多企业中都在使用 KVM ,而很多云环境的搭建也会有 KVM 的身影存在,因此,关于 KVM ,各位老铁们还得不断的了解啊。