KVM三种工作模式

客户模式:执行非I/O的客户代码,虚拟机运行在这个模式下

用户模式:用户执行I/O代码,QEMU运行在这个模式下 

内核模式:CPU调度和内存管理相关

部署KVM虚拟化平台_vim

KVM工作原理

用户模式的 Qemu 利用接口 libkvm 通过 ioct 系统调用进入内核模式。KVM Driver 为虚拟机创建虚拟 CPU 和虚拟内存,然后执行 VMLAUNCH 指令进入客户模式,装载 GuestOS 并运行。Guest OS 运行过程中如果发生中断或者影子缺页等异常,将暂停Guest OS的运行并保存当前上下文退出到内核模式来处理这些异常。内核模式处理这些异常时如果不需要 I/0 则处理完成后重新进入客户模式。如果需要 I/0 则进入到用户模式,由 Qemu 来处理 I/0,处理完成后进入内核模式,再进入客户模式。

本案例实验环境

主机

.  操作系统

IP地址

主要软件

kvm01

CentOS 7.9 x86_64

192.168.10.108


KVM 虚拟机

kvm02

CentOS 7.9 x86_64

192.168.10.109

案例需求

(1)安装KVM。

(2)完成基本的KVM 操作管理(创建、启动、停止等)。

(3)完成KVM 命令行操作虚拟机。

案例实现思路

(1)准备KVM 装环境。

(2)安装KVM。

(3)配置KVM 桥接网络。

(4)创建KVM 存储池并安装虚拟机。

(5)命令行操作虚拟机。

搭建KVM 虚拟化平台

准备kvm 虚拟化环境
1.安装
(1)YUM 安装KVM
yum -y install qemu-kvm 
yum -y install qemu-kvm-tools 
yum -y install virt-install 
yum -y install qemu-img 
yum -y install bridge-utils 
yum -y install libvirt 
yum -y install virt-manager
yum -y install libguestfs-tools
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

备注:

qemu-kvm :kvm核心包–虚拟操作系统模拟器加速模块

qemu-kvm-tools :qemu-kvm的工具包

virt-install:虚拟机安装工具

qemu-img :是QEMU的磁盘管理工具

bridge-utils:虚拟机与外界通信的命令管理工具

libvirt:必须要装的核心工具

virt-manager:虚拟机图形管理工具(宿主机有桌面环境时可以考虑安装,命令操作或者远程控制则不需要)

QEMU是“Quick Emulator”的缩写,是一个用C语言编写的开源虚拟化软件。

QEMU(Quick Emulator)快速仿真器

libguestfs-tools:用于访问虚拟机的磁盘映像文件提供的一组命令

(2)关机,设置CPU支持虚拟化,然后开机

部署KVM虚拟化平台_IPV6_02

(3)开机后验证
[root@kvm01 ~]# cat /proc/cpuinfo | grep vmx
[root@kvm01 ~]# lsmod | grep kvm
  • 1.
  • 2.
(4)开启libvirtd 服务

安装完成后还需要开启libvirtd 服务,以开启相关支持。

[root@kvm01 ~]# systemctl start libvirtd 
[root@kvm01 ~]# systemctl enable libvirtd
  • 1.
  • 2.
2.设置KVM 网络

这里以Bridge(桥接)为例进行操作演示

[root@kvm01 ~]# cd /etc/sysconfig/network-scripts/

[root@kvm01 network-scripts]# cp ifcfg-ens33 ifcfg-br0
  • 1.
  • 2.
  • 3.
[root@kvm01 ~]# vim ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=192.168.10.108
NETMASK=255.255.255.0
GATEWAY=192.168.10.254
DNS1=223.6.6.6
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
DEVICE=ens33
ONBOOT=yes
BRIDGE=br0
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
[root@kvm01 ~]# vim ifcfg-br0

TYPE=Bridge
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=192.168.10.108
NETMASK=255.255.255.0
GATEWAY=192.168.10.254
DNS1=223.6.6.6
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=br0
DEVICE=br0
ONBOOT=yes


[root@kvm01 ~]#systemctl restart network
[root@kvm01 ~]# ifconfig
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
3.KVM 管理
[root@kvm01 ~]# virt-manager
  • 1.
(1)创建存储池

存储池的名称为:bdqn

存储池的目录为:/data_kvm/store

(2)创建存储卷

在bdqn的存储池中添加存储卷

存储卷名称为:test01

卷最大容量10G

(3)将Linux系统的ISO文件拷贝到/opt目录下,并关闭存储设置
(4)在kvm01的主机上新建虚拟机,名称为test01

使用KVM 命令集管理虚拟机

1:KVM 基本功能管理
(1)查看命令帮助
[root@kvm01 ~]# virsh -h
  • 1.
(2)查看KVM 的配置文件存放目录
[root@kvm01 ~]# ls /etc/libvirt/qemu/
  • 1.
(3)查看虚拟机状态
[root@kvm01 ~]# virsh list --all
  • 1.
(4)虚拟机关机与开机
[root@kvm01 ~]# virsh shutdown test01 
[root@kvm01 ~]# virsh start test01
  • 1.
  • 2.
(5)强制实例系统关闭电源
[root@kvm01 ~]# virsh destroy test01
  • 1.
(6)通过配置文件启动虚拟机系统实例
[root@kvm01 ~]# virsh create /etc/libvirt/qemu/test01.xml 
[root@kvm01 ~]# virsh list --all
  • 1.
  • 2.
(7)挂起虚拟机
[root@kvm01 ~]# virsh suspend test01
[root@kvm01 ~]# virsh list --all
  • 1.
  • 2.
(8)恢复虚拟机
[root@kvm01 ~]# virsh resume test01 
[root@kvm01 ~]# virsh list --all
  • 1.
  • 2.
(9)配置虚拟机实例伴随宿主机自动启动
[root@kvm01 ~]# virsh autostart test01
  • 1.
(10)导出虚拟机配置
[root@kvm01 ~]# virsh dumpxml test01 > /etc/libvirt/qemu/test02.xml
  • 1.
(11)虚拟机的删除与添加

删除虚拟机

[root@kvm01 ~]# virsh shutdown test01 
[root@kvm01 ~]# virsh undefine test01
  • 1.
  • 2.

查看删除结果,test01 的配置文件被删除,但是磁盘文件不会被删除。

[root@kvm01 ~]# ls /etc/libvirt/qemu/
  • 1.

通过virsh list --all 查看不到test01 的信息,说明此虚拟机被删除。

[root@kvm01 ~]# virsh list --all
  • 1.

通过备份的配置文件重新定义虚拟机。

[root@kvm01 ~]# cd /etc/libvirt/qemu 
[root@bdqn qemu]# mv test02.xml test01.xml
  • 1.
  • 2.

重新定义虚拟机。

[root@bdqn qemu]# virsh define test01.xml
  • 1.
(12)修改虚拟机配置信息(用来修改系统内存大小、磁盘文件等信息)

直接通过vim 命令修改

[root@kvm01 ~]# vim /etc/libvirt/qemu/test01.xml
  • 1.

通过virsh 命令修改。

[root@kvm01 ~]# virsh edit test01
  • 1.
3. KVM 文件管理
(1)查看当前磁盘格式
[root@kvm01 ~]# qemu-img info /data_kvm/store/test01.qcow2
  • 1.
(2)virt-cat 命令,类似于cat 命令

使用这个命令需要安装libguestfs-tools-c 工具包。

[root@kvm01 ~]# virt-cat -a /data_kvm/store/test01.qcow2 /etc/sysconfig/grub
  • 1.
(3)virt-edit 命令

virt-edit 命令,用于编辑文件,用法与vim 基本一致。

[root@kvm01 ~]# virt-edit -a /data_kvm/store/test01.qcow2 /etc/resolv.conf
  • 1.
(4)virt-df 命令

virt-df 命令用于查看虚拟机磁盘信息。

[root@kvm01 ~]# virt-df -h test01
  • 1.
4. 虚拟机克隆
(1)查看虚拟机状态
[root@kvm01 ~]# virsh list --all
  • 1.
(2)从test01 克隆test02
[root@kvm01 ~]# virt-clone -o test01 -n test02 -f /data_kvm/store/test02.qcow2
  • 1.

(3)查看虚拟机状态
[root@kvm01 ~]# virsh list --all
  • 1.

(4)启动虚拟机
[root@kvm01 ~]# virsh start test02
  • 1.
5. 虚拟机快照

KVM 虚拟机要使用镜像功能,磁盘格式必须为qcow2。下面介绍KVM 虚拟机快照备份的过程。

(1)对test01 创建快照
[root@kvm01 ~]# virsh snapshot-create t
  • 1.

已生成域快照1503494464

(2)查看虚拟机快照版本信息
[root@kvm01 ~]# virsh snapshot-current test01
  • 1.
(3)查看快照信息
[root@kvm01 ~]# virsh snapshot-list test01
  • 1.
(4)创建新快照
[root@kvm01 ~]# virsh snapshot-create test01
  • 1.

(5)查看快照信息
[root@kvm01 ~]# virsh snapshot-list test01
  • 1.