部署 KVM 虚拟化平台
1.KVM 原理简介
广义的 KVM 实际上包含两部分,一部分是基于 Linux 内核支持的 KVM 内核模块,另·部分就是经过简化和修改的 Qemu。
KVM 内核模块是模拟处理器和内存以支持虚拟机的运行,Qemu 主要处理 I/0 以及为用户提供一个用户空间工具来进行虚拟机的管理。两者相互结合、相辅相成,构成了一个完整的虚拟化平台。
需要注意的是,Qemu 本身并不是 KVM 的一部分,Qemu是一套完整的虚拟化解决方案,是纯软件实现虚拟化,包括处理器虚拟化、内存虚拟化以及各种虚拟设备的模拟,但因为是纯软件模拟出来的,所以 Qemu 的性能比较低。
2.KVM 运行时的三种模式
KVM 模块是让 Linux 主机成为一个虚拟机监视器(VMM),并且在原有 Linux 内核模式和用户模式的两种执行模式基础上新增加了客户模式,客户模式也拥有自己的内核模式和用户模式。
客户模式:可以简单理解成客户机在操作系统运行中的模式,客户模式又分为内核模式和用户模式。客户模式中的内核模式和用户模式的作用分别如下所示。
用户模式:为用户提供虚拟机管理的用户空间工具以及代表用户执行 I/0,Qemu运行>在这个模式之下。
内核模式:模拟 CPU 以及内存,实现客户模式的切换,处理从客户模式的退出。KVM内核模块运行在这个模式下。
3.KVM 工作原理
用户模式的 Qemu 利用接口 libkvm 通过ioctl 系统调用进入内核模式。KVM Driver 为虚拟机创建虚拟 CPU 和虚拟内存,然后执行 MLAUNCH 指令进入客户模式,装载 GuestOS 并运行。Guest OS 运行过程中如果发生中断或者影子缺页等异常,将暂停 Guest OS的运行并保存当前上下文退出到内核模式来处理这些异常。内核模式处理这些异常时如果不需要 I/0 则处理完成后重新进入客户模式。如果需要 I/0 则进入到用户模式,由 Qemu 来处理 I/O,处理完成后进入内核模式,再进入客户模式,
1.1.3 案例环境
1.本案例实验环境
主机 | 操作系统 | IP 地址 | 主要软件 |
bdqn | CentOS 7.9 x86 64 | 192.168.10.108 | KVM 虚拟机 |
test01 | CentOS 7.9 x86 64 | 192.168.10.109 |
2.案例需求
(1)安装 KVM.
(2)完成基本的 KVM 操作管理(创建、启动、停止等)。
3)完成 KVM 命令行操作虚拟机。
3.案例实现思路
(1)准备 KVM 装环境。
(2)安装 KVM。
(3)配置 KVM 桥接网络。
(4)创建 KVM 存储池并安装虚拟机。
(5)命令行操作虚拟机。
1.2 搭建 KVM 虚拟化平台
1.2.1 准备 kvm 虚拟化环境
1.安装方式
(1)YUM 安装 KVM
在 CentOS 的系统光盘镜像中,已经提供了安装 KVM 所需软件。通过部署基于光盘镜像的本地 YUM 源,直接使用 YUM 安装所需软件即可,安装 KVM 所需软件具体包含以下几个。
需要注意的是:在使用 YUM 安装完桌面后执行In-sf/lib/systemd/system/graphical.target /etc/systemd/system/default.target 命令,将系统的默认运行 target 更改为 graphical.targe。重启后系统将进入图形化界面。若不执行上述命令更改系统的默认运行 target,重启时可能报错。
(2)验证
重启系统后,查看CPU 是否支持虚拟化,对于Intel 的服务器可以通过以下命令查看只要有输出就说明 CPU 支持虚拟化;AMD 服务器可用 cat/proc
vim /etc/sysconfig/network-scripts/ifcfg-ens33
/cpuinfo|grep smv 命令查看。
cat /proc/cpuinfo | grep vmx
检査 KVM 模块是否安装:
lsmod | grep kvm
(3)开启 libvirtd 服务
安装完成后还需要开启 libvirtd 服务,以开启相关支持。
systemctl start libvirtd
systemctl enable libvirtd
2.设置 KVM 网络
宿主服务器安装完成 KVM,首先要设定网络,在 libvin 中运行 KVM 网络有两种方法:NAT 和 Bridge,默认是 NAT。
关于两种网络模式的说明:
用户模式,即 NAT方式,这种方式是默认网络,数据包由 NAT 方式通过主机的网卡接口进行传送,可以访问外网,但是无法让外部主机访问虚拟机内部网络。
桥接模式,这种模式允许虚拟机像一台独立的主机一样拥有网络,外部的机器可以直接访问到虚拟机内部,但需要网卡支持,一般有线网卡都支持。这里以 Bridge(桥接)为例进行操作演示。注:宿主机IP 地址为 192.168.10.1
vim /etc/sysconfig/network-scripts/ifcfg-ens33
vim /etc/sysconfiginetwork-scripts/ifcfg-br0
重启 network 服务。
/etc/init.d/network restart
确认 IP 地址信息。
ifconfig
3.KVM 管理
virt-manager
virt-manager 是基于 libvirt 的图像化虚拟机管理软件。需要注意的是,不同发行版上的virt-manager 版本可能有所不同,图形界面和操作方法也可能不同。本文使用了 CentOS7.3。创建 KVM 虚拟机最简单的方法是通过 vint-manager 接口。从控制台窗口启动这个工具,以 root 身份输入 virt-manager 命令,
(2)创建镜像存储池
以同样的操作创建一个镜像存储池,命名为bdgn iso,目录为/data kvm/iso 即可。在安装操作系统时,需要把镜像上传到服务器目录/datakvm/iso,
(3)创建存储卷
单击刚创建好的“bdgn”,单击对话框中“卷"右边的“+”按钮建立一个存储卷,并设置最大容量
4)新建虚拟机
单击“完成”按钮后,回到虚拟系统管理器。右击“QEMU/KVM”,然后选择“新建”选项,在弹出的对话框中按图 1.8所示选择“本地安装介质”,然后单击“前进”按钮。
在“引导选项”视图中勾选“主机引导时启动虚拟机"复选框,这样在物理宿主机启动后这个 VM 也会启动,最后单击“应用”按钮,
最后单击“开始安装”按钮即可,整个虚拟化配置过程完成。下面就是安装操作系统的工作,和平时安装 Linux 系统一样,
1.2.2 使用 KVM 命令集管理虚拟机
1.安装 Linux 虚拟机
2.KVM 基本功能管理
(1)查看命令帮助
virsh -h
(2)查看 KVM 的配置文件存放目录
Is /etc/libvirt/gemu/
3)查看虚拟机状态
virsh list --all
(4)虚拟机关机与开机
virsh shutdown test01
virsh start test01
(5)强制实例系统关闭电源
virsh destroy test01
6)通过配置文件启动虚拟机系统实例
virsh create /etc/libvirt/gemu/test01.xml
virsh list --all
(7)挂起虚拟机
virsh suspend test01
查看虚拟机状态。
virsh list --all
8)恢复虚拟机
virsh resume test01
virsh list .-all
9.配置虚拟机实例伴随宿主机自动启动
virsh autostart test01
(10)导出虚拟机配置
virsh dumpxml test01 >/etc/libvirt/qemu/test02.xml
(11)虚拟机的删除与添加
virsh shutdown test01
virsh undefine test01
查看删除结果,test01的配置文件被删除,但是磁盘文件不会被删除。
Is /etc/libvirt/gemu/
通过 virsh list --a 查看不到 test01 的信息,说明此虚拟机被删除。
virsh list --all
通过备份的配置文件重新定义虚拟机。
cd /etc/libvirt/gemu
mv test02.xml test01.xml
重新定义虚拟机。
virsh define test01.xml
查看虚拟机信息。
virsh list --all
(12)修改虚拟机配置信息(用来修改系统内存大小、磁盘文件等信息)直接通过 vim 命令修改。
vim /etc/libvirt/gemu/test01.xml
通过 virsh 命令修改。
virsh edit test01
3.KVM 文件管理
通过文件管理可以直接查看、修改、复制虚拟机的内部文件。例如,当系统因为配置问题无法启动时,可以直接修改虚拟机的文件。虚拟机磁盘文件有raw、 qcow2 与 qed 格式,KVM 虚拟机默认使用 qcow2 格式。这里介绍本地 YUM 安装 libguestfs-tools 后产生的命令行工具,这个工具可以直接读取 qcow2 格式的磁盘文件。
qemu-img info /data_kvm/store/test01.qcow2
如果虚拟机磁盘文件不是 qcow2 格式,可以通过 qemu-img 命令转换磁盘文件格式,如执行以下操作可以将 test01 虚拟机 raw 格式磁盘转换至 qcow2 格式。
virsh shutdown test01
qemu-img convert -f raw/data kvm/store/test01.gcow2
qcow2 /data kvm/store/test01.img
执行转换磁盘格式的命令后还需要修改 test01 的 xml配置文件中磁盘的类型与磁盘文
件名。
virsh edit test01
(2)virt-cat 命令,类似于 cat 命令使用这个命令需要安装 libguestfs-tools-c 工具包
yum -y install libguestfs-tools-c
virt-cat -a /data kvmistore/test01.gcow2 /etc/sysconfig/grub
(3)virt-edit 命令
virt-edit 命令,用于编辑文件,用法与 vim 基本一致。
virt-edit -a/data_kvm/store/test01.gcow2 /etc/resolv.conf
(4)virt-df命令
vint-df 命令用于查看虚拟机磁盘信息。
virt-df -h test01
4.虚拟机克隆
(1)查看虚拟机状态
virsh list --all
(2)从 test01 克隆 test02
virt-clone -o test01 -n test02 -f /data kvm/store/test02.qcow2
(3)查看虚拟机状态
virsh list --all
(4)启动虚拟机
virsh start test02
5.虚拟机快照
磁盘格式必须为 qcow2。下面介绍 KVM 虚拟机快照备KVM 虚拟机要使用镜像功能,份的过程。
(1)对 test01 创建快照
virsh snapshot-create test01
(2)查看虚拟机快照版本信息
virsh snapshot-current test01
3.查看快照信息
virsh snapshot-list test01
4.创建新快照
virsh snapshot-create test01
(5)查看快照信息
virsh snapshot-list test01
virsh snapshot-list test01
6)恢复虚拟机状态至1503494464
virsh snapshot-revert test01 1503494464
(7)查看虚拟机快照版本信息
virsh snapshot-current test01
(8)删除快照
virsh snapshot-delete test01 1503494464